单片机串口通信
时间:10-02
整理:3721RD
点击:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar bai,shi,ge,flag,a;
- void init()
- {
- TMOD=0x20;
- TH1=0Xfd;
- TL1=0xfd;
- TR1=1;
- SM0=0;
- SM1=1;
- REN=1;
- EA=1;
- ES=1;
- }
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(uchar a)
- {
- bai=a/100;
- shi=a%100/10;
- ge=a%10;
-
- dula=1;
- P0=table[bai];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfe;
- wela=0;
- delayms(5);
-
- P0=table[shi];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfd;
- wela=0;
- delayms(5);
-
- P0=table[ge];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfb;
- wela=0;
- delayms(5);
-
- }
-
- void main()
- {
- init();
- while(1)
- {
-
- if(flag==1)
- {
-
- ES=0;
- SBUF=a;
- while(!TI);
- TI=0;
- ES=1;
- flag=0;
- }
- display(a);
- }
- }
- void ser() interrupt 4
- {
- RI=0;
- a=SBUF;
- flag=1;
- }
-
线路板是正在使用过程还是购买的新品
线路板是使用过的。
这个先确定一下板子是否良好再说
板子确实是好的 已经确认过了
这个要从两方面调试,一调试数码管 看驱动是否正确 二调试串口接收 看收到的数对不对
你的串口到底是用中断呢?还是查询呢
当上位机向单片机发送数据的时候触发串口中断
你把main函数中的SBUF=a,改成SBUF=“1”; 调试了试一下,看行不?
首先,我看到你中断有a变量,这应该是个全局变量,但是我并没有看到你在哪定义了它,然后,假设你的显示程序没错,来看下程序结构,你要显示个,十,百,就是动态显示,在main()的while中循环中那句:while(!TI);会导致程序停顿,影响数码管显示,好像一般不这样用,可以在接受中断中发送数据,试试。