本程序对应视频教程中的单片机与单片机通信:
接收程序:
#include //包含单片机寄存器的头文件
/*****************************************************
函数功能:接收一个字节数据
***************************************************/
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接收中断标志位RI没有被置“1”
; //等待,直至接收完毕(RI=1)
RI=0; //为了接收下一帧数据,需将RI清0
dat=SBUF; //将接收缓冲器中的数据存于dat
return dat;
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
TMOD=0x20; //定时器T1工作于方式2
SCON=0x50; //SCON=0101 0000B,串口工作方式1,允许接收(REN=1)
PCON=0x00; //PCON=0000 0000B,波特率9600
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
REN=1; //允许接收
while(1)
{
P1=Receive(); //将接收到的数据送P1口显示
}
}
发送程序:
#include //包含单片机寄存器的头文件
unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
//流水灯控制码,该数组被定义为全局变量
/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void Send(unsigned char dat)
{
SBUF=dat;
while(TI==0)//TI=1
;
TI=0;
}
/**************************************************************
函数功能:延时约150ms
**************************************************************/
void delay(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
unsigned char i;
TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式2
SCON=0x40; //SCON=0100 0000B,串口工作方式1
PCON=0x00; //PCON=0000 0000B,波特率9600 TMOD
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
while(1)
{
for(i=0;i<8;i++) //模拟检测数据
{
Send(Tab[i]); //发送数据i
delay(); //50ms发送一次检测数据
}
}
}