标题: 单片机定时器程序 TL1=TH1初值等于重载值 语句理解 [打印本页]

作者: xnysfh    时间: 2023-6-12 10:14
标题: 单片机定时器程序 TL1=TH1初值等于重载值 语句理解
void ConfigUART(unsigned int baud)
{
SCON = 0x50; //配置串口为模式 1
TMOD &= 0x0F; //清零 T1 的控制位
TMOD |= 0x20; //配置 T1 为模式 2
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
ET1 = 0; //禁止 T1 中断
ES = 1; //使能串口中断
TR1 = 1; //启动 T1
}

TL1 = TH1; //初值等于重载值?有谁知道这个怎么理解吗


作者: coody_sz    时间: 2023-6-12 10:49
这是8位自动的初始化,TH1放的就是重装值,每次自动重装都是自动从TH1拷贝到TL1,所以初始化时拷贝一次,其实你写TL1=0也没关系,就是第一次溢出时间长一点而已。
作者: angmall    时间: 2023-6-12 11:26
因为你配置定时器 T1 为模式 2,这个是8位定时器。
        TL1                         //设置定时初始值
        TH1                         //设置定时重载值


作者: changhz    时间: 2023-6-12 12:05
TH1 = 256 - (11059200/12/32)/baud; //计算 T1 重载值
TL1 = TH1; //初值等于重载值
TL1和TH1值一样,同等于
TL1 = 256 - (11059200/12/32)/baud;
作者: csmyldl    时间: 2023-6-12 13:23
定时计数器方式2为8位自动重装模式,即当TL1计数满后产生溢出中断,然后把TH1中的值自动赋值给TL1,所以只需一次给TH1和TL1一个初始值就行,上述程序是先把TH1计算出来,在启动定时计数器计数前要先给TL1一个初始值(此时未实现自动重装),于是就有了TL1=TH1
作者: 想成为有用的人    时间: 2023-6-12 13:25
应该不是,TL表示数的低位,TH表示数的高位。所以说数是分两端存储的。
作者: 王秋冬    时间: 2023-6-12 21:05
看手册也是一头雾水,哪位师傅能详细的讲解一下定时/计数器,万分感谢。
作者: wys91203    时间: 2023-6-12 22:32
51定时器就是对机器周期定时,有方式1,2之分,如果定时器初值是0,每来个机器周期定时器加1,直到FF,方式是是16位的,TH0(1),TL0(1),如果想计一个数,就是设置定时器初值是65535,而定时器溢出后又从0计,所以要赋初值65535,而方式2不用,是8位的TL0计数,溢出后把TH0数装入TL0,不用程序里再设置初值

作者: 134670    时间: 2023-6-13 12:05
定时计数器方式2为8位自动重装模式,就是当TL1计数满后产生溢出中断,将TH1中的值自动赋值给TL1,所以只需一次给TH1和TL1一个初始值就行,上述程序是先把TH1计算出来,在启动定时计数器计数前要先给TL1一个初始值(此时未实现自动重装),于是就有了TL1=TH1




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1