不是完全不能用串口的定时器同时做定时器中断,只是如果波特率很高,并且单片机速度又比较慢的话,就不合适了。
用数据讲话,
假定用 AT89C51 定时器1 做波特率发生器 晶振频率 11.0592MHz, 波特率9600, 此时TH1, TL1 就要设置成 0xFD, 换句话说,如果把这个设定同时开定时器中断的话,每3个时钟 就是中断一次。对51单片机来讲,这就等于,死在中断里出不来了(进中断2个时钟,出中断2个时钟)。
假定,用 STC15系列(所谓的1T单片机),晶振频率 22.1184MHz,波特率57600,此时,TH1,TL1, 设置为: 0xFFA0 这种情况下如果开中断,那么相当于 96个时钟 进入中断一次。那么如果只是在中断里面做点小的工作,比如:
if(--count ==0)
{
time_flag = 1;
count = 200;
}
那么完全是可以的。
当然,可以是一回事,好不好是另外一回事,如果资源丰富还是建议用其他的定时器。同样如果资源紧张,对串口没有特别的要求,也可以使用串口的模式2,不用定时器的串口模式。 |