这个是我用Proteus仿真完成完单片机与单片机进行通信。
就是用单片机U1通过串行口TXD(P3. 1引脚) 细将控制码发至单片机U2的RXD(P3.1脚)端.
U2单片机接收后把控制码送8位LED显示,如图:
因为用到了单片机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(允许接收)。
程序如下:
(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)
|