怎么实现AT89C52单片机之间的串行通信

2024-12-18 00:50:23
推荐回答(1个)
回答1:

#include
#include

bit flag;

uchar buf[20];
uchar count_rx;
void main(void)
{

TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
ET0=1;
PCON=0x00;
SCON=0x50;
TR1=1;
ES=1;
EA=1;
while(1);//等待接收
}

/*///////////////////////////////////
串口接收程序
////////////////////////////////////*/
void uart_rx(void)
{
uchar i,j;
led=0;
while(!RI)
{
j++;
if(j>200)
{
j=0;break;}
}
RI=0;
buf[0]=SBUF;
if(buf[0]==0xaa)
{
for(i=0;i<7;i++)
{
while(!RI);
RI=0;
buf[i]=SBUF;

}
led=1;

}

}
////////////////////////////////////////////
以下是发送的单片机程序
#include
#include

bit flag;

uchar buf[20];
uchar count_rx;
uchar time[7];

//typedef unsigned char uchar;
//---------------------------------------------
void Delay(unsigned int t) // delay 40us
{
for(;t!=0;t--) ;
}
/**********************************

**********************************/
void dely(unsigned int use)
{
int i;
for(;use>0;use--)
{
i--;
}
}
void main(void)
{

uchar i,j;//,j,k;
uchar tt[2];
led=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
SCON=0x50;
TR1=1;
ES=1;
EA=1;

while(1)
{

if(keyy==0)
led=1;

dely(200);
dely(250);
led=1;
Delay(6000);
EA=0;
I2C_Gets(0xd0,0x00,7,time);

Delay(6000);

for(j=0;j<1;j++)
{
led=0;
SBUF=0xaa;//发送识别码
while(!TI);
TI=0;
for(i=0;i<7;i++)//发送数据,7个字节
{
TI=0;
SBUF=time[i];
dely(50);
while(!TI);
TI=0;
}
}
led=1;
}
}