通過一個監控系統的研制,闡述了對一個不熟悉的微機系統進行改造時應遵循的原則及基本方法,介紹了雙端口存貯器IDT7132和看門狗WDT的用法。
??? 關鍵詞:監控系統,單片機,雙端口存貯器,WDT
制作微機監控系統時,若受監控對象本身也是一個微機系統,且又沒有電路圖、程序等資料時,如何采集對象的內部數據(如CPU狀態等),如何修改對象的程序方不至令原系統運行不穩定和崩潰,如何充分利用監控對象的資源,是一個帶有普遍性的問題。
筆者研制的“數字實驗監控系統”,其主要功能是采集30臺學生實驗機狀態和過程信息,送往中心主機顯示。監控對象是一臺型號為DLES的數字電路實驗機,這是某公司的產品,除簡單的用法說明書外別無其它資料。該機的核心是單片機8031,帶6位鍵盤和數碼管顯示、并行口8155等,可選擇CPU工作方式產生各種實驗信號。
1用雙端口RAM采集數據
監控系統的首要任務是獲取受控對象的各種狀態信息。用IO線取得的只是其外部信息,且當高頻時容易遺漏。要取得重要的內部信息,必須設法使監控對象的CPU自動送出信息,即采用雙CPU通訊。無論用并行通訊還是串行通訊,都要大幅修改原機程序,且要占用原機CPU很多等待、檢測通訊口的時間,很容易破壞原機的固有時序。較好的方法是采用共享存貯器方式,只要在原機程序的適當位置插入一段程序,令其定時將自身的重要信息(例如片內RAM的256字節內容)送到共享存貯器就可以了。
??? 本系統采用雙端口存貯器IDT7132來實現兩CPU的通訊。雙口存貯器有2套獨立的IO電路,可供2個CPU在不同時刻讀寫各個存貯單元。但同時訪問同一存貯單元會產生沖突。IDT7132有一套沖突仲裁電路,使先到一方獲得優先權實現讀寫操作,而向另一方發出一個沖突信號BUSY。
沖突發生時,訪問存貯器失敗的一方要將剛失敗的一句指令再執行一次,本系統是將BUSY線接到單片機的中斷線INT0,電路見圖1。但單片機的程序指針PC不能直接被讀寫,而中斷的發生又是隨機的,無法掌握其出現的時刻,要重復執行中斷前的一句指令殊不容易。為實現這功能,用了一點技巧:因為,中斷服務程序執行前,PC值必自動壓入堆棧,可在中斷服務程序中將該PC值出棧,作減3處理后再入棧,則中斷結束出棧的PC值已退回指向到中斷前的一句指令了。
原實驗機已經使用了5條高位地址線,若要增加2KB容量的IDT7132,將超過8031單片機最大64K存貯空間的限制。為此,利用單片機一條懸空的中斷口引腳INT1充當IDT7132的片選控制線,CPU要訪問IDT7132就不能僅用常規的MOVX指令,而必須在讀寫存貯器的前后各增加一條使INT1變低電平然后變高電平的指令,該指令如下:
??? CLRINT1MOVXA,@DPTR SETBINT1
2原系統已用資源的查找
要改造別人的系統,難點之一是要了解原系統對各種資源的使用情況。單片機的內部讀寫存貯器RAM只有128字節,而要增改原機程序必須使用這些片內RAM,從而可能造成資源沖突。為了解原系統對片內RAM的使用情況,借用了文字編輯軟件的搜索功能。因為單片機對片內RAM的尋址方式只有2種:(1)直接尋址,此時,可將RAM的直接地址作為搜索關鍵字,調用編輯軟件的搜索功能,在原實驗機程序中逐個顯示該地址出現的地方;(2)以R0和R1為指針的間接尋址,這時,可分別以@R0和@R1為關鍵字搜索原程序,在出現的地方分析R0和R1的變化情況及范圍。
若以上兩方法勻未找到所關注的RAM單元,則可以肯定原系統未使用該資源。若該單元同時又是可位尋址的,而位地址只有直接尋址一種方式,故必須采用上述的第(1)種方式搜索一次,結論也是非常明確的。
3修改和插入程序的方法
如果監控對象的信號是軟件方式產生的(本實驗機就是這樣),修改、增加程序時在時間開銷上要非常小心,否則會導致原機時序出錯。以下是兩種常用的可行方法:
(1)在原程序的延時過程中,刪除其延時指令,插入執行時間大致同其原延時時間相當的新程序。例如,原實驗機為數碼管顯示而設的延時子程序就被用于將適當個字節的信息傳遞到雙端口存貯器。
? (2)在原程序中等待某些事件發生的過程中,插入新程序。例如等待鍵盤按鍵時,可以控制程序跳往新的功能模塊,執行適當時間后再返回。
4監視定時器WDT的處理
在大部分微機控制系統中,WDT(看門狗,在6800系列中是COP)都是首選的抗干擾措施之一,其作用是以軟件和硬件方式設置一個定時器,定時強制系統復位,以防止程序失控“跑飛”。
修改舊程序時必須留意查看原系統有無WDT,否則可能導致系統崩潰。若有,則首先要找到WDT的定時時間。硬件WDT的時間值一般是固定的,可查資料得到。例如8096系列是64K個狀態周
期。軟件WDT要先找到所用的定時器,可循2個途徑:(1)芯片自身的定時器。這可以在定時器中斷服務程序中查找,例如8051系列的二個定時器的中斷服務程序入口地址分別是000BH和0001BH,查看這2段程序可知哪一個是用于WDT的,然后進一步在主程序的初始化設置中查看對該定時器的設置,便可找到定時時間;(2)外圍芯片(例如8155)的定時器,要將之用于WDT必須將定時器溢出線接到單片機的某外部中斷線上,查看這些外部中斷服務程序就可以找到相應的定時器,再查看主程序中對該定時器的設置,也能找到定時值。
知道了WDT的溢出時間后,就可以在修改或增加的程序中,每隔規定的時間插入一段指令清除定時器以使WDT不對系統復位。例如對8096系統,若不使用乘除指令,可以每執行約4K條指令插入以下2條指令:
??? MOV0AH,#1EH
MOV0AH,#E1H
5借用監控對象的資源
充分利用監控對象的資源,可以降低成本,最主要是可以使學生不必耗費時間多學習一臺儀器的使用方法。本監控系統借用了原實驗機上的鍵盤和數碼管顯示器。
原實驗機以掃描IO口方式擴展6位鍵盤,每個鍵盤都賦予了固定的鍵值和鍵功能,以及固定的鍵處理程序段。為了利用原實驗機的鍵盤使其執行新的鍵功能,又不破壞原來的功能,采用了這樣的方法:改寫原機的鍵盤掃描程序段,定義當某2個鍵(是在原機中沒有用到的)同時按下時,就跳出原程序轉往一個新編寫的程序模塊。在該新模塊中,所有鍵功能都可以被任意重新定義,當處理完新按鍵后再轉回原機程序中執行。
要利用原機的數碼管顯示器,可以有兩種方法:
?? (1)編寫新的顯示程序;(2)利用原程序的顯示功能,將要顯示的內容嵌入原程序中。因后者能很好地兼容原機程序,不易導致系統出錯或崩潰,故選用之。通過研究和測試,知原機的顯示機理是將顯示數據送緩沖區,由專用顯示模塊轉為八段數碼管顯示值。但其轉換算法非常復雜繁鎖。為不占用原機CPU太多時間及不易出錯,將所有可能的數據逐個送入緩沖區,測出一張數據同顯示式樣的對照表,在增加的新程序中,將顯示數據查表轉換后送緩沖區就可以了。
參 考 文 獻
1 綦希林,陳嘉慶.多國單片計算機實用技術.北京:電子工業出版社,1992
2 高海生,楊文煥.單片機應用技術大全.成都:西南交通大學出版社,1996
??? 關鍵詞:監控系統,單片機,雙端口存貯器,WDT
制作微機監控系統時,若受監控對象本身也是一個微機系統,且又沒有電路圖、程序等資料時,如何采集對象的內部數據(如CPU狀態等),如何修改對象的程序方不至令原系統運行不穩定和崩潰,如何充分利用監控對象的資源,是一個帶有普遍性的問題。
筆者研制的“數字實驗監控系統”,其主要功能是采集30臺學生實驗機狀態和過程信息,送往中心主機顯示。監控對象是一臺型號為DLES的數字電路實驗機,這是某公司的產品,除簡單的用法說明書外別無其它資料。該機的核心是單片機8031,帶6位鍵盤和數碼管顯示、并行口8155等,可選擇CPU工作方式產生各種實驗信號。
1用雙端口RAM采集數據
監控系統的首要任務是獲取受控對象的各種狀態信息。用IO線取得的只是其外部信息,且當高頻時容易遺漏。要取得重要的內部信息,必須設法使監控對象的CPU自動送出信息,即采用雙CPU通訊。無論用并行通訊還是串行通訊,都要大幅修改原機程序,且要占用原機CPU很多等待、檢測通訊口的時間,很容易破壞原機的固有時序。較好的方法是采用共享存貯器方式,只要在原機程序的適當位置插入一段程序,令其定時將自身的重要信息(例如片內RAM的256字節內容)送到共享存貯器就可以了。
??? 本系統采用雙端口存貯器IDT7132來實現兩CPU的通訊。雙口存貯器有2套獨立的IO電路,可供2個CPU在不同時刻讀寫各個存貯單元。但同時訪問同一存貯單元會產生沖突。IDT7132有一套沖突仲裁電路,使先到一方獲得優先權實現讀寫操作,而向另一方發出一個沖突信號BUSY。
沖突發生時,訪問存貯器失敗的一方要將剛失敗的一句指令再執行一次,本系統是將BUSY線接到單片機的中斷線INT0,電路見圖1。但單片機的程序指針PC不能直接被讀寫,而中斷的發生又是隨機的,無法掌握其出現的時刻,要重復執行中斷前的一句指令殊不容易。為實現這功能,用了一點技巧:因為,中斷服務程序執行前,PC值必自動壓入堆棧,可在中斷服務程序中將該PC值出棧,作減3處理后再入棧,則中斷結束出棧的PC值已退回指向到中斷前的一句指令了。
??? CLRINT1MOVXA,@DPTR SETBINT1
2原系統已用資源的查找
要改造別人的系統,難點之一是要了解原系統對各種資源的使用情況。單片機的內部讀寫存貯器RAM只有128字節,而要增改原機程序必須使用這些片內RAM,從而可能造成資源沖突。為了解原系統對片內RAM的使用情況,借用了文字編輯軟件的搜索功能。因為單片機對片內RAM的尋址方式只有2種:(1)直接尋址,此時,可將RAM的直接地址作為搜索關鍵字,調用編輯軟件的搜索功能,在原實驗機程序中逐個顯示該地址出現的地方;(2)以R0和R1為指針的間接尋址,這時,可分別以@R0和@R1為關鍵字搜索原程序,在出現的地方分析R0和R1的變化情況及范圍。
若以上兩方法勻未找到所關注的RAM單元,則可以肯定原系統未使用該資源。若該單元同時又是可位尋址的,而位地址只有直接尋址一種方式,故必須采用上述的第(1)種方式搜索一次,結論也是非常明確的。
3修改和插入程序的方法
如果監控對象的信號是軟件方式產生的(本實驗機就是這樣),修改、增加程序時在時間開銷上要非常小心,否則會導致原機時序出錯。以下是兩種常用的可行方法:
(1)在原程序的延時過程中,刪除其延時指令,插入執行時間大致同其原延時時間相當的新程序。例如,原實驗機為數碼管顯示而設的延時子程序就被用于將適當個字節的信息傳遞到雙端口存貯器。
? (2)在原程序中等待某些事件發生的過程中,插入新程序。例如等待鍵盤按鍵時,可以控制程序跳往新的功能模塊,執行適當時間后再返回。
4監視定時器WDT的處理
在大部分微機控制系統中,WDT(看門狗,在6800系列中是COP)都是首選的抗干擾措施之一,其作用是以軟件和硬件方式設置一個定時器,定時強制系統復位,以防止程序失控“跑飛”。
修改舊程序時必須留意查看原系統有無WDT,否則可能導致系統崩潰。若有,則首先要找到WDT的定時時間。硬件WDT的時間值一般是固定的,可查資料得到。例如8096系列是64K個狀態周
期。軟件WDT要先找到所用的定時器,可循2個途徑:(1)芯片自身的定時器。這可以在定時器中斷服務程序中查找,例如8051系列的二個定時器的中斷服務程序入口地址分別是000BH和0001BH,查看這2段程序可知哪一個是用于WDT的,然后進一步在主程序的初始化設置中查看對該定時器的設置,便可找到定時時間;(2)外圍芯片(例如8155)的定時器,要將之用于WDT必須將定時器溢出線接到單片機的某外部中斷線上,查看這些外部中斷服務程序就可以找到相應的定時器,再查看主程序中對該定時器的設置,也能找到定時值。
知道了WDT的溢出時間后,就可以在修改或增加的程序中,每隔規定的時間插入一段指令清除定時器以使WDT不對系統復位。例如對8096系統,若不使用乘除指令,可以每執行約4K條指令插入以下2條指令:
??? MOV0AH,#1EH
MOV0AH,#E1H
5借用監控對象的資源
充分利用監控對象的資源,可以降低成本,最主要是可以使學生不必耗費時間多學習一臺儀器的使用方法。本監控系統借用了原實驗機上的鍵盤和數碼管顯示器。
原實驗機以掃描IO口方式擴展6位鍵盤,每個鍵盤都賦予了固定的鍵值和鍵功能,以及固定的鍵處理程序段。為了利用原實驗機的鍵盤使其執行新的鍵功能,又不破壞原來的功能,采用了這樣的方法:改寫原機的鍵盤掃描程序段,定義當某2個鍵(是在原機中沒有用到的)同時按下時,就跳出原程序轉往一個新編寫的程序模塊。在該新模塊中,所有鍵功能都可以被任意重新定義,當處理完新按鍵后再轉回原機程序中執行。
要利用原機的數碼管顯示器,可以有兩種方法:
?? (1)編寫新的顯示程序;(2)利用原程序的顯示功能,將要顯示的內容嵌入原程序中。因后者能很好地兼容原機程序,不易導致系統出錯或崩潰,故選用之。通過研究和測試,知原機的顯示機理是將顯示數據送緩沖區,由專用顯示模塊轉為八段數碼管顯示值。但其轉換算法非常復雜繁鎖。為不占用原機CPU太多時間及不易出錯,將所有可能的數據逐個送入緩沖區,測出一張數據同顯示式樣的對照表,在增加的新程序中,將顯示數據查表轉換后送緩沖區就可以了。
參 考 文 獻
2 高海生,楊文煥.單片機應用技術大全.成都:西南交通大學出版社,1996
評論
查看更多