|
兩片單片機的串行通信仿真原理圖
0.png (44.17 KB, 下載次數: 93)
下載附件
2016-5-15 19:46 上傳
0.png (76.82 KB, 下載次數: 70)
下載附件
2016-5-15 19:46 上傳
單片機雙機通信的所有資料下載:
兩片單片機的串行通信.rar
(48.98 KB, 下載次數: 58)
2016-5-13 21:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
程序1:
- #include <reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit K0=P1^0;
- sbit K1=P1^1;
- sbit K2=P1^2;
- sbit K3=P1^3;
- sbit K4=P1^4;
- sbit K5=P1^5;
- sbit K6=P1^6;
- sbit K7=P1^7;
- uchar i();
- uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,
- 0x77,0x7c,0x39,0x5e,0x79,0x71};
- void delay(uint z)
- { uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y<0;y--);
- }
- void send(uchar c) //向串口發送字符
- { SBUF=c;
- while(TI==0);
- TI=0;
- }
- void main()
- {
- uchar i;
- P2=0x00;
- SCON=0x50; //串口模式1
- TMOD=0x20; //T1工作模式2
- PCON=0x00; //波特率不倍增
- TH1=0xfd; //波特率設定6900
- TL1=0xfd;
- TI=RI=0;
- TR1=1; //啟動定時器T1
- IE=0x90; //允許串口中斷
- while(1)
- {
- if(K0==0) send('0'); else send('A');
- if(K1==0) send('1'); else send('B');
- if(K2==0) send('2'); else send('C');
- if(K3==0) send('3'); else send('D');
- if(K4==0) send('4'); else send('E');
- if(K5==0) send('5'); else send('F');
- if(K6==0) send('6'); else send('G');
- if(K7==0) send('7'); else send('H');
- }
- }
- void serial_int() interrupt 4 //甲機串口接收中斷函數
- { if(RI)
- { RI=0;
- if(SBUF>=0 &&SBUF<=15)
- P2=tab[SBUF];
- else
- P2=0x00;
- if(SBUF=='x')
- if(i>=0&&i<9)
- {
- i=i+1;
- P2=tab[i];
- }
- if(i==9) i=0;
- if(SBUF=='y')
- {
- P2=0x00;
- i=0;
- }
- }
- }
復制代碼
程序2:
- #include <reg51.h> #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit L0=P1^0;
- sbit L1=P1^1;
- sbit L2=P1^2;
- sbit L3=P1^3;
- sbit L4=P1^4;
- sbit L5=P1^5;
- sbit L6=P1^6;
- sbit L7=P1^7;
- sbit KEY2=P0^2;
- void delay(uint z)
- { uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y<0;y--);
- }
- void send(uchar c) //向串口發送字符
- { SBUF=c;
- while(TI==0);
- TI=0;
- }
- uchar key() //按鍵掃描
- { uchar keyon,temp;
- P2=0x0f; delay(1);
- temp=P2^0x0f;
- switch(temp)
- { case 1:keyon=3;break;
- case 2:keyon=2;break;
- case 4:keyon=1;break;
- case 8:keyon=0;break;
- default:keyon=16;
- }
- P2=0xf0;
- delay(1);
- temp=P2>>4^0x0f;
- switch(temp)
- { case 1:keyon+=0;break;
- case 2:keyon+=4;break;
- case 4:keyon+=8;break;
- case 8:keyon+=12;break;
- }
- return keyon;
- }
- void main()
- { SCON=0x50; //串口模式 1,允許接收
- TMOD=0x20; //T1 工作模式2
- PCON=0x00; //波特率不倍增
- TH1=0xfd; //波特率設定: 9600
- TL1=0xfd;
- TI=RI=0;
- TR1=1; //啟動定時器T1
- IE=0x90; //允許串口中斷
- delay(100);
- while(1)
- { P2=0xf0; //矩陣鍵盤
- if(P2!=0xf0)
- send(key());
- if(KEY2==0) //清零
- send('y');
- }
- }
- void serial_int() interrupt 4 //乙機串口接收中斷函數
- { if(RI)
- { RI=0;
- switch(SBUF)
- { case '0':L0=0;break;
- case '1':L1=0;break;
- case '2':L2=0;break;
- case '3':L3=0;break;
- case '4':L4=0;break;
- case '5':L5=0;break;
- case '6':L6=0;break;
- case '7':L7=0;break;
- case 'A':L0=1;break;
- case 'B':L1=1;break;
- case 'C':L2=1;break;
- case 'D':L3=1;break;
- case 'E':L4=1;break;
- case 'F':L5=1;break;
- case 'G':L6=1;break;
- case 'H':L7=1;break;
- }
- }
- }
-
復制代碼
|
評分
-
查看全部評分
|