您的位置:首页 > 其它

单片机间进行串口通信

2014-04-18 00:19 387 查看
说明:

   1、所用仿真软件:Proteus 8 Professional

   2、实现功能:上位机进行了按键操作后,上位机数码管显示按键数值,下位机通过串口获取按键数值并显示

   3、上位机3.1端口(TXD)可直接与下位机3.0(RXD)端口相连,两个单片机需要共地

   4、仿真文件下载



上位机(图中左侧MCU):

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x7f};
void Delayms(uint);
void KeyScan();
void SendData(uint num);
void Init();
uchar num=4;
void main(){
Init();
while(1){
keyScan();
P1=table[num];
}
}
void Init(){	//初始化定时器与串口
TMOD=0x20;	   //设置定时器1 工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;		   //启动定时器1 (8位自动重装初始值)
SM0=0;
SM1=1;		  //使用串口的 方式1 工作
REN=1;	   //  允许串口接收数据
EA=1;	   //开全局中断
ES=1;  //开串口中断
}
void SendData(uchar num){
SBUF=num;
while(!TI);   //串口发送停止位的开始时,内部硬件使TI置1,CPU发出中断申请
TI=0;
}
void Delayms(uint xms){
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);

}
void KeyScan(){
if(key1==0)
{
Delayms(10);
if(key1==0)
num=0;
SendData(num);
}
if(key2==0)
{
Delayms(10);
if(key2==0)
num=1;
SendData(num);
}
if(key3==0)
{
Delayms(10);
if(key3==0)
num=2;
SendData(num);
}
if(key4==0)
{
Delayms(10);
if(key4==0)
num=3;
SendData(num);
}
}
下位机(图中右侧MCU):

#include<reg52.h>
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x7f};
void Init();
uchar num=4;
void main(){
Init();
while(1){
P1=table[num];
}
}
void Init(){	//初始化定时器与串口
TMOD=0x20;	   //设置定时器1 工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;		   //启动定时器1 (8位自动重装初始值)
SM0=0;
SM1=1;		  //使用串口的 方式1 工作
REN=1;	   //  允许串口接收数据
EA=1;	   //开全局中断
ES=1;  //开串口中断
}
void receive() interrupt 4
{
RI=0;
num=SBUF;
}
仿真结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单片机 串口通信