单片机双机通讯,就是直接单片机的串口RX和TX直接连接,然后通过串口命令完成通讯
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg51.h>
- #define uchar unsigned char
- sbit key0=P1^0;
- sbit key1=P1^1;
- sbit key2=P1^2;
- uchar i;
- uchar code tb[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- void delay(int z) //延时子函数
- {
- int i,j;
- for(i=0;i<z;i++)
- for(j=0;j<500;j++);
- }
- void init() //串口初始化
- {
- SCON=0x50;
- TMOD=0x20;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- }
- void main()
- {
- i = 0;
- init();
- P1=0xff;
- P2=0xff;
- while(1)
- {
- if(key0==0)
- {
- i++;
- //if(i>=10)
- // i=0;
- SBUF=~tb[i%10]; //送缓冲区
- P0=~tb[i%10]; //数据送P0口
- while(TI==0); //判断是否发送完成
- TI=0;
- delay(200);
- }
- if(key1==0)
- {
- i--;
- // if(i<=0)
- // i=9;
- SBUF=~tb[i%10]; //送缓冲区
- P0=~tb[i%10]; //数据送P0口
- while(TI==0); //判断是否发送完成
- TI=0;
- delay(200);
- }
- /* for(i=7;i<10;i++) //连续发送数组数据
- {
- SBUF=~tb[i]; //送缓冲区
- P0=~tb[i]; //数据送P0口
- while(TI==0); //判断是否发送完成
- TI=0;
- delay(50);
- }
- */
- }
- }
复制代码
所有资料51hei提供下载:
双机串行.zip
(56.79 KB, 下载次数: 49)
|