两个单片机串口通信,用仿真来实现比较容易做,两个单片机的引脚TXD和RXD交叉连接即可。为了显示通信效果,P2口接两个数码管可显示接收的数据,P1口接两个四位数字开关,用于输入数据,然后从串口发送到另一单片机,两个单片机互发数据,电路相同,程序也相同。仿真图如下。
#include <REG52.H>#define uchar unsigned char
#define uint unsigned int
sbit ring=P3^7
sbit CASE1=P2^0
sbit CASE2=P2^1
sbit CASE3=P2^2
sbit CASE4=P2^3
uchar se=0,re=0
uchar temp=0
void wait(uint cnt)
{
while(--cnt)
}
//串口发送程序
void send(uchar se)
{
SBUF=se //发送数据
while(TI == 0)
TI = 0
}
//串口接收程序
uchar receive(void)
{
re=SBUF //接收数据
while(RI==0)
RI=0
return re
}
//串口初始化
void sinti(void)
{
SCON = 0x50
TMOD |= 0x20
TH1 = 0xFD
TR1 = 1
EA= 1
ES= 1
}
void delay(int cnt)
{
while(--cnt)
}
//主程序
int main (void)
{
int i
sinti() //串口初始化程序
ring=1
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a')
ring=0
break
}
if(CASE2==0)
{
send('b')
ring=0
break
}
if(CASE3==0)
{
send('c')
ring=0
break
}
if(CASE4==0)
{
send('d')
ring=0
break
}
}
if(ring==0)
{
wait(60000)
ring=1
}
for(i=0i<10000i++)
}
}
//串口中断程序
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI)//判断是接收中断产生
{
RI=0 //标志位清零
temp=SBUF
}
if(TI)//如果是发送标志位,清零
TI=0
}
1、首先我们在indows下打开虚拟串口的软件,这里选择的相连的串口,是串口4和串口2。
2、设置完成后,然后再windows开始点击右键选择打开设备管理器。
3、在设备管理器的端口选项中看到已经设置好的的串口2和串口4,并且两个已经设置好的串口已经相连说明两个串口之间可以进行通信了。
4、在windows中找到proteus仿真软件并打开,在工具栏中双击单片机打开51单片机的属性选项。
5、在调试程序这里选择刚才已经写好的串口调试的程序,调试程序为hex后缀结尾的二进制文件,注意设置晶振,这里是11.0592MHz。
6、双击串口控件,设置好串口号和窗口的波特率,Physical poit 为com4,Physical Baud rale为9600,Physical Dala Bits为8,Physical Panity为NONE,Vitual Baud rale9600, Vitual Dala Bits为8,Advanced Properties为NONE其它选项不懂最好不要修改。
7、配置完成后,点击proteus左下角的仿真按钮、就是左下角的播放符号,此时虚拟中断也已经成功的启动了、虚拟终端可能默认打开为文本模式,右键以hex 16进制显示。
8、打开SSCOM串口软件,在窗口中显示设置好波特率打开串口2,以16进制发送数据可以看到,虚拟终端和串口软件都已经收到了发送和返回的信息了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)