找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3808|回复: 0
打印 上一主题 下一主题
收起左侧

单片机串口通信程序(串口发送和接受一个数组)

[复制链接]
跳转到指定楼层
楼主
ID:764098 发表于 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. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表