微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机串口通信

单片机串口通信

时间:10-02 整理:3721RD 点击:

  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar code table[]={
  5. 0x3f,0x06,0x5b,0x4f,
  6. 0x66,0x6d,0x7d,0x07,
  7. 0x7f,0x6f,0x77,0x7c,
  8. 0x39,0x5e,0x79,0x71};
  9. sbit dula=P2^6;
  10. sbit wela=P2^7;
  11. uchar bai,shi,ge,flag,a;
  12. void init()
  13. {
  14.                         TMOD=0x20;                     
  15.                         TH1=0Xfd;
  16.                         TL1=0xfd;
  17.                         TR1=1;
  18.                         SM0=0;
  19.                         SM1=1;
  20.                         REN=1;
  21.                         EA=1;
  22.                         ES=1;
  23. }
  24. void delayms(uint xms)
  25. {
  26.         uint i,j;
  27.           for(i=xms;i>0;i--)
  28.                                 for(j=110;j>0;j--);
  29. }
  30. void display(uchar a)
  31. {
  32.                                 bai=a/100;
  33.               shi=a%100/10;
  34.               ge=a%10;
  35.        
  36.                                 dula=1;
  37.                                 P0=table[bai];
  38.                                 dula=0;
  39.                                 P0=0xff;
  40.                                 wela=1;
  41.                                 P0=0xfe;
  42.                                 wela=0;
  43.                                 delayms(5);
  44.        
  45.                                 P0=table[shi];
  46.                                 dula=0;
  47.                                 P0=0xff;
  48.                                 wela=1;
  49.                                 P0=0xfd;
  50.                                 wela=0;
  51.                                 delayms(5);
  52.                                
  53.                                 P0=table[ge];
  54.                                 dula=0;
  55.                                 P0=0xff;
  56.                                 wela=1;
  57.                                 P0=0xfb;
  58.                                 wela=0;
  59.                                 delayms(5);
  60.                                
  61.                         }
  62.                                
  63. void main()
  64. {
  65.                         init();
  66.                         while(1)
  67.                         {
  68.                                
  69.                                 if(flag==1)
  70.                                 {
  71.                        
  72.                                         ES=0;
  73.                                         SBUF=a;
  74.                                         while(!TI);
  75.                                         TI=0;
  76.                                         ES=1;
  77.                                         flag=0;
  78.                                 }
  79.                                 display(a);
  80.                         }
  81. }

  82. void ser() interrupt 4
  83. {
  84.         RI=0;
  85.         a=SBUF;
  86.         flag=1;
  87. }






  88.                
  89.                

复制代码

上位机发送一个字节的数据,单片机接收以后在数码管上显示数据并返回给上位机。不知道怎么回事,数码管不能显示数据,求大神帮助。

线路板是正在使用过程还是购买的新品

线路板是使用过的。

这个先确定一下板子是否良好再说

板子确实是好的 已经确认过了

这个要从两方面调试,一调试数码管 看驱动是否正确  二调试串口接收 看收到的数对不对

你的串口到底是用中断呢?还是查询呢

当上位机向单片机发送数据的时候触发串口中断

你把main函数中的SBUF=a,改成SBUF=“1”; 调试了试一下,看行不?

首先,我看到你中断有a变量,这应该是个全局变量,但是我并没有看到你在哪定义了它,然后,假设你的显示程序没错,来看下程序结构,你要显示个,十,百,就是动态显示,在main()的while中循环中那句:while(!TI);会导致程序停顿,影响数码管显示,好像一般不这样用,可以在接受中断中发送数据,试试。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top