下面这个程序我有几点看不懂,
#include<reg51.h>
#define unchar unsigned char
unchar xdata r_buf[32];
unchar xdata t_buf[];
unchar r_in,r_out,t_in,t_out;
bit r_full,t_empty,t_done;
unchar code m[]={"this is a program\r\n"};
serial() interrupt 4 using 1/*中断服务程序用于向接收缓冲区写数据,或者向外发送数据*/
{
if(RI&&~r_full)
{
r_buf[r_in]=SBUF;
RI=0;
r_in=++r_in&0x1f;
if(r_in==r_out)/*为什么二者相等时接收缓冲区满?*/
r_full=1;
}
else if(TI&&~t_empty)
{
SBUF=t_buf[t_out];
TI=0;
t_out=++t_out&0x1f;
if(t_out==t_in)/*为什么二者相等时接收缓冲区为空?*/
t_empty=1;
}
else if(TI)
{
TI=0;
t_done=1;
}
}
void loadmsg(unchar code *msg)
{
while((*msg!=0)&&((((t_in+1)^t_out)&0x1f)!=0))/*不知道什么意思*/
{
t_buf[t_in]=*msg;
msg++;
t_in=++t_in&0x1f;
if(t_done)
{
TI=0;
t_done=1;
}
}
}
void process(unchar ch)
{
/*对接收缓冲区的处理*/
return;
}
void processmsg(void)
{
while(((r_out+1)^r_in)!=0)
{
process(r_buf[r_out]);
r_out=++r_out&0x1f;
}
}
main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TCON=0x40;
SCON=0x50;
IE=0x90;
t_empty=t_done=1;
r_full=0;
r_out=t_out=t_in=0;
r_in=1;/*为什么不是r_in=0*/
for(;;)
{
loadmsg(&m);/*觉得应该是loadmsg(m)*/
processmsg();
}
}
哪位大侠能给我详细的讲解下吗,不胜感激。 |