C51编程:请高手帮忙!
请教几个很菜的问题:
1.我把T1作为串口比特率发生器,T0采用方式3进行定时,怎样进行初始化?怎样相应T0的2个
定时器?请高手给段C51的源码.
2.请高手帮我看看下面的程序,若是把T0设为方式1,可以串口输出数据;若改为其他工作方式
则不行,为什么啊?
#include <reg52.h>
#define uchar unsigned char
uchar idata r_buf[11],t_buf[32];
uchar data r_in,r_out,t_in,t_out,x,y,z;
bit r_full,t_empty,t_done;
uchar code m[]={"A012345678"};
serial() interrupt 4 using 1
{
if(TI)
{
TI=0;
if ( r_out < 10 )
{ SBUF=m[r_out];
r_out++;
}
else
r_out = 0;
}
if(RI)
{
RI=0;
if(r_in<8)
{ r_buf[r_in]=SBUF;
if (r_buf[r_in]=='9')
z++;
r_in++;
}
else
r_in=0;
}
}
void loadmsg( ) //接收
{
// RI=1;
}
void processmsg(void) //发送
{
for(x=0;x<200;x++) //34
for(y=0;y<x;y++);;
TI=1;
}
void time0() interrupt 1 //T0
{
x++;
TL0=0x00;;
}
void time02() interrupt 3 //T1
{
y++;
}
main()
{
TMOD=0x21; //定时器1,方式2,8位自装入定时
TH1=0xa0; //600波特率11.0592MHz
SCON=0x50; //允许接收
PCON=0x80;
TL0=0x00; TH0=0x00;
TR0=1; TR1=1;
ES=1;
ET1=0;
ET0=1;
EA=1;
t_empty=t_done=0;
r_full=0;
r_out=t_in=t_out=y=x=z=0;
r_in=1; //接受和发送缓冲置空
TI=1;
RI=1;
SBUF = 0;
for(;;)
{
processmsg(); //发送
loadmsg(); //接收
}
}
发表时间:2002年12月23日14:35:00