大佬們好,如果定時器T0已經初始化后,開始運行,這時候我一直初始化會發(fā)生什么樣的情況。原本代碼是將Timert0_init(); 放在while外面上電初始化,但是我想試一試放在按鍵里面會是什么樣的效果。結果就是按鍵1需要一直按下,按鍵2只需點動,按鍵3,4在初始化后與按鍵2一樣的效果。有沒有大佬解釋一下其中的原理。感謝
下面是單片機測試代碼:
#include "regx52.h"
#include "timer0.h"
#include "keynum.h"
#include "intrins.h"
#include "Delay.h"
unsigned char wl,mode;//waterfall light 流水燈
void main()
{
P2=0xfe;
while(1)
{
wl=keynum();
if(wl>0)
{
if(wl==1)
{
mode=1;
Timert0_init(); //這里按鍵一直按下流水燈一直工作,松手停下。
}
if(wl==2)
{
mode=2;
Delay(1); //這里按鍵按下,松開流水燈繼續(xù)工作
Timert0_init();
}
if(wl==3)
{
mode=3;
}
if(wl==4)
{
mode=4;
}
}
}
}
void Timer0_Rountine(void) interrupt 1
{
static unsigned int t0count; //靜態(tài)函數static,保證退出中斷時t0count不清零。
TL0 = 0x66; //設置定時初始值
TH0 = 0xFC; //設置定時初始值 //定時器溢出后的值會變成0,需要重新賦初值;
t0count++;
if(t0count>=1000)
{
t0count=0;
if(mode==1)
{
P2=_crol_(P2,1);
}
if(mode==2)
{
P2=_cror_(P2,1);
}
if(mode==3)
{
P2=_crol_(P2,1);
}
if(mode==4)
{
P2=_cror_(P2,1);
}
}
}
|