|
各位大咖,遇到一个很奇怪的问题.请各位指点一下.
我需要使用5616AD产生一个精确的1us的计时,简单做了一个测试,步骤大概如下:
1.定时器1产生一个1000us的计时,代码如下:
void Timer1Init(){
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0x18; //设置定时初值
TH1 = 0xFC; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
}
2.在主程序中使用TF1作为计时计数,用个变量累加,累加到1000时切换发光二极管的发光状态,代码如下:
uint iCount=0;
void main(){
Timer1Init();
P14=0; //led
while(1){
if(TF1){
TF1=0;
iCount++;
if(iCount==1000){
iCount=0;
P14=!P14;
}
}
}
}
我的思路是每1000us进行一次累加,那1000次就是1秒,那就是发光管每1秒切换一次.但实际闪光的频率远远低于1秒一次(感觉是7-8秒一次),
请教一下各位问题出在哪里.
谢谢!
|
|