单片机串口程序没反应不知道怎么回事

[复制链接]
1122|16
 楼主| damoyeren 发表于 2014-12-11 09:15 | 显示全部楼层 |阅读模式


  1. #include <reg52.h>

  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;


  4. uchar *p="shanxi gelanfu ";

  5. void uart_init() //波特率:9600 无校验位
  6. {
  7. SCON = 0X50;//串口工作在方式1,允许接受
  8. TMOD = 0X20;//定时器T1工作在方式2,自动重装模式
  9. TH1 = 0XFD;
  10. TL1 = 0XFD;//9600波特率预装初值
  11. TR1 = 1;
  12. }

  13. void uart_send(uchar *dat)
  14. {
  15. if(!TI)
  16. {
  17. if (*dat!='\0')
  18. SBUF = *dat;
  19. }
  20. else
  21. TI = 0;
  22. }

  23. void main ()
  24. {
  25. uart_init();
  26. while(1)
  27. {
  28. uart_send(p);
  29. }
  30. }


ningling_21 发表于 2014-12-11 09:20 | 显示全部楼层
查询发送用while()  等待发送结束

不能用 if ()
ayb_ice 发表于 2014-12-11 10:07 | 显示全部楼层
void uart_send(uchar *dat)
{
        // if(!TI)
        // {
                // if (*dat!='\0')
                        // SBUF = *dat;
        // }
        // else
                // TI = 0;
        while(1){
                char t;
                while(!TI){
               
                }
                TI = 0;
               
                t = *dat++;
                if(t != '\0'){
                        SBUF = t;
                }else{
                        break;
                }
        }
}
 楼主| damoyeren 发表于 2014-12-11 17:05 | 显示全部楼层
ningling_21 发表于 2014-12-11 09:20
查询发送用while()  等待发送结束

不能用 if ()

为啥不能用if,while和if还真没搞明白
ningling_21 发表于 2014-12-11 17:41 | 显示全部楼层
damoyeren 发表于 2014-12-11 17:05
为啥不能用if,while和if还真没搞明白

也不是不能用,串口发数据,经常不确定需要多长时间,对于这种不确定的状态就要等待,所以IF不太适合
您需要登录后才可以回帖 登录 | 注册

本版积分规则

126

主题

393

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部