網上發現一個很好的軟件定時器程序。有移植示例,略加修改,在普中開發板上實現。但是相差很大,不準,請試驗后發表意見。
單片機源程序如下:
- #include <reg51.h>
- #include "multi_timer.h"
- /*定義3個定時器*/
- Timer timer1 ;
- Timer timer2 ;
- Timer timer3;
- /*用于定時10s的計數器*/
- int Counter = 0 ;
- /*根據板子原理圖,燈位于P0^0,P0^1*/
- sbit LED = P0^0 ;
- sbit LED2 = P0^1;
- /*晶振頻率為12M*/
- #define FOSC 12000000L
- /*指令速度為12T*/
- #define command_speed 12
- /*用multi_timer創建的定時器1定時時間 單位:ms*/
- #define TIMER_TIMEOUT_500MS 500
- /*用multi_timer創建的定時器2定時時間 單位:ms*/
- #define TIMER_TIMEOUT_1S 1000
- #define TIMER_TIMEOUT_10S 10000
- void timer0_init(void);
- void timer1_callback(void);
- void timer2_callback(void);
- void timer3_callback(void);
- void main(void)
- {
- LED = 0;
- timer0_init(); //系統定時器0初始化
- /*判斷是否到達定時時間(timeout參數),如果到達了定時時間,沒有指定循環定時觸發時間(repeat參數)的時候,
- 這時就會把當前定時器句柄給移除,如果指定了循環定時觸發時間(repeat參數),則定時時間會被重新賦值,
- 直到下一個定時到來,接下來會一直循環觸發。*/
- timer_init(&timer1, timer1_callback, TIMER_TIMEOUT_500MS, TIMER_TIMEOUT_500MS);
- timer_init(&timer2, timer2_callback, TIMER_TIMEOUT_1S, TIMER_TIMEOUT_1S);
- timer_init(&timer3, timer3_callback, TIMER_TIMEOUT_10S,TIMER_TIMEOUT_10S);
- timer_start(&timer1);
- timer_start(&timer2);
- timer_start(&timer3);
- while(1)
- {
- timer_loop();
- }
- }
- /*multi_timer回調函數1調用*/
- void timer1_callback(void)
- {
- /*LED燈電平翻轉*/
- LED = !LED ;
- }
- /*multi_timer回調函數2調用*/
- void timer2_callback(void)
- {
- /*當計數器到達10次以后刪除所有創建的軟件定時器
- 計數器清0,將LED電平置為1,常亮
- */
- ++Counter ;
- if(10 == Counter )
- {
- Counter = 0 ;
- LED = 1 ;
- timer_stop(&timer1);
- timer_stop(&timer2);
- }
- }
- /*multi_timer回調函數3調用*/
- void timer3_callback(void)
- {
- /*LED燈電平翻轉*/
- LED2 = !LED2 ;
- }
- /*硬件定時器初始化*/
- void timer0_init(void)
- {
- TMOD = 0x00;
- TH0 = (65536-FOSC/command_speed/1000) >> 8;
- TL0 = (65536-FOSC/command_speed/1000);
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- /*利用系統定時器產生1ms的定時中斷*/
- void timer0() interrupt 1
- {
- TH0 = (65536-FOSC/command_speed/1000) >> 8;
- TL0 = (65536-FOSC/command_speed/1000);
- /*multi_timer計數器自增*/
- timer_ticks(); //系統滴答
- }
復制代碼
Keil代碼下載:
Ok-普中多定時器multi_timer.rar
(3.52 MB, 下載次數: 15)
2021-12-16 20:56 上傳
點擊文件名下載附件
|