天天看點

small51 學習定時器的更換

1 初始化的替換

  進行程式的替換時不應直接删掉原先的代碼,應先注釋掉這裡我們用 #ifdefine 來替換具體如下

<pre name="code" class="objc">void time_tick_config(void)
{	//初始化系統時鐘
	#ifdef USER_TIMER0
		TMOD = (TMOD & 0Xf0) | 0X01;	
		TH0 = 	TIMER_CONSTANT / 256;	 //10ms;
		TL0 = 	TIMER_CONSTANT % 256;
		TR0 = 1;
		ET0 = 1;
	#else
		TMOD = (TMOD & 0X0f) | 0X10;	
		TH1 = 	TIMER_CONSTANT / 256;	 //10ms;
		TL1 = 	TIMER_CONSTANT % 256;
		TR1 = 1;//打開定時器1
		ET1 = 1;//定時器1中斷使能
	#endif
<p>}</p>
           

這裡#ifdef 和#endif 一定要配對使用否則會出現錯誤,如果要使用timer0做系統時鐘 隻需要 在程式前加 #define SER_TIMER0 就可以啦

timer0應用程式中斷的替換

  這裡我們要找到哪裡使用了timer0;在os_cpu.cc中找到了替換如下

void UserTickTimer(void)
{
	//
#ifdef USER_TIMER0
	TH0 = 	TIMER_CONSTANT / 256;	 //10ms
	TL0 = 	TIMER_CONSTANT % 256;	
	TF0 =	0;
#else
	TH1 = 	TIMER_CONSTANT / 256;	 //10ms
	TL1 = 	TIMER_CONSTANT % 256;	
	TF1 =	0;
#endif				
}
           
#pragma disable                                        /*非最進階優先級中斷要加上這一句               */


        void OSTickISR(void) interrupt OS_TIME_ISR
           
更改OS_TIME_ISR中斷入口位址
           
#ifdef USER_TIMER0
#define OS_TIME_ISR     1                                       /* 系統定時器使用的中 */
#else
#define OS_TIME_ISR     3                                      
#endif
           

這樣就修改完了

如不修改使用定時器0中斷時會出現錯誤*** WARNING L5: CODE SPACE MEMORY OVERLAP from 000BH