51单片机主从之间的简单串口通信.doc
文本预览下载声明
/******************51单片机主从通信********************************
FileName:tongxin.c
Author:沧海麒麟
Date:2011.05.
Version :1.0
Description:适用于
*/
/*主机发送函数*/
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
uchar i=0;
uchar const Dat[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x0f}; //待发送数据
/********************************* 延时函数 **********************************/
void delay(){
uint j;
for(j=0;j31000;j++);
}
/********************************* 主函数 **********************************/
void main(){
TMOD=0x20; //将T1设为工作方式2
TH1=0xFD;
TL1=0xFD;
PCON=0x00;
TR1=1; //启动T1
SCON=0xd0; //串行口设为工作方式3, 允许接收
EA=1;
ES=1; //开中断
ACC=Dat[i];
CY=P;
TB8=CY;
P0=ACC;
SBUF=ACC; //发送数据
delay();
while(1);
}
/**************************** 发送中断服务函数 *****************************/
void trs() interrupt 4 using 1 {
uchar Dat1;
if(TI==0)
{ //接收中断
RI=0;
Dat1=SBUF; //清除中断标志,接收数据
if(Dat1==0)
{ //收到回送正确标志
i++;
ACC=Dat[i];
CY=P;
TB8=CY;
P0=ACC;
SBUF=ACC; //启动发送下一个数据
delay();
if(i==9)
{
EA=0;
ES=0;//数据发送完毕
while(1)
{
P0=0xaa;
delay();
P0=0x55;
delay();
P0=0x00;
delay();
}
}
}
else
{
ACC=Dat[i]; //收到回送错误标志
CY=P;
TB8=CY;
P0=ACC;
SBUF=ACC; //重发上一个数据
delay();
}
}
else TI=0;
}
/*从机接收函数*/
#includereg52.h
#include intrins.h
#define uchar unsigned char
#define uint unsigned int
uchar i=0;
uchar Dat[16] _at_ 0x40;
/********************************* 主函数 **********************************/
void main(){
TMOD=0x20; //将T1设为工作方式2
TH1=0xFD;
TL1=0xFD;
PCON=0x00;
TR1=1; //启动T1
SCON=0xd0; //串行口设为工作方式3, 允许接收
ES=1;EA=1; //开中断
while(1);
}
/*************
显示全部