微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机定时器

51单片机定时器

时间:10-02 整理:3721RD 点击:
//定时器0中断服务程序
void T0_INT() interrupt 1
{
        TH0 = -50000/256;                           //时间是50ms,设定初始值3D
        TL0 = -50000%256;                           //设定初始值B0
        ++Time_Count;
}
TH0 和 TL0为什么那么算?

我来告诉你:定时器是当总数达到FFFFH后产生中断吧!那你要让它计数10000,是不是用FFFF(16进制)减去10000(十进制)的数当计数初值啊?TH0=-(10000/256); TL0=-(10000%256)跟FFFF(16进制)减去10000(十进制)的数是一样的。从TH0=-(10000/256); TL0=-(10000%256)开始计数,计数到10000刚好满。跟用FFFF(16进制)减去10000(十进制)的数一样!写起来更简单,不用算! 看看原码、补码就知道。正数的补码是对应的二进制数,符号位为零,负数的补码是它的绝对值对应的二进制数按位取反再加一,符号位为一。无符号数不考虑符号,那么这个结果就跟用FFFF减去它的绝对值一样。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top