×
单片机 > 单片机程序设计 > 详情

51学习之串口收发

发布时间:2020-09-01 发布时间:
|
自己写了个接收程序,流程是上位机发给单片机,如果收到的是1,就点亮一个LED,同时把收到的再发到串口。编译不通过,原因是我把中断函数、接收函数等前加了个void,一直不明白加与不加有何区别。明天上网查下。去掉,有报警,但是编译能通过,下进去,果然没有预期的结果。也不知道到底是啥毛病,明天再找吧!
明天调好这个,再做做收发,就先做自收发吧!


调通了网上原程序。这个也通了。可实现上述功能,不过程序做的是点亮后,延时会熄灭。
 
#include
#define uchar unsigned char
#define uint  unsigned int
sbit Led = P0^0;
Delay()
{ int i,j; 
  for(i=0;i<5000;i++)
     {
       for(j=0;j<30;j++);
     }
}


 Uart_int()
{  SCON=0x50;
   TMOD=0x20;
   TH1 =0xfd;
   TL1 =0xfd;
   IE =0x90;
   TR1 =1;
}
 UART_interrupt() interrupt 4
{   char m;
    ES = 0;
if(TI)
    {
TI=0;
}
    else
    {
 RI=0;
 m=SBUF;
     
 if(m==0x31)
   {
     Led=0;
     Delay();
     Led=1;
   }
      SBUF=m;
}
   ES = 1;
 }


其实,开始我自己做的程序也行。错就错在关于m判断上。我以前写的是if(m==1),而从串口发31或1.而在C中,它只能判定16进制和10进制,所以我的ASCII 收成10进制是49,收成16进制是31,怎么也不会等于1.而把if(m==1)改成if(m==0x31)一试OK了。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单