時(shí)斌
【摘要】Proteus軟件強(qiáng)大的CPU仿真功能讓其在電子、通信、物聯(lián)網(wǎng)等相關(guān)專業(yè)的課程學(xué)習(xí)中有著重要作用。本文給出了一個(gè)用Proteus軟件仿真8086系統(tǒng)下數(shù)字溫度傳感器TC77的實(shí)例,指出在教學(xué)實(shí)踐中采用適當(dāng)?shù)姆抡婕夹g(shù)對教學(xué)質(zhì)量提高的重要意義。
【關(guān)鍵詞】微機(jī)原理 8086 TC77 Proteus 仿真
電子、通信、物聯(lián)網(wǎng)等相關(guān)專業(yè)在選修課學(xué)習(xí)中大多有傳感器技術(shù)等課程,而對傳感器的相關(guān)實(shí)驗(yàn)有仿真和實(shí)際制作兩大類,即使是實(shí)際制作,之前先做仿真也是一個(gè)比較好的選擇。目前高校的教學(xué)中以8088為重點(diǎn)的微機(jī)原理課程一般安排在單片機(jī)之前,以致學(xué)習(xí)傳感器課程時(shí)單片機(jī)課程尚未學(xué)完,故用微機(jī)原理的知識(shí)進(jìn)行傳感器的仿真成為一種選擇,同時(shí)也能深化對微機(jī)原理課程的理解。
1 8086最小系統(tǒng)
微機(jī)原理課程大多以8088為核心進(jìn)行講解,但遺憾的是目前Proteus軟件里沒有8088CPU,只有8086,故要稍作修改,幸好改的地方不多。
圖1 8086最小系統(tǒng)圖
圖1為8086最小系統(tǒng)圖,該圖提供了16根地址線A0~A15,8根數(shù)據(jù)線D0~D7,理論上8086可提供16根數(shù)據(jù)線,但本應(yīng)用中有8根即可,所以D8~D15沒有畫出。注意8086的READY端要接VCC,否則系統(tǒng)運(yùn)行時(shí)只運(yùn)行1條語句,8086的CLK端未接,時(shí)鐘用的是內(nèi)部仿真時(shí)鐘,一般用5MHz即可。
2 系統(tǒng)的控制信號(hào)
圖2 8086系統(tǒng)的控制信號(hào)
圖2為系統(tǒng)的控制信號(hào),CS0為8255的片選信號(hào),IOR和IOW為8255的讀選通和寫選通信號(hào)。另外要注意8086的28腳M/IO信號(hào)和8088不一樣,該腳為低電平時(shí)表示IO接口,高電平時(shí)表示存儲(chǔ)器,該表示方法正好和8088相反。
3 IO接口及傳感器和顯示部分
圖3 8255接口、TC77和顯示部分
圖3為8255接口和數(shù)字傳感器TC77及數(shù)碼管顯示部分,8255的A口接數(shù)碼管的段碼,B口低4位接數(shù)碼管的位碼,本應(yīng)用中用的是共陽數(shù)碼管。8255的PC7接TC77的CS,PC6接TC77的SCK,PC0接TC77的SI/O。
采用數(shù)碼管顯示是因?yàn)槌绦虮容^簡單,畢竟8086CPU要用匯編進(jìn)行編程。
4 數(shù)字溫度傳感器TC77
如圖3所示,TC77有5個(gè)引腳,另外2個(gè)是電源和地。
圖4 TC77的時(shí)序圖
圖5 TC77的數(shù)據(jù)格式
圖4為TC77的時(shí)序圖,圖5為TC77的數(shù)據(jù)格式。由圖5可看出TC77有16位數(shù)據(jù),但其中后3位不用,一直為1,所以有效位為13位,故圖4時(shí)序圖中為13位數(shù)據(jù),注意其中第1位為符號(hào)位,最低有效位表示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
上述程序?yàn)轱@示子程序,注意seg7段放在程序的代碼段里,因?yàn)樵赑roteus中分段比較麻煩,為簡單考慮就一起放在代碼段里了。8255的控制口地址為8026h,A口地址為8020h,B口地址為8022h,C口地址為8024h。該子程序的入口AL中放入要輸出的00~0F字符,AH中放入位碼,第1個(gè)數(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
上述程序?yàn)門C77讀取數(shù)據(jù)程序,為簡單起見,未考慮小數(shù)和負(fù)數(shù)的情況。返回的TC77數(shù)據(jù)放在AH中。該程序先把TC77的CS置1,SCK清0,再把CS清0,然后開始串行讀取數(shù)據(jù),總共讀了9位,其中第1位為符號(hào)位,為簡單考慮丟棄了,最后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
上述程序?yàn)橹餮h(huán)程序,第1行設(shè)置了SP,后3行對8255進(jìn)行初始化。循環(huán)體中的程序?yàn)檎{(diào)用讀取TC77數(shù)據(jù)子程序及把返回的AH值用十進(jìn)制方式顯示在數(shù)碼管的2、3位上。
7 仿真結(jié)果
圖6 仿真結(jié)果
圖6為仿真結(jié)果,如調(diào)整TC77的上下按鈕可看到數(shù)碼管上的數(shù)據(jù)相應(yīng)變化,TC77每一次變化0.5℃,連續(xù)變化2次就可看到數(shù)碼管上變化1℃。圖6中示波器上的3個(gè)信號(hào)分別為TC77的CS、SCK、SI/O信號(hào),圖6中SI/O的數(shù)據(jù)為000011100,第1位為符號(hào)位,后面8位轉(zhuǎn)換為十進(jìn)制即為28,和數(shù)碼管中顯示的一致。
本文給出了一個(gè)用Proteus軟件仿真8086系統(tǒng)下數(shù)字溫度傳感器TC77的實(shí)例,很好地理解了數(shù)字溫度傳感器的使用方法,為以后的實(shí)際制作打下了良好的基礎(chǔ),同時(shí)用8086CPU做主控系統(tǒng)在高校的本科教學(xué)中也起到了承上啟下的效果。
【參考文獻(xiàn)】
[1]微型計(jì)算機(jī)原理與接口技術(shù)(第3版)馮博琴 吳寧主編 清華大學(xué)出版社