不管什么样的MCU,都可以做到软件计时无误差,(误差只与晶振有关)
例:16MHz, 分频64,1=>4us, 8位定时器T1 、0xFF 溢出中断,则 250=>1ms,T1中断程序为
T1CNT+=6; // 250=256-6
Tms++;
if(Tms>=1000)
{ Tms-=1000;
T1s++;
}
此只要中断延时<1ms,即不会产生累积误差。
另:
TH1 = (65535 - 1738)/256; //5MS中断程序初始化
TL1 = (65535 - 1738)%256;
为何不写成:
TH1 = (65535 - 1738)>>8; //5MS中断程序初始化
TL1 = (65535 - 1738)&0xFF;
??难道你用的是i7或是编译器能优化? |