两单片机间的串口通信

2019-07-14 00:41发布

单片机间的串口通信 注意: 将两单片机的RXD和TXD交叉连接,并GND共地...
程序功能: 发送单片机发送0至F 16字符在接收单片机数码管显示; ///发送单片机的程序 #include void delay() //X毫秒 { uint i,j; for(i=10;i>0;i--) for(j=110;j>0;j--); } void send(uchar key_num) { SBUF=key_num; while(!TI); TI=0; } void keyscan() { uchar temp,key; P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } send(key); } } P1=0xfd; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } send(key); } } P1=0xfb; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } send(key); } } P1=0xf7; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(); temp=P1; temp=temp&0xf0; if(temp!=0xf0) { temp=P1; switch(temp) { case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } send(key); } } } void main() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; EA=1; ES=1; while(1) { keyscan(); } }
接收单片机的程序  #include #define uint unsigned int #define uchar unsigned char uchar code tabled[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void display(uchar num) { P0=tabled[num]; //数码管段选 P0口; P2=0; //数码管位选; } void main() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; while(1); } void ser() interrupt 4 { uchar a; RI=0; a=SBUF; display(a); }