找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机串口程序,不清楚为什么出错

查看数: 2441 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-10-28 17:00

正文摘要:

这也是一次单片机练习,我是根据课上讲的仿照写的,但是出错了,不清楚出错点,请各位大佬给指点指点。 要求:计算机发送数据0x00~0x0F,一次发送一个数据,单片机接收后在1位共阳数码管上显示,并返回计算机一个 ...

回复

ID:1096616 发表于 2023-10-29 16:34

我明白我的错误在哪里了,在串口调试助手处我应该选择16进制发送的,这样子就可以得到正确的返回值,谢谢大佬
ID:213173 发表于 2023-10-29 10:52
深层次 发表于 2023-10-29 08:36
我刚刚尝试了你的方法,虽然是有返回值,但是返回值不对,而且数码管也没有亮起来。


ID:213173 发表于 2023-10-28 21:19
  1. #include<reg52.h>
  2. #define uchar unsigned char//宏定义非整型字符
  3. #define uint unsigned int//宏定义整型字符
  4. uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管0~16段码
  5. uchar code sendbuf[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
  6. 0x8A,0x8B,0x8C,0x8D,0X8E,0X8F};//单片机返回数字
  7. uchar dat;
  8. bit busy;
  9. bit flag;
  10. //void delay(uint a);
  11. void uart();
  12. void send(uchar byte);

  13. /****主函数*****/
  14. void main()
  15. {
  16.         uart();
  17.         while(1)
  18.         {
  19.                 if(flag)
  20.                 {
  21.                         flag=0;
  22.                         switch(dat)
  23.                         {
  24.                                 case 0x00: P2=seg[0]; break;
  25.                                 case 0x01: P2=seg[1]; break;
  26.                                 default:break;
  27.                         }
  28.                         while(busy);
  29.                         busy = 1;
  30.                         SBUF = sendbuf[dat];
  31.                 }
  32.         }
  33. }
  34. /*****串口方式初始化*******/
  35. void uart()
  36. {
  37.         SCON=0x50;//串口方式一,允许接收
  38.         PCON=0x80; //波特率加倍
  39.         TMOD=0x20; //T1定时方式2
  40.         TH1=0xf3;
  41.         TL1=0xf3;//4800b/s
  42.         TR1=1;
  43.         ES=1;
  44.         EA=1;
  45. }
  46. /******中断服务函数*****/
  47. void rf()interrupt 4
  48. {
  49.         if (TI)
  50.         {
  51.                 TI = 0;
  52.                 busy = 0;
  53.         }
  54.         if (RI)
  55.         {
  56.                 RI = 0;
  57.                 dat = SBUF;
  58.                 flag=1;
  59.         }
  60. }
复制代码
ID:883242 发表于 2023-10-28 18:44
哪里出错了?是编译失败,还是执行错误,你不讲清楚是不行的。

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

Powered by 单片机教程网

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