标题: 单片机串口通信程序(串口发送和接受一个数组) [打印本页]

作者: 九年空间    时间: 2020-6-12 20:17
标题: 单片机串口通信程序(串口发送和接受一个数组)
  1. #include<reg51.h>
  2. #define uchar flag1,flag2,flag3
  3. sbit key1=P1^0;
  4. sbit key2=P2^1;
  5. sbit key3=P2^2;
  6. flag1=1,flag2=1,flag3=1;
  7. unsigned char i;
  8. unsigned char n;
  9. unsigned char code Tab[ ]={0xA5,0X20}; //开始扫描命令
  10. unsigned char a[4];    //接收数据数组
  11. float b[1];     //提取后的数据数组
  12. void delay(unsigned int time);
  13. void Send(unsigned char dat)   //发送命令
  14. {
  15.     SBUF=dat;
  16. while(TI==0);
  17. TI=0;
  18. }
  19. void UsartInit()
  20. {TMOD=0x20;    //定时器T1工作方式2
  21. SCON=0x50;   //串口工作方式1允许接收(REN=1)
  22. PCON=0x00;   //正常波特率9600
  23. TH1=0xfd;   //初值设定,波特率9600
  24. TL1=0xfd;
  25. TR1=1;    //打开计数器
  26. EA=1;    //打开总中断
  27. ES=1;}    //打开中断允许中的串口中断允许
  28. void key_scan()    //按键扫描
  29. {if(!key1){delay(10);if(!key1)flag1=0;}
  30. if(!key2){delay(10);if(!key2)flag2=0;}
  31. if(!key3){delay(10);if(!key3)flag3=0;}
  32. }
  33. void delay(unsigned int time)   //延时
  34. { unsigned int j = 0;
  35. for(;time>0;time--)
  36.   for(j=0;j<110;j++);}
  37. void main()
  38. {
  39. UsartInit();    //串口初始化
  40. key_scan();                     //按键扫描
  41. if(flag1==0&flag2==1&flag3==1) //判断是否开始扫描
  42. { flag1=1;                   //清零按键标志
  43. for (i=0;i<2;i++)                                      //串口发送
  44.     {
  45.       Send(Tab[i]);
  46.    delay(20);
  47.   }
  48.   delay(300);
  49. n=0;
  50. while(n<5)                                               //串口接收  
  51. while(RI==0);
  52. {a[n]=SBUF;
  53. RI=0;
  54. n++;}}

  55.   
  56. }
复制代码






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1