|
這個(gè)是我用Proteus仿真完成完單片機(jī)與單片機(jī)進(jìn)行通信。
就是用單片機(jī)U1通過(guò)串行口TXD(P3. 1引腳) 細(xì)將控制碼發(fā)至單片機(jī)U2的RXD(P3.1腳)端.
U2單片機(jī)接收后把控制碼送8位LED顯示,如圖:
因?yàn)橛玫搅藛纹瑱C(jī)U1和單片機(jī)U2,因此需要對(duì)單片機(jī)U1和單片機(jī)U2分別設(shè)計(jì)兩個(gè)程序:單片機(jī)U1負(fù)責(zé)完成數(shù)據(jù)發(fā)送任務(wù):單片機(jī)U2負(fù)責(zé)完成數(shù)據(jù)接收任務(wù)對(duì)單片機(jī)U1編程時(shí),由于使用方式1,所以需要設(shè)置串行控制寄存器SCON,使SM0=0,SM1=1,選波特率為9600b/s, SMOD=0,計(jì)算出THI=FAH;
對(duì)單片機(jī)U2編程時(shí),需要設(shè)置SM0=0,SM1=1和REN= 1(允許接收)。
程序如下:
(I)單片機(jī)U1數(shù)據(jù)發(fā)送程序。- # 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();
- }
- }
- }
復(fù)制代碼 單片機(jī)U2數(shù)據(jù)發(fā)送程序- # 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();
- }
- }
復(fù)制代碼 資料分享:
雙單通信.rar
(61.66 KB, 下載次數(shù): 107)
2019-2-28 13:43 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|