微機原理課程設計說明書簡單計算機的設計_第1頁
微機原理課程設計說明書簡單計算機的設計_第2頁
微機原理課程設計說明書簡單計算機的設計_第3頁
微機原理課程設計說明書簡單計算機的設計_第4頁
微機原理課程設計說明書簡單計算機的設計_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、鄭州航空工業(yè)管理學院微機原理課程設計說明書 2007 級 電氣工程及其自動化 專業(yè) 1206972 班級題 目 簡單計算機的設計 指導教師 職 稱 學 號 1206972 姓 名 二一0 年 六 月 十八 日簡易計算器的設計摘要: 1、課題:設計一個可以進行2位數(shù)的四則運算的計算器。2、要求:(1)鍵輸入數(shù)和運算符號; (2)led顯示運算過程和結果(十進制數(shù)); (3)表示出當前的運算類型; (4)具有清零和復位功能; (5)具有連續(xù)運算功能。關鍵詞: 8279a芯片、74ls138譯碼器、74ls240芯片、小鍵盤、led發(fā)光二極管。一、簡單計算器工作的基本原理:首先利用程序不斷掃描鍵盤是

2、不是有輸入,如果沒有就一直掃描,如果有就停止掃描,完成輸入,利用匯編的程序核對輸入鍵的數(shù)值,通過調用子程序進行2位數(shù)四則運算。運算完成后將運算的結果儲存并顯示到led顯示器上。通過鍵盤上的c鍵實現(xiàn)清零和復位功能。在一次運算之后可以直接進行下一次運算無需復位。二、設計方案 1、硬件部分本次設計所選用的芯片為:8279a芯片、led發(fā)光二極管、小鍵盤。由于8279a的輸出電流與led不匹配的問題,需要驅動電流,本實驗中選擇74ls240。(1)、8279a芯片在本設計中用8279a芯片控制鍵盤輸入和led顯示。8279a芯片是一種通用的可編程序的鍵盤/顯示接口器件,可與任何8位機接口,能完成鍵盤輸

3、入和led顯示控制兩種功能。采用8279作為鍵盤/顯示器接口,則可以實現(xiàn)對鍵盤、顯示器自動掃描,8279主要是管理鍵盤輸入和顯示器輸出的。8279可編程鍵盤顯示器接口芯片具有動態(tài)顯示驅動電路簡單、不占用cpu 的時間、可自動進行鍵盤掃描、與計算機接口方便、編程容易、系統(tǒng)靈活等特點,是實時性較高的測控系統(tǒng)的首選器件之一。(2)、74ls138譯碼器在本設計中74ls138譯碼器用來掃描計數(shù)器采用編碼工作方式。74ls138譯碼器的功能:74ls138是3/8譯碼器,即對3個輸入信號進行譯碼,得到8個輸出狀態(tài)。g1、g2a、g2b為數(shù)據(jù)允許輸出端,g2a、g2b低電平有效,g1高電平有效。a、b、

4、c為譯碼信號輸出端,y0y7為譯碼輸出端,低電平有效。(3)、74ls240譯碼器本設計中74ls240譯碼器主要是為增加led的驅動電流。74ls240譯碼器的功能:74ls240 ttl 八反相三態(tài)緩沖器/線驅動器各個引出端: 1a、2a為輸入端; 、為三態(tài)允許端(低電平有效);1y8y為輸出端。(4)、小鍵盤本設計中小鍵盤用于輸入二進制數(shù)字。(5)、led發(fā)光二極管在本設計中采用7段數(shù)字led發(fā)光二級管,做為終端顯示。顯示數(shù)值的輸入及結果輸出的顯示。在本設計中采用共陰極接法。 2、軟件部分輸入:小鍵盤上的16個按鍵中0到9十個數(shù)字鍵作為數(shù)字輸入,a、b、c、d分別作為加、減、乘、除,f作

5、為等于號。通過對8279初始化,實現(xiàn)對每個按鍵賦予不同的功能。顯示:8279a芯片內(nèi)部有一個顯示ram和一個fifo ram,可以暫存從小鍵盤中讀出的數(shù)據(jù),同時可以將內(nèi)存中的數(shù)據(jù)暫存到顯示ram中,簡化了程序復雜程度。每次將各個位要顯示的數(shù)據(jù)處理好后到換碼表中找到對應值,初始化8279a后將值送到數(shù)據(jù)口,即實現(xiàn)顯示的目的。清零:在程序中設置了按鍵數(shù)目的限制(定為8),當8個數(shù)碼塊全有字符顯示后再按鍵,清除顯示。三、硬件設計硬件電路圖的設計:圖中8279a的地址由和a0決定,故數(shù)據(jù)口地址為7ffeh,命令口地址為7fffh。圖中顯示部分段選碼由8279的outa3outa0、outb3outb0

6、通過驅動器74ls240提供,位選碼由sl2sl0 經(jīng)3-8譯碼器通過驅動器74ls240提供。四、軟件設計在軟件設計中,顯示方式采用了8個字符顯示,從左輸入方式,編碼掃描鍵盤,雙鍵鎖定。由于該系統(tǒng)對實時性及速度要求并不十分高,所以時鐘頻率采用6m hz已足夠了,故程序時鐘命令字取為2ah,用以保證100khz的內(nèi)部工作頻率。由于采用10ms定時掃描查詢方式,所以在下次開始掃描時,先應清空8279a,清除顯示ram大約需要160s的時間,在此期間,fifo狀態(tài)字的最高位du=1,表示顯示無效,cpu不能顯示ram寫入數(shù)據(jù),所以清除命令狀態(tài)字取d1h。cpu對8279a的控制是先讀回8279a的

7、狀態(tài)字,查看piforam中有無字符,若有將根據(jù)字符個數(shù)讀出所有字符,并進行相應處理;若無,則直接返回。cpu對8279a的監(jiān)視采用查詢方式,對8279a分配的數(shù)據(jù)口地址為8000h,狀態(tài)口地址為8001h,cpu每隔10ms定時中斷查詢一次,所有顯示采用查詢段碼表的方式實現(xiàn),簡化了程序設計過程,提高了程序質量。程序流程圖如下:開始調用地址轉化調用8279初始化di取數(shù)據(jù)首地址是否有按鍵按下n按鍵數(shù)加1顯示結果al=6 ?al與keycont換call key_numal中是否為加al是否為減al是否為乘號al是否為除al中大于10alkeyount,inc alal5?重新掃描按鍵轉加法轉減

8、法轉乘法轉除法按鍵數(shù)置0,清除顯示清零nnnnyynnyynnn程序清單:stack segment stcak db 64 dup(?)stack ends data segment org 3000h var1 db 00h,01h,02h,03h,04h var2 db 3fh, 3fh, 3fh, 3fh, 3fh, 3fh, 3fh, 3fh, 3fh, 3fh var3 db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h var4 db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00

9、htable db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71hdata endscode segment assume cs:code,ds:data,ss:stackstart:mov ax,data mov ds,ax mov al,88h out 63h,al ;82255a初始化 mov bx,0000h ;bx清零stt: mov al,00h ;鍵盤測試 out 61h.alnext: in al,62h and al,0c0h cmp al,0c0h jnz keyabc call disp ;調

10、用顯示程序 jmp sttkeyabc:call time ;延時 in al,62h and al,0c0h cmp al,0c0h jnz key jmp sttkey: mov al,0feh ;鍵盤掃描識別 out 61h,al in al,62h test al,80h jnz key_0 call key8 jmp sttkkey_0: test al,40h jnz key_9 call key0 jmp sttkkey_9: mov al,0fdh out 61h,al in al,62h test al,80h jnz key_1 call key9 jmp sttkkey_

11、1: test al,40h jnz key_a call key1 jmp sttkkey_a: mov al,0fbh out 61h,al in al,62h test al,80h jnz key_2 call keya jmp sttkkey_2: test al,40h jnz key_b call key2 jmp sttkkey_b: mov al,0f7h out 61h,al in al,62h test al,80h jnz key_3 call keyb jmp sttkkey_3: test al,40h jnz key_c call key3 jmp sttkkey

12、_c: mov al,0efh out 61h,al in al,62h test al,80h jnz key_4 call keyc jmp sttkkey_4: test al,40h jnz key_d call key4 jmp sttkkey_d: mov al,0dfh out 61h,al in al,62h test al,80h jnz key_5 call keyd jmp sttkkey_5: test al,40h jnz key_d call key5 jmp sttkkey_e: mov al,0bfh out 61h,al in al,62h test al,8

13、0h jnz key_6 call keye jmp sttkkey_6: test al,40h jnz key_f call key6 jmp sttkkey_f: mov al,07fh out 61h,al in al,62h test al,80h jnz key_7 call keyf jmp sttkkey_7: test al,40h jnz key_71 call key7 jmp sttkkey_71:jmp sttkkey9: cmp bh,00h ;按鍵9處理子程序 jz key9_1 ;未按過符號鍵,不清零 call clear ;已按過符號鍵,清零key9_1:ca

14、ll lp1 ;低4位字節(jié)前移 mov al,6fh ;最低字節(jié)輸入一個數(shù)據(jù) mov si+4,al mov al,09h mov di+4,al call disp ;顯示 ret;返回key8: cmp bh,00h ;按鍵8處理子程序 jz key8_1 call clearkey8_1:call lp1 mov al,7fh mov si+4,al mov al,08h mov di+4,al call disp retkey7: cmp bh,00h ;按鍵7處理子程序 jz key7_1 call clearkey7_1:call lp1 mov al,07h mov si+4,a

15、l mov al,07h mov di+4,al call disp retkey6: cmp bh,00h ;按鍵6處理子程序 jz key6_1 call clearkey6_1:call lp1 mov al,7dh mov si+4,al mov al,06h mov di+4,al call disp retkey5: cmp bh,00h ;按鍵5處理子程序 jz key5_1 call clearkey5_1:call lp1 mov al,6dh mov si+4,al mov al,05h mov di+4,al call disp retkey4: cmp bh,00h ;

16、按鍵4處理子程序 jz key4_1 call clearkey4_1:call lp1 mov al,66h mov si+4,al mov al,04h mov di+4,al call disp retkey3: cmp bh,00h ;按鍵3處理子程序 jz key3_1 call clearkey3_1:call lp1 mov al,4fh mov si+4,al mov al,03h mov di+4,al call disp retkey2: cmp bh,00h ;按鍵2處理子程序 jz key2_1 call clearkey2_1:call lp1 mov al,5bh

17、mov si+4,al mov al,02h mov di+4,al call disp retkey1: cmp bh,00h ;按鍵1處理子程序 jz key1_1 call clearkey1_1:call lp1 mov al,06h mov si+4,al mov al,01h mov di+4,al call disp retkey0: cmp bh,00h ;按鍵0處理子程序 jz key0_1 call clearkey0_1:call lp1 mov al,3fh mov si+4,al mov al,00h mov di+4,al call disp retkeya: cm

18、p bh,00h ;按鍵+號處理子程序 jnz keya_1 call lp3 ;保存輸入的數(shù)據(jù)keya_1:mov bx,0101h;設置符號標志 ret;返回keyb: cmp bh,00h ;按鍵-號處理子程序 jnz keyb_1 call lp3 ;保存輸入的數(shù)據(jù)keyb_1:mov bx,0102h ;設置符號標志 ret;返回keyc: cmp bh,00h ;按鍵*號處理子程序 jnz keyc_1 call lp3 ;保存輸入的數(shù)據(jù)keyc_1:mov bx,0103h ;設置符號標志 ret;返回keyd: cmp bh,00h ;按鍵/號處理子程序 jnz keyd_1

19、call lp3 ;保存輸入的數(shù)據(jù)keyd_1:mov bx,0104h ;設置符號標志 ret ;返回keye: mov bh,01h ;按鍵=號處理子程序 cmp bl,01h ;是+號? jz k1 ;進行加法運算 cmp bl,02h ;是-號? jz k2 ;進行減法運算 cmp bl,03h ;時*號? jz k3 ;進行乘法運算 cmp bl,04h ;是/號? jz k4 ;進行除法運算stte: retk1: call add1 jmp sttek2: call sub1 jmp sttek3: call mul1 jmp sttek4: call div1 jmp stte

20、keyf: call clear ;按鍵c(清零)處理子序 retclear: mov si,offset var2;數(shù)據(jù)清零子程序 mov di,offset var3 mov cx,000ahclear1:mov al,3fh mov si,al mov al,00h mov di,al inc si inc di loop clear1 mov bh,00h retadd1: mov si,offset var3 ;加法子程序 mov di,offset var4 clc mov cx,0005hadd_1: mov al,di adc al,si aaa mov di,al inc s

21、i inc di loop add_1 call change call disp retsub1: mov si,offset var3 ;減法子程序 mov di,offset var4 clc mov cx,0005hsub_1: mov al,di mov cl,si aas mov di,al inc si inc di loop sub_1 call change call disp retmul1: mov si,offset var3 ;乘法子程序 mov di,offset var4mov al,di mov cl,si mul cl aam mov di+5,ax mov

22、al,di+1 mul cl aam add al,di+6 aaa mov di+6,ax mov al,di mov cl,si+1 mul cl aam mov si+5,ax mov al,di+1 mul cl aam add al,si+6 aaa mov si+6,ax mov al,di+5 mov di,al mov al,di+6 add al,si+5 aaa mov di+1,al mov al,di+7 adc al,si+6 aaa mov di+2,al mov al.00h adc al,si+7 aaa mov di+3,al call change call

23、 disp retdiv1: mov si,offset var3 ;除法子程序 mov di,offset var4 mov ah,00h mov al,di+1 mov ck,si div cl mov di+1,al mov al,di aad div cl mov di,al call change call disp retlp1: mov cx,0004h ;數(shù)據(jù)移位保存子程序(4位) mov si,offset var2 mov di,offset var3lp2: mov al,si+3 mov si+4,al mov al,di+3 mov di+4,al dec si de

24、c di loop lp2 retlp3: mov cx,0005h ;保存上一次數(shù)據(jù)子程序 mov si,offset var3 mov di,offset var4lp4: mov al,si mov di,al dec si dec di loop lp4 retchange:mov si,offset var2 mov di,offset var3 mov bx,offset table mov cx,0005hcomp0: mov al,di xlat mov si,al inc si inc di loop comp0 retdisp: mov si,offset var1 mov

25、 di,offset var2 mov dl,di+4 cmp 3fh jnz dir4 mov dl,di+3 cmp dl,3fh jnz dir3 mov dl,di+2 cmp dl,3eh jnz dir2 mov dl,di+1 cmp dl,3fh jnz dir1 jmp dir0dir4: mov cx,0005h jmp dirdir3: mov cx,0004h jmp dirdir2: mov cx,0003h jmp dir dir1: mov cx,0002h jmp dirdir0: mov cx,0001hdir: mov al,si out 62h,al mo

26、v al,di out 60h,al call time inc si inc di loop dir rettime: push ax push cx mov cx,0040htime1: mov ax,0300htime2: dec ax jnz time2 loop time1 pop cx pop ax retsttk: call disp ;放鍵測試程序 mov al,00h out 61h,al in al,62h and al,0c0h cmp al,0c0h jnz sttk jmp sttcode ends五、系統(tǒng)調試1、硬件調試本設計采用八位七段led顯示器、十六鍵小鍵盤、

27、74ls138譯碼器、74ls240譯碼器及8279a芯片。led顯示器采用的是共陰極接法,8279a通過74ls138譯碼器擴展28鍵盤、8位顯示器,最后通過七段led顯示出相應的數(shù)字。將八位七段led測試完后,都能正常顯示,則硬件調試成功。2、軟件調試本實驗通過小鍵盤的按鍵輸入與鍵號相同的十進制數(shù)值,利用led七段顯示器循環(huán)顯示與所按下鍵相對應的十進制數(shù),編譯鏈接無錯誤后開始單步調試,找出錯誤的地方,確保無誤后全速運行得出結果。3、聯(lián)機調試 將實驗箱總電源開關打開,打開pc機上的集成軟件。編譯程序、編譯通過后,單步調試并觀察結果以及各寄存器中值得變化,然后單步連續(xù)執(zhí)行觀察按下鍵與顯示數(shù)值。出現(xiàn)問題時對程序進行修改,直至出現(xiàn)正確結果。4、調試中出現(xiàn)的問題(1)、全速運行時led顯示器顯示全為暗紅色8字型?原因:由于指令運行的速度很快,導致新舊數(shù)據(jù)有重影(前一次顯示數(shù)據(jù)時為亮的二極管沒有顯示結束,導致新顯示的數(shù)據(jù)看不清楚)。(2)、 程序在輸入完兩個數(shù)值

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論