zoukankan      html  css  js  c++  java
  • 单片机usb转串口的时灵时不灵的解答

    写这篇博客,首先检讨一下自己,因为以前串口的程序,也和步进电机一样,时灵时不灵,我现在终于知道这是为什么了,因为51上有三个串口,一个公口,一个母口,一个usb转串口,这样的话,串口有3个了,我手头上有usb转串口线,也就是平时用来下程序的那根线,还有一个母口的线,今天我很纠结这两个的驱动,因为今天用usb转串口线,可以实现单片机和电脑的通信,但是用母口线,奇怪的是他并没有想象中的那种效果,更奇葩的是单片机下电它还能接收到数据

    尼玛了这么久,还是看一下今天的程序,这个程序很简单,也就是上一次屡次不爽的程序,这里晒出来,还有串口小助手的截图也发出来,供以后学习之用

     
    /*-----------------------------------------------
      名称:串口通信
      网站:www.doflye.net
      编写:shifang
      日期:2009.5
      修改:无
      内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源
            打开串口调试程序,将波特率设置为9600,无奇偶校验
            晶振11.0592MHz,发送和接收使用的格式相同,如都使用
            字符型格式,按复位重启程序,可以看到接收到 UART test,技术论坛:www.doflye.net 请在发送区输入任意信
            然后在发送区发送任意信息,接收区返回同样信息,表明串口收发无误
    ------------------------------------------------*/
    
    #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        
    
    /*------------------------------------------------
                       函数声明
    ------------------------------------------------*/
    void SendStr(unsigned char *s);
    
    /*------------------------------------------------
                        串口初始化
    ------------------------------------------------*/
    void InitUART  (void)
    {
    
        SCON  = 0x50;                // SCON: 模式 1, 8-bit UART, 使能接收  
        TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
        TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
        TR1   = 1;                  // TR1:  timer 1 打开                         
        EA    = 1;                  //打开总中断
       // ES    = 1;                  //打开串口中断
    }                            
    /*------------------------------------------------
                        主函数
    ------------------------------------------------*/
    void main (void)
    {
    
    InitUART();
    
    SendStr("UART test,技术论坛:www.doflye.net 请在发送区输入任意信息");
    
    ES    = 1;                  //打开串口中断
    while (1)                       
        {
        
        }
    }
    
    /*------------------------------------------------
                        发送一个字节
    ------------------------------------------------*/
    void SendByte(unsigned char dat)
    {
     SBUF = dat;
     while(!TI);
          TI = 0;
    }
    /*------------------------------------------------
                        发送一个字符串
    ------------------------------------------------*/
    void SendStr(unsigned char *s)
    {
     while(*s!='')//  表示字符串结束标志,通过检测是否字符串末尾
      {
      SendByte(*s);
      s++;
      }
    }
    /*------------------------------------------------
                         串口中断程序
    ------------------------------------------------*/
    void UART_SER (void) interrupt 4 //串行中断服务程序
    {
        unsigned char Temp;          //定义临时变量 
       
       if(RI)                        //判断是接收中断产生
         {
          RI=0;                      //标志位清零
          Temp=SBUF;                 //读入缓冲区的值
          P1=Temp;                   //把值输出到P1口,用于观察
          SBUF=Temp;                 //把接收到的值再发回电脑端
         }
       if(TI)                        //如果是发送标志位,清零
         TI=0;
    } 

    不知道母口那根线是怎么回事,以后调试一下,问题出来才总结

    版权所有,转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3467486.html

  • 相关阅读:
    Lightmaping
    Android内存回收机制
    基本光照模型简单实现
    Pass的通用指令开关
    使用Depth Texture
    使用替换shader渲染
    Windows下安装Oracle12C(一)
    SpringMVC文件上传基础
    Spring集成线程池
    《经久不衰的Spring框架:@ResponseBody 中文乱码》(转)
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3467486.html
Copyright © 2011-2022 走看看