51单片机定时器
时间:10-02
整理:3721RD
点击:
//定时器0中断服务程序
void T0_INT() interrupt 1
{
TH0 = -50000/256; //时间是50ms,设定初始值3D
TL0 = -50000%256; //设定初始值B0
++Time_Count;
}
TH0 和 TL0为什么那么算?
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减去它的绝对值一样。