1.江蘇宏雲JMT系列芯片函數
注意註釋中有部分寫的不太對,spa
2.初始化定時器,產生1mS自加中斷線程
//56M時鐘 code
u16,16位自加最多能夠計時 1~65536/2 計時不會出錯blog
/* ;功能:在56M時鐘下產生1mS中斷 */ void timer1Init() { TMOD|=0x10;//16bit定時,不使能GATE門 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; } /* ;功能:timer1中斷,1mS計數timer_mS_count自加一次 */ void ISR_timer1DelyCnt() interrupt 3 { TR1=0; pinLed1_PA1=~pinLed1_PA1; timer_mS_count++;//1mS中斷 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; TR1=1; } /* ;功能:設置須要延時的時間,單位由timer_mS_count自加中斷間隔決定,mS ;入參:須要的mS計時數 ;返回值:用於做爲函數checkDelay()的入參檢測對應的時間是否到達 */ //下面兩個函數配合使用達到延時做用 u16 setDelay(u16 mySet_mS_Timer) { return(timer_mS_count + mySet_mS_Timer - 1); } /* ;功能:用來檢測是否到達所配置的時間點 ;入參:函數setDelay()設置的mS對應的返回值 ;返回值:0表示時間未到 ; 1表示時間到達 */ u8 checkDelay (u16 mySetTimer)//返回非零表示計時結束 { return(((mySetTimer - timer_mS_count) & 0x8000) >> 8);//當(t - timer_mS_count)爲正則&以後爲0,當變爲負數後由於是無符號整數,產生無窮大,那麼非零 } /* ;功能:組合函數時間精確計時,單線程模式計時 ;入參:計時時長,單位:mS */ void delay_ms(u16 mydealyTimer)//延時多少mS { u16 timerRelCount; timerRelCount = setDelay(mydealyTimer);//設置mS對應的計數值 while (!checkDelay(timerRelCount));//檢測計數值一直到時間到達爲止 }
u8,8位自加最多能夠計時1 ~ 256/2計時不會出錯it
u8 mySet_mS_Timer ;
/* ;功能:在56M時鐘下產生1mS中斷 */ void timer1Init() { TMOD|=0x10;//16bit定時,不使能GATE門 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; } /* ;功能:timer1中斷,1mS計數timer_mS_count自加一次 */ void ISR_timer1DelyCnt() interrupt 3 { TR1=0; pinLed1_PA1=~pinLed1_PA1; timer_mS_count++;//1mS中斷 ,u8 TL1=0x40;//56M下配置0x2540即1mS TH1=0x25; TR1=1; } /* ;功能:設置須要延時的時間,單位由timer_mS_count自加中斷間隔決定,mS ;入參:須要的mS計時數 ;返回值:用於做爲函數checkDelay()的入參檢測對應的時間是否到達 */ //下面兩個函數配合使用達到延時做用 u8 setDelay(u8 mySet_mS_Timer) { return(timer_mS_count + mySet_mS_Timer - 1); } /* ;功能:用來檢測是否到達所配置的時間點 ;入參:函數setDelay()設置的mS對應的返回值 ;返回值:0表示時間未到 ; 1表示時間到達 */ u8 checkDelay (u8 mySetTimer)//返回非零表示計時結束 { return((mySetTimer - timer_mS_count) & 0x80 );//當(t - timer_mS_count)爲正則&以後爲0,當變爲負數後由於是無符號整數,產生無窮大,那麼非零 } /* ;功能:組合函數時間精確計時,單線程模式計時 ;入參:計時時長,單位:mS */ void delay_ms(u8 mydealyTimer)//延時多少mS { u16 timerRelCount; timerRelCount = setDelay(mydealyTimer);//設置mS對應的計數值 while (!checkDelay(timerRelCount));//檢測計數值一直到時間到達爲止 }