单片机串行通信中设置定时/计数器的问题

(初学者提问)下面是串行通信的程序的一部分,主要是设置定时/计数器:
void init(void)
{
SCON = 0x50; // 设定串行口工作方式
PCON &= 0x00; // 波特率不倍增
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = (uchar)(256 - (XTAL / (32L * 12L * baudrate)));
TL1 = (uchar)(256 - (XTAL / (32L * 12L * baudrate))); // T1赋初值
TR1 = 1; // 启动定时器1
}
补充一下,其中
uchar是:#define uchar unsigned char
XTAL是:晶振频率
baudrate是:波特率
请问:TL1和TH1是设置的初值,但我不懂TH1 = (uchar)(256 - (XTAL / (32L * 12L * baudrate)));和TL1 = (uchar)(256 - (XTAL / (32L * 12L * baudrate)));这两句话的意思,为什么前面有个(uchar),还有32L和12L分别指什么,我在书上看了一下,设置初值的分式是:X=256-(t*Fosc)/12或是X=256-(t*Fosc)/6,本人初学,谢谢各位大虾帮助。

(uchar)是强制转换,就是把(256 -(XTAL / (32L * 12L * baudrate)))强制转换成uchar的格式,主要是为了类型匹配。32L和12L应该就是指32和12的意思,至于后面那个L是指明数据类型的,表示32和12都是long型,也就是长整型,目的也是为了和结果的类型匹配。
温馨提示:答案为网友推荐,仅供参考
相似回答