兩單片機間的串口通信
注意:
本文引用地址:http://www.ex-cimer.com/article/201611/318199.htm將兩單片機的RXD和TXD交叉連接,并GND共地...
程序功能:
發(fā)送單片機發(fā)送0至F 16字符在接收單片機數(shù)碼管顯示;
///發(fā)送單片機的程序#includevoid 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 charuchar 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]; //數(shù)碼管段選 P0口;P2=0; //數(shù)碼管位選;}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);}
評論