版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 微機原理與接口技術</b></p><p><b> 課程設計報告</b></p><p><b> ——倒計電子時鐘</b></p><p> 倒計電子時鐘課程設計報告</p><p><b> 一、設計題目:</b>
2、;</p><p><b> 倒計電子時鐘</b></p><p><b> 二、設計目的:</b></p><p> 1、掌握多位計數(shù)器相連的設計方法。</p><p> 2、掌握十進制、六十進制、二十四進制計數(shù)器的設計方法。</p><p> 3、進一步掌握定時
3、器的使用和編程方法。 </p><p> 4、進一步掌握中斷處理程序的編程方法。 </p><p> 5、進一步掌握數(shù)碼顯示電路的驅動方法。</p><p><b> 三、設計要求:</b></p><p> 1.用時、分、秒計數(shù)顯示功能,以24小時開始倒計時。</p><p><b
4、> 格式如下: </b></p><p> 24: 60: 60 由左向右分別為:時、分、秒</p><p> 2.具有重新調節(jié)開始時間為12:60:60,暫停,繼續(xù)的功能。</p><p><b> 四、設計環(huán)境:</b></p><p> 偉福Lab6000通用微控制器實驗系統(tǒng)實驗儀以及
5、偉福6000仿真模擬軟件。</p><p><b> 五、設計說明:</b></p><p> 定時器每100us中斷一次,在中斷服務程序中,對中斷次數(shù)進行計數(shù),100us計數(shù)10000次就是1秒。然后再對秒計數(shù)得到分和小時值,并送入顯示緩沖區(qū)。</p><p> 六、設計連接電路圖:</p><p> 1、電路
6、連接圖描述:</p><p> 本實驗利用8253做定時器,用定時器輸出的脈沖控制8259產生中斷</p><p> 在8259中斷處理程序中,對時、分、秒進行計數(shù),在等待中斷的循</p><p> 環(huán)中用LED顯示時間。</p><p> 8253用定時器/計數(shù)器1,8253片選接CS4,地址為0C000H。8253時鐘</p
7、><p> 源CLK1接分頻電路的F/64輸出。分頻器的Fin接4MHz時鐘。8253的</p><p> GATE1接VCC。</p><p> 8259中斷INT0接8253的OUT1,片選接CS5,地址為0D000H。</p><p> 顯示電路的KEY/LED CS 接CS0,地址為08000H。</p><p
8、> 2、電路連接圖如下:</p><p> 七、設計程序框架圖:</p><p> 八、設計原理和步驟:</p><p><b> 1.設計原理:</b></p><p> (1)、數(shù)字電路設計理論</p><p> ?。?)、時鐘倒計數(shù):秒---60進制BCD碼計數(shù);分---60
9、進制BCD碼計數(shù);時---24進制BCD碼計數(shù);開始時計數(shù)器顯示的是初始化的時鐘時間:24:60:60。時鐘根據(jù)電路連接圖時頻的不同接法,其運行時間的快慢也會有所不同。按不同的按鈕其執(zhí)行的功能也有所不同,整個計數(shù)器具有重新運行自己所設置的時間開始倒計時(這里的按鈕鍵是:9)、暫停(按鈕是:7)、繼續(xù)(按鈕是:8)的功能。并且功能鍵的位置也可根據(jù)自己的習慣在代碼中進行相應的設置,如:設重新運行設置的時間開始倒計時(按鈕鍵是:4)、暫停(按
10、鈕是:5)、繼續(xù)(按鈕是:6)。</p><p><b> 2.設計步驟:</b></p><p> ?。?)、在有masm軟件的計算機上進行設計編碼。</p><p> ?。?)、對masm上的代碼進行調試并進行修改。運行。</p><p> (3)、把已在masm可運行的程序移植到EDA實驗室的計算機wav600
11、0軟件上。</p><p> ?。?)、對程序進行編譯,修改,直至編譯通過。并對選擇的環(huán)境進行相應的設置。</p><p><b> 編譯通過截圖如下:</b></p><p> ?。?)、根據(jù)電路連接圖的描述和對應的連接圖在試驗箱中進行電路圖的連接。</p><p> (6)、把計算機wav6000軟件與試驗箱相連
12、接進行通信,可把程序代碼導入8086cpu芯片中。</p><p> ?。?)、運行程序,在試驗箱中按根據(jù)已設的按鈕,觀察其對應的顯示信息??雌涫欠裼邪搭A設的功能顯示,并記錄。</p><p> ?。?)、對電路進行不同的連接,并在代碼進行相應的修改,看其顯示的信息是否有發(fā)生相應的變化。</p><p> ?。?)、完成設計后,整理實驗儀器。書寫設計報告。</
13、p><p> 九:設計結論和心得:</p><p><b> 結論:</b></p><p> 實驗達到了實驗的要求和目的。</p><p> ?。?)、按按鈕7可暫停,按按鈕8可使已暫停的計數(shù)繼續(xù)倒計時,按按鈕9可使正在運行的倒計時從12:60:60開始進行倒計時。</p><p> (2)
14、、對按鈕的位置修改也可達到預期的效果,對倒計時的時頻進行修改,也可加快或減慢其倒計時的速度。</p><p> (3)、對電路圖的接口進行修改和相應的代碼修改也可達到相同的顯示結果。</p><p><b> 2.心得體會:</b></p><p> 通過這次倒計電子時鐘的設計和實現(xiàn),掌握了六十進制和二十四進制數(shù)字電路的設計,同時復習了w
15、av6000這個軟件和試驗箱的連接應用。由于匯編原理的有些知識掌握不牢固,實驗過程中遇到了很多困難,但在老師和同學的幫助下,順利完成了此次的設計,同時也借此機會復習了匯編原理的知識,提高了自己動手能力。希望以后能多做一些這樣的設來驗證已學過知識,達到學以致用的效果。</p><p><b> 十、附加代碼:</b></p><p> CONTROL equ 0a0
16、03h</p><p> COUNT0 equ 0a000h</p><p> COUNT1 equ 0a001h</p><p> COUNT2 equ 0a002h</p><p> md8255 equ 82h ; 8255 工作方式</p><p> PA8255 equ
17、 8001h ; 8255 PA口輸出地址</p><p> CTL8255 equ 8003h ; 8255 控制口地址</p><p> OUTBIT equ 08002h ; 位控制口</p><p> OUTSEG equ 08004h ; 段控制口</p><p> IN_KEY
18、 equ 08001h ; 鍵盤讀入口</p><p> ICW1 equ 00010011b ; 單片8259, 上升沿中斷, 要寫ICW4</p><p> ICW2 equ 00100000b ; 中斷號為20H</p><p> ICW4 equ 00000001b ; 工作在8086/88 方式</
19、p><p> OCW1 equ 11111110b ; 只響應INT0 中斷</p><p> CS8259A equ 0d000h ; 8259地址</p><p> CS8259B equ 0d001h</p><p> data segment</p><p> CNT
20、 db 0</p><p> LEDBuf db 6 dup(?) ; 顯示緩沖</p><p> Num db 1 dup(?) ; 顯示的數(shù)據(jù)</p><p> DelayT db 1 dup(?)</p><p> Hour db 0</p><p> Minute db 0&
21、lt;/p><p> Second db 0</p><p> LEDMAP: ; 八段管顯示碼(使用軟件譯碼的方式顯示LED數(shù)碼管)</p><p> db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h</p><p> db 7fh, 6fh, 77h, 7ch,
22、 39h, 5eh, 79h, 71h</p><p> KeyTable: ; 鍵碼定義</p><p> db 16h, 15h, 14h, 0ffh</p><p> db 13h, 12h, 11h, 10h</p><p> db 0dh, 0ch, 0bh, 0ah</p&
23、gt;<p> db 0eh, 03h, 06h, 09h</p><p> db 0fh, 02h, 05h, 08h</p><p> db 00h, 01h, 04h, 07h</p><p> data ends</p><p> code segment</p><
24、;p> assume cs:code, ds: data</p><p> Delay proc near</p><p> push ax ; 延時子程序</p><p><b> push cx</b></p><p> mov al, 0</p><p>
25、; mov cx,ax</p><p><b> loop $</b></p><p><b> pop cx</b></p><p><b> pop ax</b></p><p><b> ret</b></p>
26、<p> Delay endp</p><p> DisplayLED proc near</p><p> mov bx, offset LEDBuf</p><p> mov cl, 6 ; 共6個八段管</p><p> mov ah, 00100000b ; 從左邊開始顯示</p
27、><p><b> DLoop:</b></p><p> mov dx, OUTBIT</p><p> mov al, 0</p><p> out dx,al ; 關所有八段管</p><p> mov al, [bx]</p><p
28、> mov dx, OUTSEG</p><p> out dx,al</p><p> mov dx, OUTBIT</p><p> mov al, ah</p><p> out dx, al ; 顯示一位八段管</p><p><b> push a
29、x</b></p><p> mov ah, 1</p><p> call Delay</p><p><b> pop ax</b></p><p> shr ah, 1</p><p><b> inc bx</b></p&
30、gt;<p><b> dec cl</b></p><p> jnz DLoop</p><p> mov dx, OUTBIT</p><p> mov al, 0</p><p> out dx,al ; 關所有八段管</p><p>
31、;<b> ret</b></p><p> DisplayLED endp</p><p> IEnter proc near</p><p><b> push ax</b></p><p><b> push dx</b></p><p
32、> dec Second ;秒數(shù)減少1</p><p> mov al, Second</p><p> cmp al, 0 ;比較,若秒數(shù)小于0則結束本次中斷,若等于0則秒數(shù)為60,分數(shù)減1 </p><p> jne Exit</p><p> mov Second, 0<
33、/p><p> dec Minute</p><p> mov al, Minute</p><p> cmp al, 0</p><p> jne Exit</p><p> mov Minute, 0</p><p> dec Hour</p>
34、<p> mov al, Hour</p><p> cmp al, 0</p><p> jne Exit</p><p> mov Hour, 0</p><p><b> Exit:</b></p><p> mov dx, CS8259A</
35、p><p> mov al, 20h ; 中斷服務程序結束指令</p><p> out dx, al</p><p><b> pop dx</b></p><p><b> pop ax</b></p><p><b> i
36、ret</b></p><p> IEnter endp</p><p> IInit proc ;8259A初始化子程序</p><p> mov dx, CS8259A</p><p> mov al, ICW1 </p><p> ou
37、t dx, al ;寫控制字ICW1 </p><p> mov dx, CS8259B</p><p> mov al, ICW2</p><p> out dx, al ;寫控制字ICW2</p><p> mov al, ICW4</p>&l
38、t;p> out dx, al ;寫控制字ICW4 </p><p> mov al, OCW1</p><p> out dx, al ;寫控制字OCW1</p><p><b> ret</b></p><p> IInit endp
39、 ;初始化結束 </p><p> TestKey proc near</p><p> mov dx, OUTBIT</p><p> mov al, 0</p><p> out dx, al ; 輸出線置為0</p><p> mov d
40、x, IN_KEY</p><p> in al, dx ; 讀入鍵狀態(tài)</p><p><b> not al</b></p><p> and al, 0fh ; 高四位不用</p><p><b> ret</b></p><p&
41、gt; TestKey endp</p><p> GetKey proc near</p><p> mov ch, 00100000b</p><p> mov cl, 6</p><p><b> KLoop:</b></p><p> mov dx, OUTBIT&
42、lt;/p><p> mov al, ch ; 找出鍵所在列</p><p><b> not al</b></p><p> out dx, al</p><p> shr ch, 1</p><p> mov dx, IN_KEY</p>
43、;<p> in al, dx</p><p><b> not al</b></p><p> and al, 0fh</p><p> jne Goon_ ; 該列有鍵入</p><p><b> dec cl</b></p>
44、;<p> jnz KLoop</p><p> mov cl, 0ffh ; 沒有鍵按下, 返回 0ffh</p><p> jmp Exit1</p><p><b> Goon_:</b></p><p><b> dec cl</b></p
45、><p> shl cl, 2 ; 鍵值 = 列 X 4 + 行</p><p> mov ch, 4</p><p><b> LoopC:</b></p><p> test al, 1</p><p> jnz Exit1</p><p&g
46、t; shr al, 1</p><p><b> inc cl</b></p><p><b> dec ch</b></p><p> jnz LoopC</p><p><b> Exit1:</b></p><p>
47、mov dx, OUTBIT</p><p> mov al, 0</p><p> out dx, al</p><p> mov ch, 0</p><p> mov bx, offset KeyTable</p><p> add bx, cx</p><p&
48、gt; mov al, [bx] ; 取出鍵碼</p><p> mov bl, al</p><p> WaitRelease:</p><p> mov dx, OUTBIT</p><p> mov al, 0</p><p> out dx, al
49、 ; 等鍵釋放</p><p> mov ah, 10</p><p> call Delay</p><p> call TestKey</p><p> jne WaitRelease</p><p> mov al, bl</p><p><b>
50、; ret</b></p><p> GetKey endp</p><p> start proc near ;主程序</p><p> mov ax, data</p><p> mov ds, ax</p><p> mov Hour, 24 ;分別給時,分,
51、秒賦初值</p><p> mov Minute, 60</p><p> mov Second, 60</p><p> cli ;關中斷</p><p> mov ax, 0</p><p> mov ds, ax ;數(shù)據(jù)段段地址為0</p>
52、;<p> mov al, 76h; 01110110B ;初始化8253 計數(shù)器1,16位,方式3,二進制</p><p> mov dx, CONTROL</p><p> out dx, al</p><p> mov ax, 62500</p><p> mov dx, COUNT1<
53、;/p><p> out dx, al ; 計數(shù)器低字節(jié)</p><p> mov al, ah</p><p> out dx, al ; 計數(shù)器高字節(jié)</p><p> mov al, MD8255</p><p> mov dx, CT
54、L8255</p><p> out dx, al</p><p> mov bx, 4*ICW2 ; 中斷號</p><p> mov ax, code ;獲取中斷向量段地址cs值 </p><p> shl ax, 4 ; x 16</p&
55、gt;<p> add ax, offset IEnter ; 中斷入口地址(段地址為0)</p><p> mov [bx], ax</p><p> mov ax, 0</p><p><b> inc bx</b></p><p><b> inc bx&l
56、t;/b></p><p> mov [bx], ax ; 將cs:ip的地址附給中斷向量[bx+2]:[bx]</p><p> call IInit ;初始化8259 </p><p> mov ax, data</p><p> mov ds, ax<
57、;/p><p> mov CNT, 0 ; 計數(shù)值初始為0</p><p> mov al, CNT</p><p> mov dx, PA8255</p><p> out dx, al</p><p><b> sti</b></p>
58、<p> LP: call TestKey ;判斷是否簡易鍵盤是否有鍵入,有則轉至</p><p> ;set,無則往下執(zhí)行 </p><p> jnz Set ; 等待中斷,并計數(shù)。</p><p> mov al, Hour
59、 ;把時鐘時數(shù)為10位和個位</p><p> mov ah, 0</p><p> mov cl, 10</p><p><b> div cl</b></p><p> mov ch, ah</p><p> mov ah, 0
60、 ;把時數(shù)的十位數(shù)送到數(shù)據(jù)緩沖區(qū)</p><p> mov bx, offset LEDMAP</p><p> add bx, ax</p><p> mov al, [bx]</p><p> mov LEDBuf, al</p><p> mov bx, offse
61、t LEDMAP ;把時數(shù)的個位數(shù)送到數(shù)據(jù)緩沖區(qū)</p><p> mov al, ch</p><p> mov ah, 0</p><p> add bx, ax</p><p> mov al, [bx]</p><p> or al, 80h</p>&
62、lt;p> mov LEDBuf+1, al</p><p> mov al, Minute</p><p> mov ah, 0</p><p> mov cl, 10</p><p><b> div cl</b></p><p> mov ch,
63、 ah</p><p> mov ah, 0</p><p> mov bx, offset LEDMAP</p><p> add bx, ax</p><p> mov al, [bx]</p><p> mov LEDBuf+2, al</p><p> m
64、ov bx, offset LEDMAP</p><p> mov al, ch</p><p> mov ah, 0</p><p> add bx, ax</p><p> mov al, [bx]</p><p> or al, 80h</p><p>
65、 mov LEDBuf+3, al</p><p> mov al, Second</p><p> mov ah, 0</p><p> mov cl, 10</p><p><b> div cl</b></p><p> mov ch, ah</
66、p><p> mov ah, 0</p><p> mov bx, offset LEDMAP</p><p> add bx, ax</p><p> mov al, [bx]</p><p> mov LEDBuf+4, al</p><p> mov bx,
67、 offset LEDMAP</p><p> mov al, ch</p><p> mov ah, 0</p><p> add bx, ax</p><p> mov al, [bx]</p><p> or al, 80h</p><p> mov
68、LEDBuf+5, al</p><p> call DisplayLED ;調用LED數(shù)碼管數(shù)據(jù)顯示子程序,使上面的數(shù)值顯示出來 </p><p><b> jmp LP</b></p><p> Set: call GetKey</p><p> cmp al,07h</p&g
69、t;<p><b> jz pause</b></p><p> cmp al,08h</p><p> jz contiue</p><p> cmp al,09h</p><p><b> jz Reset</b></p><p><b
70、> jmp LP</b></p><p> pause: CLI</p><p><b> jmp LP</b></p><p> contiue:sti</p><p><b> jmp LP</b></p><p> Reset: cli&l
71、t;/p><p> mov Hour,12</p><p> MOV Minute,0</p><p> MOV Second,0</p><p><b> sti</b></p><p><b> jmp LP</b></p><p> st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論