标题:
单片机定时器重载值不理解,希望大神们帮帮忙
[打印本页]
作者:
WGL88
时间:
2019-5-21 12:18
标题:
单片机定时器重载值不理解,希望大神们帮帮忙
以下是秒表程序中的部分内容:我的理解:其中,tmp与ms相乘,变成了int型数据,2个字节16位;tmp>>8之后,T0RH其实取了tmp的低八位,TORL也是取了tmp的第八位,这不是有问题吗,两个取得值是一样的,无法达到定时器的重载值。
希望大神们帮忙指点下我的理解错在哪里,谢谢!
单片机源程序如下:
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //临时变量
tmp = 11059200 / 12; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
tmp = tmp + 18; //补偿中断响应延时造成的误差
T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零 T0 的控制位
TMOD |= 0x01; //配置 T0 为模式 1
TH0 = T0RH; //加载 T0 重载值
TL0 = T0RL;
ET0 = 1; //使能 T0 中断
TR0 = 1; //启动 T0
}
作者:
zhanghyg
时间:
2019-5-22 10:48
T0RH取了tmp的高八位不是低八位,按你说的直接赋值不就好了?
作者:
2027420952
时间:
2019-5-22 13:54
T0RH = (unsigned char)(tmp>>8); 右移动了8位,等于取高8位了
作者:
wulin
时间:
2019-5-22 14:13
假设 tmp的值=0x3CB0
T0RH = (unsigned char)(tmp>>8);原来的低8位0xB0移除消失,取低8位T0RH就=0x3C
T0RL = (unsigned char)tmp;取低8位T0RL就=0xB0。
作者:
WGL88
时间:
2019-5-31 16:06
谢谢各位,明白了!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1