/*---用两个89S52作的异步串行双工通信之发送程序--*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code c[10]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
void serial_inti(); //声明
void delay();
main()
{
char i;
serial_inti(); //初始化
do
{
for(i=0;i<4;i++) //P0显示0-4
{
SBUF="c";
P0=c;
delay();
}
}while(1);
}
void serial_inti() //初始化
{
TMOD=0x20; //用定时器T1,工作方式2
TH1=0xfa; //频率为11.0592MHz波特率为4800bit/s
TL1=0xfa;
PCON=0x00; //SMOD=0
SCON=0xd8; //串口 方式3,11bit异步收发方式,允许接受
RI=0;
TI=0;
TR1=1; //t1运行
EA=1; //开总中断
ES=1; //开串行口中断
ET1=0;
}
void serial_inter() interrupt 4 using 2 //串行中断
{
if(RI) //是否接受完
{
RI="0"; //接受完清0
P2=SBUF; //P2显示反馈的数据
delay();
}
if(TI) //是否发送完
{
TI="0"; //发送完清0
}
}
void delay() //延时
{
uchar i,j,k;
for(i=0;i<20;i++)
{
for(j=0;j<200;j++)
{
for(k=0;k<250;k++)
{
;
}
}
}
}
/*---用两个8952作的异步串行通信之接受程序---*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void serial_inti(); //声明
void delay();
uchar code c[10]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
main()
{
serial_inti();
do
{
;
}while(1);
}
void serial_inti() //初始化
{
TMOD=0x20; //用定时器T1,工作方式2
TH1=0xfa;
TL1=0xfa; //频率为11.0592MHz波特率为4800bit/s
PCON=0x00; //SMOD=0
SCON=0xd8; //串口 方式3,11bit异步收发方式,允许接受
RI=0;
TI=0;
TR1=1; //t1运行
EA=1; //开总中断
ES=1; //开串行口中断
ET1=0;
}
char i;
void serial_inter() interrupt 4 using 2
{
if(RI) //判断是否接受完
{
i++;
if(i==8)
i="4";
RI="0"; //接受完后清0
ACC="SBUF";
P1=ACC;
SBUF="c"; //反馈一个数据
delay();
}
if(TI) //是否发送完
{
TI="0"; //发送完清0
}
}
void delay() //延时
{
uchar i,j,k;
for(i=0;i<20;i++)
{
for(j=0;j<200;j++)
{
for(k=0;k<250;k++)
{
;
}
}
}
}
文章评论(0条评论)
登录后参与讨论