找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3941|回复: 4
打印 上一主题 下一主题
收起左侧

单片机定时器重载值不理解,希望大神们帮帮忙

[复制链接]
跳转到指定楼层
楼主
ID:521921 发表于 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
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:330198 发表于 2019-5-22 10:48 | 只看该作者
T0RH取了tmp的高八位不是低八位,按你说的直接赋值不就好了?
回复

使用道具 举报

板凳
ID:544644 发表于 2019-5-22 13:54 | 只看该作者
T0RH = (unsigned char)(tmp>>8);   右移动了8位,等于取高8位了
回复

使用道具 举报

地板
ID:213173 发表于 2019-5-22 14:13 | 只看该作者
假设 tmp的值=0x3CB0
T0RH = (unsigned char)(tmp>>8);原来的低8位0xB0移除消失,取低8位T0RH就=0x3C
T0RL = (unsigned char)tmp;取低8位T0RL就=0xB0。
回复

使用道具 举报

5#
ID:521921 发表于 2019-5-31 16:06 | 只看该作者
谢谢各位,明白了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表