看不懂装初值的公式TH0=-(n)/256 TL0=-(n)%256

arm7tdmi 2010-12-12 06:34:33
最近看老板写的定时器装初值的代码:
假设要计的个数是n,
TH0=-(n)/256
TL0=-(n)%256

按理说应该是
TH0=(65535-n)/256
TL0=(65535-n)%256
这样的形式呀,

为什么老板总写成TH0=-(n)/256 TL0=-(n)%256 的形式呢?用的是STC单片机,板子功能运行正常,其它的设置都能看懂,唯独这两句看不懂,请高人解释一下。
...全文
841 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SailorXing 2011-08-16
  • 打赏
  • 举报
回复
LZ的老板还亲自写代码啊,呵呵~
sunguoxin1 2011-08-16
  • 打赏
  • 举报
回复
计算初值应该是这样吧:(65536-n)/晶振频率*时钟周期个数(一般为12或6)=你想要的时间。
wang0635 2011-08-15
  • 打赏
  • 举报
回复
C51编译器处理整数时用16位
AnYidan 2011-08-13
  • 打赏
  • 举报
回复
lz 是不熟悉 timer 的原理吧
stonews 2011-08-12
  • 打赏
  • 举报
回复
好啊!学习了
lbing7 2010-12-17
  • 打赏
  • 举报
回复
数在计算机中的表示

dreamjack 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zyzhang365 的回复:]
1)TH0=-(n)/256
TL0=-(n)%256
2)TH0=(65535-n)/256
TL0=(65535-n)%256

1)和2)还是不一样的。
如果2)写成
TH0=(65536-n)/256
TL0=(65536-n)%256
才是一样的,

2)其实一个是8位的补码形式,1)是一种比较直接的10进制表示方法。
[/Quote]

正解
zyzhang365 2010-12-12
  • 打赏
  • 举报
回复
(65536-n)就是-n的十进制补码,

TH0=(65536-n)/256
TL0=(65536-n)%256
表示成高/低字节。
arm7tdmi 2010-12-12
  • 打赏
  • 举报
回复
1)TH0=-(n)/256
TL0=-(n)%256

2)TH0=(65536-n)/256
TL0=(65536-n)%256

8位补码?能否具体解释一下?
arm7tdmi 2010-12-12
  • 打赏
  • 举报
回复
应该是
TH0=(65536-n)/256
TL0=(65536-n)%256

我写错了,楼上的真仔细呀
zyzhang365 2010-12-12
  • 打赏
  • 举报
回复
1)TH0=-(n)/256
TL0=-(n)%256
2)TH0=(65535-n)/256
TL0=(65535-n)%256

1)和2)还是不一样的。
如果2)写成
TH0=(65536-n)/256
TL0=(65536-n)%256
才是一样的,

2)其实一个是8位的补码形式,1)是一种比较直接的10进制表示方法。

derest12 2010-12-12
  • 打赏
  • 举报
回复
我也是第一次看见这样的写法,长眼界了呢

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧