标题:
52单片机双机通信Proteus仿真程序
[打印本页]
作者:
杜鸣磊
时间:
2020-5-18 08:17
标题:
52单片机双机通信Proteus仿真程序
在PROTEUS上采用双单片机A和B,采取TXD连接另一个单片机的RXD,建立一对一通信A外接4个按键,编号1~3;B外接一个数码管,平时显示0。 A按键后,B显示相应键号0.3秒;
进阶要求1:A的TXD与B的RXD间加入按键开关K,通过K的ON/OFF来控制通信连接的有效和无效;
运行中,K由ON改为OFF,通信无效时,B不响应A的按键表示通信未建立;
进阶2:通信无效时,B显示9,表示通信无效;运行中K由OFF改为ON,系统自动回复正常
1,首先考虑资源分配
波特率设置要用定时器1自动重装载模式。
定时器1用于产生10ms中断
定时器2用来产生20ms中断
故可选用89c52单片机
2:主函数完成3个定时器初始化函数,之后在while(1)休眠或啥也不干。
3:定时器2中断服务函数:
自动重装载模式不需要重置本定时器
按键扫描函数获取键号,若无按键键号为0
重置并启动超时定时器(tim0)
根据S_OK状态点亮LED(S_OK=0时点亮)
4:接收中断模块
S_OK置1
关闭超时定时器
5:10ms定时中断模块
S_OK=0
关闭超时定时器
接收B板模块
同样需要3个定时器
1:main函数中三个定时器初始化
2:接收中断
直接显示键号,开启0.3s定时器
重置启动超时定时器
发送信息给A板
3:0.3s定时中断
关闭本定时器
显示0
4:超时中断函数
S_OK=0
数码管显示9
关闭本定时器
关闭0.3s定时器
发送A板主函数文件程序示例。完整程序和proteus图见附件。
51hei.png
(6.4 KB, 下载次数: 52)
下载附件
2020-5-18 14:16 上传
单片机源程序如下:
#include <reg52.h>
#include"init.h"
//sfr T2MOD=0XC9;
void send(uchar num); //声明子函数的时候要加分号
void delay(int z) //晶振11.592.延时z毫秒
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void key()
{
if(key3==0)
flash=4;
else if(key2==0)
flash=3;
else if(key1==0)
flash=2;
else if(key0==0)
flash=1;
else
flash=0;
}
void send(uchar num)
{
SBUF=num; //把发送的内容写进sbuf,自动发送 ,发送数据时TI为0,!0为1
while(!TI); //!逻辑非,发送完数据,发送完数据时TI为1.!1为0,停止发送
// led=1;
TI=0; //TI需要软件清零
}
void tim0() interrupt 1//超时中断
{
static unsigned char count;
//定义变量,记录中断次数
// TH0=0xd8;
// TL0=0xf0; //定时器重置,一帧数据一来一回两个多毫秒,定时10ms够了
S_OK=0; //进入超时中断,说明通信已经中断
led=1;
led2=1;
TR0=0; //通信已经中断,关闭超时定时器
// count++;
// if(count==50)
// {
// led2=~led2;
// count=0;
// }
}
void receive() interrupt 4
//串行接收和发送中断
{
if(RI==1)
{
S_OK=1; //进入接收中断说明通信正常
RI = 0; //RI要手动清0
led=0;
led2=0;
TR0=0; //关闭超时定时器
}
if(TI==1)
{
TI=0;
// TH0=0xd8;
// TL0=0xf0;
TH0=0xec;
TL0=0x78;
TR0=1;
}
}
void timer_T2() interrupt 5 //中断函数
{
static unsigned char count1; //定义变量,记录中断次数
TF2=0; //软件清零定时器2溢出标志位
count1++;
//重置并启动超时定时器
//根据S_OK点亮led3
if(count1==3)
{
key(); //扫描按键
SBUF=flash; //发送一次键号key(); //扫描按键
count1=0; //清零
}
}
void main()
{
//待运行一次的初始化函数
tim2init();
tim1init() ;
tim0init();
TR0=0;
led=0;
led2=0;
led3=0;
while(1)
{
// send(flash);
// if(S_OK==0)
// led3=1;
// else
// led3=0;
//key();
}
}
复制代码
全部资料51hei下载地址:
程序源码和原理图.rar
(105.97 KB, 下载次数: 33)
2020-5-18 08:16 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1