時斌
【摘要】Proteus軟件強大的CPU仿真功能讓其在電子、通信、物聯(lián)網(wǎng)等相關專業(yè)的課程學習中有著重要作用。本文給出了一個用Proteus軟件仿真8086系統(tǒng)下數(shù)字溫度傳感器TC77的實例,指出在教學實踐中采用適當?shù)姆抡婕夹g對教學質(zhì)量提高的重要意義。
【關鍵詞】微機原理 8086 TC77 Proteus 仿真
電子、通信、物聯(lián)網(wǎng)等相關專業(yè)在選修課學習中大多有傳感器技術等課程,而對傳感器的相關實驗有仿真和實際制作兩大類,即使是實際制作,之前先做仿真也是一個比較好的選擇。目前高校的教學中以8088為重點的微機原理課程一般安排在單片機之前,以致學習傳感器課程時單片機課程尚未學完,故用微機原理的知識進行傳感器的仿真成為一種選擇,同時也能深化對微機原理課程的理解。
1 8086最小系統(tǒng)
微機原理課程大多以8088為核心進行講解,但遺憾的是目前Proteus軟件里沒有8088CPU,只有8086,故要稍作修改,幸好改的地方不多。
圖1 8086最小系統(tǒng)圖
圖1為8086最小系統(tǒng)圖,該圖提供了16根地址線A0~A15,8根數(shù)據(jù)線D0~D7,理論上8086可提供16根數(shù)據(jù)線,但本應用中有8根即可,所以D8~D15沒有畫出。注意8086的READY端要接VCC,否則系統(tǒng)運行時只運行1條語句,8086的CLK端未接,時鐘用的是內(nèi)部仿真時鐘,一般用5MHz即可。
2 系統(tǒng)的控制信號
圖2 8086系統(tǒng)的控制信號
圖2為系統(tǒng)的控制信號,CS0為8255的片選信號,IOR和IOW為8255的讀選通和寫選通信號。另外要注意8086的28腳M/IO信號和8088不一樣,該腳為低電平時表示IO接口,高電平時表示存儲器,該表示方法正好和8088相反。
3 IO接口及傳感器和顯示部分
圖3 8255接口、TC77和顯示部分
圖3為8255接口和數(shù)字傳感器TC77及數(shù)碼管顯示部分,8255的A口接數(shù)碼管的段碼,B口低4位接數(shù)碼管的位碼,本應用中用的是共陽數(shù)碼管。8255的PC7接TC77的CS,PC6接TC77的SCK,PC0接TC77的SI/O。
采用數(shù)碼管顯示是因為程序比較簡單,畢竟8086CPU要用匯編進行編程。
4 數(shù)字溫度傳感器TC77
如圖3所示,TC77有5個引腳,另外2個是電源和地。
圖4 TC77的時序圖
圖5 TC77的數(shù)據(jù)格式
圖4為TC77的時序圖,圖5為TC77的數(shù)據(jù)格式。由圖5可看出TC77有16位數(shù)據(jù),但其中后3位不用,一直為1,所以有效位為13位,故圖4時序圖中為13位數(shù)據(jù),注意其中第1位為符號位,最低有效位表示0.0625℃。
5 數(shù)碼管顯示子程序
display proc ;輸出一位數(shù)碼管
mov dx,8020h
mov bx,offset seg7
xlat
xor al,0FFh
out dx,al ;輸出段碼
mov dx,8022h
mov al,ah
out dx,al ;輸出位碼
call delay
mov al,00h ;清位碼
out dx,al
ret
display endp
org 0400h ;數(shù)碼管段碼
seg7 db 03fh,006h,05bh,04fh,066h,06dh,07dh,007h,
db 07fh,06fh,077h,07ch,039h,05eh,079h,071h
上述程序為顯示子程序,注意seg7段放在程序的代碼段里,因為在Proteus中分段比較麻煩,為簡單考慮就一起放在代碼段里了。8255的控制口地址為8026h,A口地址為8020h,B口地址為8022h,C口地址為8024h。該子程序的入口AL中放入要輸出的00~0F字符,AH中放入位碼,第1個數(shù)碼管為01h,第2、3、4數(shù)碼管分別為02h、04h、08h。
6 讀取TC77數(shù)據(jù)子程序
Getdata proc
mov ah,0h
mov dx,8024h
mov al,80h ;CS:1,SCK:0
out dx,al
mov al,00h ;CS:0,SCK:0
out dx,al
mov cx,9
g10: in al,dx
and al,01h
shl ah,1
add ah,al
mov al,40h ;SCK:1
out dx,al
mov al,00h ;SCK:0
out dx,al
loop g10
mov al,80h ;CS:1
out dx,al
ret
getdata endp
上述程序為TC77讀取數(shù)據(jù)程序,為簡單起見,未考慮小數(shù)和負數(shù)的情況。返回的TC77數(shù)據(jù)放在AH中。該程序先把TC77的CS置1,SCK清0,再把CS清0,然后開始串行讀取數(shù)據(jù),總共讀了9位,其中第1位為符號位,為簡單考慮丟棄了,最后1位正好代表1℃。
7 主循環(huán)程序
start proc far
mov sp,800h
mov dx,8026h
mov al,81h
out dx,al
s10: call getdata ;ah:溫度值
mov al,ah
mov ah,0
mov bl,10
div bl
push ax
mov al,ah
mov ah,4
call display
pop ax
mov ah,2
call display
jmp s10
start endp
上述程序為主循環(huán)程序,第1行設置了SP,后3行對8255進行初始化。循環(huán)體中的程序為調(diào)用讀取TC77數(shù)據(jù)子程序及把返回的AH值用十進制方式顯示在數(shù)碼管的2、3位上。
7 仿真結果
圖6 仿真結果
圖6為仿真結果,如調(diào)整TC77的上下按鈕可看到數(shù)碼管上的數(shù)據(jù)相應變化,TC77每一次變化0.5℃,連續(xù)變化2次就可看到數(shù)碼管上變化1℃。圖6中示波器上的3個信號分別為TC77的CS、SCK、SI/O信號,圖6中SI/O的數(shù)據(jù)為000011100,第1位為符號位,后面8位轉換為十進制即為28,和數(shù)碼管中顯示的一致。
本文給出了一個用Proteus軟件仿真8086系統(tǒng)下數(shù)字溫度傳感器TC77的實例,很好地理解了數(shù)字溫度傳感器的使用方法,為以后的實際制作打下了良好的基礎,同時用8086CPU做主控系統(tǒng)在高校的本科教學中也起到了承上啟下的效果。
【參考文獻】
[1]微型計算機原理與接口技術(第3版)馮博琴 吳寧主編 清華大學出版社