一種擴展單片機硬件定時器的方法
【技術領域】
[0001]本發明涉及一種擴展單片機硬件定時器的方法。
【背景技術】
[0002]在單片機軟件設計中,經常要按時間順序的發展設計任務進程,而標準型號的51系列單片機只有4個硬件定時器,部分定時器還會被一些外設部件占用,如UART等,可用作時間控制的定時器是非常少的。如果在硬件定時器中斷中直接處理進程任務,則會使軟件結構顯得雜亂,為軟件維護帶來困難。
【發明內容】
[0003]本發明的目的在于克服現有技術的不足,提供一種擴展單片機硬件定時器的方法,本發明與基于消息隊列的單片機操作系統聯合使用,可為不同的任務進程提供任務所需要的定時器觸發消息,運行效率更高,使用更加靈活。
[0004]本發明的目的是通過以下技術方案來實現的:一種擴展單片機硬件定時器的方法,它包括以下步驟:
S1:定義定時信息結構類型,定時信息類型為包括時間值變量和消息值變量的結構類型,約定消息值變量為O時表示定時信息無效;
S2:定義定時信息數組,用于存放定時信息,在初始化定時信息數組時,將每個組元的消息值變量設為O ;
S3:定義基準時間變量,用于在硬件定時器中斷服務程序中加1,作為整個定時器擴展的基準時間;
54:設置硬件定時器的中斷周期,使硬件定時器按一定周期調用中斷服務程序;
55:使能定時器的函數,參數包括定時值和消息值,函數程序包括以下子步驟:
551:查找定時信息數組是否存在參數消息值的定時信息,如果存在則用新的定時信息覆蓋原有的定時信息,如果不存在則查找一個消息值為O的定時信息;
552:判斷函數參數的定時值是否為0,如果不為0,則將函數參數的定時值與基準時間變量相加,并將相加的結果存入步驟S51找到的定時信息的時間值變量中,將消息值存入步驟S51找到的定時信息的消息值變量中;如果為0,則將步驟S51找到的定時信息中的消息值清O ;
56:為硬件定時器編寫中斷服務程序;中斷服務程序包括以下子步驟:
561:基準時間變量加I ;
562:循環比對定時信息數組中消息值不為O的定時信息的時間值,如果時間值和基準時間相等,則發送該定時信息指定的消息,然后設置定時信息消息值為O來釋放該定時信息。
[0005]根據步驟S1、S2、S3所述,定義了擴展定時器所需要的數據結構,其包括數據類型為結構的定時信息,數據類型為定時信息的數組,基準時間變量。定時信息數組的組元數量根據整個軟件系統同時用到定時器的最大數量確定。
[0006]根據步驟S4所述,設置單片機的一個硬件定時器間隔一個周期產生一次中斷,一個周期為I毫秒。
[0007]根據步驟S5所述,為各任務進程使用定時器設計一個函數,參數包括定時值和消息值。如果參數中的定時值不為零,則表示參數中的定時值時間到時,向消息隊列中存入一個參數消息值定義的消息;如果參數中的定時值為零,則表示釋放定時信息中消息值為參數指定消息值的定時信息(將定時信息的消息值設為O)。該函數可多次調用來為不同任進程設置一個定時器。
[0008]根據步驟S6所述,在硬件定時器產生中斷時,硬件自動調用中斷服務程序,每次進入中斷服務程序時,基準時間變量增量,然后循環比對所有的定時信息,當定時信息的消息值不為零且時間值與基準時間值相等時,向消息隊列中存入定時信息中指定的消息值。
[0009]本發明的有益效果是:該方法只占用I個硬件定時器,編寫軟件代碼結構簡潔、運行高效,在基于消息隊列的單片機操作系統中進行時間相關的多任務設計時,使用靈活,能夠滿足各任務進程對時間控制的需要。
【附圖說明】
[0010]圖1為使能定時器函數程序流程圖;
圖2為硬件定時器中斷服務程序流程圖。
【具體實施方式】
[0011]下面結合附圖進一步詳細描述本發明的技術方案,但本發明的保護范圍不局限于以下所述。
[0012]一種擴展單片機硬件定時器的方法,它包括以下步驟:
S1:定義定時信息結構類型,定時信息類型為包括時間值變量和消息值變量的結構類型,約定消息值變量為O時表示定時信息無效;
S2:定義定時信息數組,用于存放定時信息。在初始化定時信息數組時,將每個組元的消息值變量設為O ;
S3:定義基準時間變量,用于在硬件定時器中斷服務程序中加1,作為整個定時器擴展的基準時間;
54:設置硬件定時器的中斷周期,使硬件定時器按一定周期調用中斷服務程序;
55:使能定時器的函數,參數包括定時值和消息值,程序流程如圖1所示,函數程序包括以下子步驟:
551:查找定時信息數組是否存在參數消息值的定時信息,如果存在則用新的定時信息覆蓋原有的定時信息,如果不存在則查找一個消息值為O的定時信息;
552:判斷函數參數的參數定時值是否為0,如果不為0,則將函數參數的定時值與基準時間變量相加,并將相加的結果存入步驟S51找到的定時信息的時間值變量中,將消息值存入步驟S51找到的定時信息的消息值變量中;如果為0,則將步驟S51找到的定時信息中的消息值清O ;
56:為硬件定時器編寫中斷服務程序,程序流程如圖2所示,中斷服務程序包括以下子步驟:
561:基準時間變量加I ;
562:循環比對定時信息數組中消息值不為O的定時信息的時間值,如果時間值和基準時間相等,則發送該定時信息指定的消息,然后設置定時信息消息值為O來釋放該定時信息。
[0013]根據步驟S1、S2、S3所述,定義了擴展定時器所需要的數據結構,其包括數據類型為結構的定時信息,數據類型為定時信息的數組,基準時間變量。定時信息數組的組元數量根據整個軟件系統同時用到定時器的最大數量確定。
[0014]根據步驟S4所述,設置單片機的一個硬件定時器間隔一個周期產生一次中斷,一個周期為I毫秒。
[0015]根據步驟S5所述,為各任務進程使用定時器設計一個函數,參數包括定時值和消息值。如果參數中的定時值不為零,則表示參數中的定時值時間到時,向消息隊列中存入一個參數消息值定義的消息;如果參數中的定時值為零,則表示釋放定時信息中消息值為參數指定消息值的定時信息(將定時信息的消息值設為O)。該函數可多次調用來為不同任進程設置一個定時器。
[0016]根據步驟S6所述,在硬件定時器產生中斷時,硬件自動調用中斷服務程序,每次進入中斷服務程序時,基準時間變量增量,然后循環比對所有的定時信息,當定時信息的消息值不為O且時間值與基準時間值相等時,則向消息隊列中存入定時信息中指定的消息值。
[0017]本發明中先分配一個存放定時信息的數組和一個作為基準時間的基準時間變量;再使用一個硬件定時器產生一定周期的中斷;最后在中斷服務程序中完成定時器的擴展。在每次調用中斷服務程序時,基準時間變量加1,然后與各定時值進行比對,如相等,則發送定時信息指定的消息。
【主權項】
1.一種擴展單片機硬件定時器的方法,其特征在于:它包括以下步驟: S1:定義定時信息結構類型,定時信息類型為包括時間值變量和消息值變量的結構類型,約定消息值變量為O時,表示定時信息無效; S2:定義定時信息數組,用于存放定時信息,在初始化定時信息數組時,將每個組元的消息值變量設為O ; S3:定義基準時間變量,用于在硬件定時器中斷服務程序中加1,作為整個定時器擴展的基準時間; 54:設置硬件定時器的中斷周期,使硬件定時器按一定周期調用中斷服務程序; 55:使能定時器的函數,參數包括定時值和消息值,函數程序包括以下子步驟: 551:查找定時信息數組是否存在參數消息值的定時信息,如果存在則用新的定時信息覆蓋原有的定時信息,如果不存在則查找一個消息值為O的定時信息; 552:判斷函數參數的定時值是否為O,如果不為O,則將函數參數的定時值與基準時間變量相加,并將相加的結果存入步驟S51找到的定時信息的時間值變量中,將消息值存入步驟S51找到的定時信息的消息值變量中;如果為O,則將步驟S51找到的定時信息中的消息值清O ; 56:為硬件定時器編寫中斷服務程序;中斷服務程序包括以下子步驟: 561:基準時間變量加I ; 562:循環比對定時信息數組中消息值不為O的定時信息的時間值,如果時間值和基準時間相等,則發送該定時信息指定的消息,然后設置定時信息消息值為O來釋放該定時信息。
2.根據權利要求1所述的一種擴展單片機硬件定時器的方法,其特征在于:所述步驟S1、S2、S3,定義了擴展定時器所需要的數據結構,包括數據類型為結構的定時信息、數據類型為定時信息的數組和基準時間變量,定時信息數組的組元數量根據整個軟件系統同時用到定時器的最大數量確定。
3.根據權利要求1所述的一種擴展單片機硬件定時器的方法,其特征在于:所述步驟S4,設置單片機的一個硬件定時器間隔一個周期產生一次中斷,所述的一個周期為I毫秒。
4.根據權利要求1所述的一種擴展單片機硬件定時器的方法,其特征在于:所述步驟S5,為各任務進程使用定時器設計一個函數,參數包括定時值和消息值,如果參數中的定時值不為O,則表示參數中的定時值時間到時,向消息隊列中存入一個參數消息值定義的消息;如果參數中的定時值為O,則表示釋放定時信息中消息值為參數指定消息值的定時信息,并將定時信息的消息值設為O。
5.根據權利要求1所述的一種擴展單片機硬件定時器的方法,其特征在于:所述步驟S6,在硬件定時器產生中斷時,硬件自動調用中斷服務程序,每次進入中斷服務程序時,基準時間變量增量,循環比對所有的定時信息,當定時信息的消息值不為O且時間值與基準時間值相等時,則向消息隊列中存入定時信息中指定的消息值。
【專利摘要】本發明公開了一種擴展單片機硬件定時器的方法,與基于消息隊列的單片機操作系統聯合使用,可為不同的任務進程提供任務所需要的定時器觸發消息。本發明中先分配一個存放定時信息的數組和一個作為基準時間的基準時間變量;再使用一個硬件定時器產生一定周期的中斷;最后在中斷服務程序中完成定時器的擴展。在每次調用中斷服務程序時,基準時間變量加1,然后與各定時值進行比對,如相等,則發送定時信息指定的消息。本發明的有益效果是:該方法只占用1個硬件定時器,編寫軟件代碼結構簡潔、運行高效,在基于消息隊列的單片機操作系統中進行時間相關的多任務設計時,使用靈活,能夠滿足各任務進程對時間控制的需要。
【IPC分類】G05B19-042
【公開號】CN104597820
【申請號】CN201510071478
【發明人】李俊畫, 馬劍, 朱永, 莫平勇
【申請人】四川天邑康和通信股份有限公司
【公開日】2015年5月6日
【申請日】2015年2月11日