大家帮忙解释一下这个程序 单片机语言

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,flag;
void main()
{
TMOD=0x20;//
TH1=0xf3; //
TL1=0xf3;
TR1=1;
SM0=0;
SM1=1;
REN=1;
PCON=0x80;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
希望大家帮忙解释详细点,这个很急。最好每一步都解释下

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,flag;
void main()
{
TMOD=0x20;// 定时器1工作方式为2
TH1=0xf3; //设置定时器初值
TL1=0xf3;
TR1=1; //开启定时器1
SM0=0; //串口工作方式1,8位异步串行通信
SM1=1;
REN=1; //允许串口接收
PCON=0x80; //波特率加倍
EA=1; //打开总中断
ES=1; //打开串行口中断
while(1)
{
if(flag==1) //P1口和a接收到数据后
{
ES=0; // 关串口中断
flag=0; // flag清零
SBUF=a; // 把a的数据再发回给SBUF
while(!TI); // 等待发送出去
TI=0; // 发送完了,发送中断标志位清零
ES=1; // 串行口中断打开
}
}
}
void ser() interrupt 4 //接收中断程序
{
RI=0; //接收中断标志位为0
P1=SBUF; //把接收缓冲区的数据送给P1口 和a
a=SBUF;
flag=1; // 发送完flag置位

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-20
呵呵 那你就去赛微电子技术论坛吧,那个里边回复挺快的。都是高手
第2个回答  2010-05-20
这不就是串口发送和接收程序嘛!
第3个回答  2020-04-08
这个
延时
占用
一个
定时器,

不准确
还不如
以下程序:
void
delay5ms(void)
{
unsigned
char
i,j;
for(i=10;i>0;i--)
{
for(j=250;j>0;j--)
}
}
根据
不同型号的
单片机
调整下
i
、j

初始值,如果

at89c51,12m晶振,
这个
值就是对的
i、j

值取决于
djnz
这个
指令

执行时间,
具体

相应
单片机
资料(指令集)里
会有
相似回答