智能儀表的應用程序設計
日期: 2018-12-181.智能儀表的典型軟件結構
智能儀表是一種較完整的單片機應用系統(tǒng)。一般硬件電路除基本擴展部分外,都配置有采集電路、顯示器、按鍵、打印機等。相應的軟件有采集、采集控制、數(shù)據處理、顯示、結果打印等。圖一是智能儀表的一種典型軟件結構。按其功能,可分為三部分,即準備程序、鍵功能程序和系統(tǒng)控制序。
1.1 準備程序
準備程序應完成系統(tǒng)鍵操作之前的準備工作。它包括:
1.1.1 初始化。
將系統(tǒng)中所有的命令、狀態(tài)以及有關的存儲單元置位成初始狀態(tài)。
1.1.2 系統(tǒng)測試。
利用測試程序檢查程序存儲器、數(shù)據存儲器以及硬件功能是否正常。
1.1.3 提示符顯示。
當完成初始化設置和系統(tǒng)測試正常以后,應在顯示器上顯示正常標記,等待健掃描。若測試不正常,可再次初始化,進行系統(tǒng)測試或用手動按鈕使系統(tǒng)強行復位。
1.1.4 鍵掃描等待。
對所有按鍵進行查詢,沒有鍵按下時,繼續(xù)顯示提示符。當有鍵按下時,便進入鍵功能軟件控制。當系統(tǒng)上電后,在正常情況下,顯示正常狀態(tài)提示符號,并準備接收按鍵的操作控制。
1.2 鍵功能程序
這是一組散轉指令控制選擇的一組鍵功能程序模塊,每個模塊完成按鍵所指定的功能。根據散轉指令(JMP @A+DPTR),設置轉移入口地址表,實現(xiàn)鍵功能程序的長轉移(LJMP add16)時,可設置的鍵功能程序模塊數(shù)量為256/3=85 個。鍵功能程序應包括能由按鍵選擇控制的所有功能程序。鍵功能程序大致分為測、控功能程序,外設功能程序和操作控制功能程序。
1.1 準備程序
準備程序應完成系統(tǒng)鍵操作之前的準備工作。它包括:
1.1.1 初始化。
將系統(tǒng)中所有的命令、狀態(tài)以及有關的存儲單元置位成初始狀態(tài)。
1.1.2 系統(tǒng)測試。
利用測試程序檢查程序存儲器、數(shù)據存儲器以及硬件功能是否正常。
1.1.3 提示符顯示。
當完成初始化設置和系統(tǒng)測試正常以后,應在顯示器上顯示正常標記,等待健掃描。若測試不正常,可再次初始化,進行系統(tǒng)測試或用手動按鈕使系統(tǒng)強行復位。
1.1.4 鍵掃描等待。
對所有按鍵進行查詢,沒有鍵按下時,繼續(xù)顯示提示符。當有鍵按下時,便進入鍵功能軟件控制。當系統(tǒng)上電后,在正常情況下,顯示正常狀態(tài)提示符號,并準備接收按鍵的操作控制。
1.2 鍵功能程序
這是一組散轉指令控制選擇的一組鍵功能程序模塊,每個模塊完成按鍵所指定的功能。根據散轉指令(JMP @A+DPTR),設置轉移入口地址表,實現(xiàn)鍵功能程序的長轉移(LJMP add16)時,可設置的鍵功能程序模塊數(shù)量為256/3=85 個。鍵功能程序應包括能由按鍵選擇控制的所有功能程序。鍵功能程序大致分為測、控功能程序,外設功能程序和操作控制功能程序。

1.2.1 測、控功能程序。
系統(tǒng)直接完成其主要測量、處理、控制功能的程序,如智能頻率計的頻率、周期、計數(shù)測量、標度換算、存儲記憶等。
1.2.2 外設功能程序。
外部設備的控制程序,如顯示、打印等。
1.2.3 操作控制程序。
對系統(tǒng)要求實現(xiàn)多種模式操作時所附加的控制程序。典型的有按鍵復用功能設置、系統(tǒng)狀態(tài)測試、命令/數(shù)據的置入以及功能程序中的多種工作方式選擇等。
系統(tǒng)直接完成其主要測量、處理、控制功能的程序,如智能頻率計的頻率、周期、計數(shù)測量、標度換算、存儲記憶等。
1.2.2 外設功能程序。
外部設備的控制程序,如顯示、打印等。
1.2.3 操作控制程序。
對系統(tǒng)要求實現(xiàn)多種模式操作時所附加的控制程序。典型的有按鍵復用功能設置、系統(tǒng)狀態(tài)測試、命令/數(shù)據的置入以及功能程序中的多種工作方式選擇等。
2.鍵功能程序結構
要保證鍵功能程序的模塊化,又要實現(xiàn)鍵功能程序操作方式的多樣化,鍵功能程序中應設有能實現(xiàn)不同操作方式的分支程序。為了能方便靈活地選擇不同的操作方式應設置有命令字以及分支運行的狀態(tài)字,這樣,系統(tǒng)控制程序便可根據命令要求,控制功能程序的轉移。
鍵功能程序結構如圖2 所示。
鍵功能程序結構如圖2 所示。

◆狀態(tài)標志置位。將本次鍵功能程序運行方式、特點、分支選擇的特征置入RAM 中的狀態(tài)標志單元中,以便系統(tǒng)控制程序查詢。
◆命令查詢。根據片內RAM 中狀態(tài)命令單元的命令選擇不同的功能分支程序。
◆功能分支程序。在一個按鍵的主要功能中還有不同方式要求時設置的分支程序。例如,頻率測量功能程序中,不同的分支程序可以完成單次測量、連續(xù)測量、測量顯示、測量打印、測量存儲等子功能或初始化設置等。
鍵功能程序結構、命令/狀態(tài)格式以及分支功能程序出口狀態(tài)應和片內RAM 中的命令/狀態(tài)區(qū)以及系統(tǒng)控制程序相呼應。
◆命令查詢。根據片內RAM 中狀態(tài)命令單元的命令選擇不同的功能分支程序。
◆功能分支程序。在一個按鍵的主要功能中還有不同方式要求時設置的分支程序。例如,頻率測量功能程序中,不同的分支程序可以完成單次測量、連續(xù)測量、測量顯示、測量打印、測量存儲等子功能或初始化設置等。
鍵功能程序結構、命令/狀態(tài)格式以及分支功能程序出口狀態(tài)應和片內RAM 中的命令/狀態(tài)區(qū)以及系統(tǒng)控制程序相呼應。

3.系統(tǒng)控制程序與命令/狀態(tài)設置
系統(tǒng)控制程序與命令/狀態(tài)設置主要解決應用程序中的循環(huán)轉移以及功能程序中的分支選擇。其轉移或選擇的條件是命令和狀態(tài)字。狀態(tài)字是依靠程序寫入。例如復位后狀態(tài)字為全零,表明系統(tǒng)的全部功能程序處于準備狀態(tài)。當按下某個按鍵,或一組按鍵,系統(tǒng)執(zhí)行某一路徑的程序,如“單次頻率測量并打印結果”,隨著程序的執(zhí)行要在命令/狀態(tài)區(qū)設置相應的狀態(tài)字。
命令字一般由外部輸入或由命令鍵輸入,在鍵功能程序中,根據命令狀態(tài)選擇功能分支程序。系統(tǒng)控制程序是在執(zhí)行完以后,控制系統(tǒng)程序的流向。它根據命令/狀態(tài)條件實現(xiàn)條件轉移控制。一般有循環(huán)轉移、置A 轉移、等待轉移以及復位轉移等。
循環(huán)轉移通常是實現(xiàn)鍵功能的循環(huán)操作,如連續(xù)采集、循環(huán)顯示等。保證功能鍵的入口地址不變,但可選擇分支程序。置A 轉移是不通過按鍵操作的鍵功能程序轉移。當按一次鍵要完成幾個鍵功能操作內容時使用。例如,頻率測量和測量結果打印分屬兩個按鍵功能程序,要實現(xiàn)頻率測量時可按頻率測理按鍵,并選擇置A 轉移,將頻率測理的出口狀態(tài)置為打印功能程序的散轉A 值。等待轉移是使系統(tǒng)返回鍵等待狀態(tài),等待下一次鍵操作。復位轉移是使系統(tǒng)返回到上電復位狀態(tài)。一般硬件復位按鈕其功能也是復位轉移。
命令字一般由外部輸入或由命令鍵輸入,在鍵功能程序中,根據命令狀態(tài)選擇功能分支程序。系統(tǒng)控制程序是在執(zhí)行完以后,控制系統(tǒng)程序的流向。它根據命令/狀態(tài)條件實現(xiàn)條件轉移控制。一般有循環(huán)轉移、置A 轉移、等待轉移以及復位轉移等。
循環(huán)轉移通常是實現(xiàn)鍵功能的循環(huán)操作,如連續(xù)采集、循環(huán)顯示等。保證功能鍵的入口地址不變,但可選擇分支程序。置A 轉移是不通過按鍵操作的鍵功能程序轉移。當按一次鍵要完成幾個鍵功能操作內容時使用。例如,頻率測量和測量結果打印分屬兩個按鍵功能程序,要實現(xiàn)頻率測量時可按頻率測理按鍵,并選擇置A 轉移,將頻率測理的出口狀態(tài)置為打印功能程序的散轉A 值。等待轉移是使系統(tǒng)返回鍵等待狀態(tài),等待下一次鍵操作。復位轉移是使系統(tǒng)返回到上電復位狀態(tài)。一般硬件復位按鈕其功能也是復位轉移。
4.內存規(guī)劃
與軟件結構設計相配合,必須將程序存儲器(ROM)和數(shù)據存儲器(RAM)實現(xiàn)規(guī)劃。按照上述的軟件結構,ROM、RAM 規(guī)劃內容如圖三所示。圖中除了個別特定區(qū)域外,對于一個具體的智能儀表,每個部分規(guī)定的區(qū)域范圍不同,既要考慮系統(tǒng)的程序構成,還要考慮到二次開發(fā)的擴展余地。

4.1 ROM 規(guī)劃原則
? 4.1.1 按照MCS-51 單片機的復位及中斷入口地址的規(guī)定,002FH單元地址以前的空間都作為中斷、復位入口地址區(qū),在這些地址單元中設置轉移指令,轉移到相應的中斷服務程序或復位啟動程序。
? 4.1.2 程序存儲器中功能程序及子程序數(shù)量較多時, 盡可能設置入口地址表。
? 4.1.3 要留有擴展余地。二次開發(fā)擴展區(qū)盡可能放在高位地址區(qū)。
? 4.1.4 一般的常數(shù)、表格集中設置表格區(qū)。
? 4.1.2 程序存儲器中功能程序及子程序數(shù)量較多時, 盡可能設置入口地址表。
? 4.1.3 要留有擴展余地。二次開發(fā)擴展區(qū)盡可能放在高位地址區(qū)。
? 4.1.4 一般的常數(shù)、表格集中設置表格區(qū)。
4.2 RAM 規(guī)劃原則
? 4.2.1 數(shù)據存儲器RAM 按照應用程序所使用的數(shù)據類型規(guī)劃。通常將頻繁使用, 而且內存占用數(shù)量較固定的數(shù)據盡可能放在高位地址。
? 4.2.2 片內RAM 容量較小,盡可能重疊使用。例如,數(shù)據暫存區(qū)與顯示、打印緩沖區(qū)重疊。
? 4.2.3 當系統(tǒng)中擴展有外部數(shù)據存儲器時, 外部數(shù)據存儲器一般用作存放大塊數(shù)據。如測量結果數(shù)據。
? 4.2.2 片內RAM 容量較小,盡可能重疊使用。例如,數(shù)據暫存區(qū)與顯示、打印緩沖區(qū)重疊。
? 4.2.3 當系統(tǒng)中擴展有外部數(shù)據存儲器時, 外部數(shù)據存儲器一般用作存放大塊數(shù)據。如測量結果數(shù)據。
5.系統(tǒng)可靠性的軟件設計
為了保證系統(tǒng)可靠運行,應用程序設計應考慮配置有測試程序以及陷阱復位措施。測試程序是用來檢查應用系統(tǒng)軟、硬件是否處于正常狀態(tài)。通常有功能測試、初始化狀態(tài)測試以及ROM、RAM 初始狀態(tài)測試。具體測試程序視具體情況而定。例如,對于通用頻率計可在系統(tǒng)內設置標準信號源,啟動功能測試后,對內部標準信號實現(xiàn)系統(tǒng)的全部功能,如測量、處理、顯示、打印,以及最后顯示是否正常的標記。
在軟件運行時為了防止非正常和程序“逃逸”而出現(xiàn)的死循環(huán),可以采取軟件陷阱復位措施。即在程序存儲器中所有空白區(qū)填入特定的數(shù)字。當程序“逃逸”后進入程序空白區(qū),在這些特定數(shù)字的引導下進入上電復位入口,使系統(tǒng)進入復位狀態(tài)。例如,在MCS-51 應用系統(tǒng)的程序存儲器的空白區(qū)中連續(xù)放置以下的機器碼:20000000020000002000000002000000…并保證不小于兩個循環(huán)長度時,只要程序進入此區(qū)域便會自動轉入系統(tǒng)復位狀態(tài)。
在軟件運行時為了防止非正常和程序“逃逸”而出現(xiàn)的死循環(huán),可以采取軟件陷阱復位措施。即在程序存儲器中所有空白區(qū)填入特定的數(shù)字。當程序“逃逸”后進入程序空白區(qū),在這些特定數(shù)字的引導下進入上電復位入口,使系統(tǒng)進入復位狀態(tài)。例如,在MCS-51 應用系統(tǒng)的程序存儲器的空白區(qū)中連續(xù)放置以下的機器碼:20000000020000002000000002000000…并保證不小于兩個循環(huán)長度時,只要程序進入此區(qū)域便會自動轉入系統(tǒng)復位狀態(tài)。