這個是我用Proteus仿真完成完單片機與單片機進行通信。
就是用單片機U1通過串行口TXD(P3. 1引腳) 細將控制碼發至單片機U2的RXD(P3.1腳)端.
U2單片機接收后把控制碼送8位LED顯示,如圖:
4.png (69.65 KB, 下載次數: 89)
下載附件
2019-2-28 13:33 上傳
因為用到了單片機U1和單片機U2,因此需要對單片機U1和單片機U2分別設計兩個程序:單片機U1負責完成數據發送任務:單片機U2負責完成數據接收任務對單片機U1編程時,由于使用方式1,所以需要設置串行控制寄存器SCON,使SM0=0,SM1=1,選波特率為9600b/s, SMOD=0,計算出THI=FAH;
對單片機U2編程時,需要設置SM0=0,SM1=1和REN= 1(允許接收)。
5.png (31.5 KB, 下載次數: 71)
下載附件
2019-2-28 13:33 上傳
程序如下:
(I)單片機U1數據發送程序。- # include "reg52.h"
- unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0x7f,0xaa,0x0f,0xf0,0x55};
- //????????
- void Send (unsigned char dat)
- {
- SBUF=dat;
- while(TI==0);
- TI=0;
- }
- void delay150ms(void) //??? 0us
- {
- unsigned char a,b,c;
- for(c=229;c>0;c--)
- for(b=4;b>0;b--)
- for(a=80;a>0;a--);
- }
- void main(void)
- {
- unsigned char i;
- TMOD=0x20;
- SCON=0x40;
- PCON=0x00;
- TH1=0xfa;
- TL1=0xfa;
- TR1=1;
- while(1)
- {
- for(i=0;i<12;i++)
- {
- Send(Tab[i]);
- delay150ms();
- }
- }
- }
復制代碼 單片機U2數據發送程序- # include "reg52.h"
- //??????????
- unsigned char Receive(void)
- {
- unsigned char dat;
- while(RI==0);
- RI=0;
- dat=SBUF;
- return dat;
- }
- void main(void)
- {
- TMOD=0x20;
- SCON=0x50;
- PCON=0x00;
- TH1=0xfa;
- TL1=0xfa;
- TR1=1;
- REN=1;
- while(1)
- {
- P2=Receive();
- }
- }
復制代碼 資料分享:
雙單通信.rar
(61.66 KB, 下載次數: 107)
2019-2-28 13:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|