版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 微機(jī)原理與接口技術(shù)</b></p><p> -----電子鐘實驗</p><p> 2011年1月5日 </p><p><b> 一 實驗任務(wù)及要求</b></p><p><b> 任務(wù):</b></p><p&
2、gt; 1、掌握綜合使用基本輸入輸出設(shè)備、通用接口芯片、專用接口芯片的方法;</p><p> 2 、掌握實時處理程序的編制和調(diào)試方法。</p><p><b> 要求</b></p><p> 設(shè)計一個定時顯示裝置,用實驗儀左側(cè)的六個LED數(shù)碼管顯示時間,時間顯示格式為24小時制。分秒值為59分55秒時開始報時,每秒鐘蜂鳴器鳴叫一聲,
3、到整點報時停止。</p><p> 用小鍵盤控制時鐘的啟停和時鐘的設(shè)置,鍵的定義參見左圖</p><p><b> 鍵值具體定義如下:</b></p><p> G鍵(啟停鍵)—— 程序啟動后,按下該鍵時 鐘啟動; 再次按下該鍵,暫停計時,顯示當(dāng)前時間。</p><p> S鍵(設(shè)置鍵)
4、—— 按下S鍵后,為時鐘設(shè)置時、分、秒初始值。</p><p><b> 二 硬件連線</b></p><p> 鍵盤的控制、LED顯示模塊:采用74系列模塊控制</p><p> 鍵盤的行信號Q_0、Q_1、Q_2、Q_3分別與開放的輸入信號Q0、Q1、Q2、Q3相連,鍵盤的列信號P_0、P_1、P_2和開放的輸出信號P0、P1、P2相
5、連。74芯片的片選信號CS1接地址譯碼信號340H, CS2接地址譯碼信號360H。</p><p> 時間的精確定時:用8254定時器0產(chǎn)生25ms的中斷信號;</p><p> 8254的片選CS連地址輸出端320H,A0,A1分別連地址總線A2,A3,GATE0連+5V,CLK0連74LS393分頻輸出的47K輸出端,OUT0連接到8259的IRQ0</p><
6、;p> 整點報時控制:由8255模塊控制;</p><p> PC0直接與蜂鳴器相連,CS_4連接到實驗儀中部的地址輸出端CS_4</p><p> 中斷處理模塊:由8259控制</p><p> 8259的片選CS-1連地址輸出300H, INT1連總線輸入INTR,8259模塊的INT-A連總線的INTA,8259的SP/1連+5V。</p&
7、gt;<p><b> 三、程序流程圖</b></p><p><b> 主程序</b></p><p> 初始化各段寄存器及相關(guān)變量</p><p> 初始化8255、8254、8259芯片</p><p> 設(shè)置中斷向量,開放8259中斷屏蔽</p><
8、;p><b> 開放處理器中斷</b></p><p><b> 中斷服務(wù)程序</b></p><p><b> 保護(hù)現(xiàn)場</b></p><p> 判斷時間是否不小于59分55秒</p><p><b> 報時</b></p>
9、<p><b> 掃描鍵盤</b></p><p><b> G鍵?</b></p><p><b> 調(diào)用啟停子程序</b></p><p><b> S鍵?</b></p><p><b> 調(diào)用設(shè)置時間子程序<
10、/b></p><p><b> COUNT加1</b></p><p><b> COUNT=40?</b></p><p> 修改時間,調(diào)用ADDONE子程序</p><p><b> COUNT清0</b></p><p> 顯示時
11、間,調(diào)用顯示時間子程序</p><p> 結(jié)束中斷(發(fā)EOI命令)</p><p><b> 恢復(fù)現(xiàn)場</b></p><p><b> 中斷返回</b></p><p><b> 四、實驗源代碼</b></p><p><b> .
12、486p </b></p><p> DATA SEGMENT AT 0 USE16</p><p><b> ORG 1000H</b></p><p><b> HOUR DW ?</b></p><p><b> MIN DW ?</b><
13、;/p><p><b> SEC DW ?</b></p><p> STO DB ?</p><p> COUNT DB ?</p><p> DATA ENDS</p><p> CODE SEGMENT USE16 </p><p> ASSUME
14、 CS:CODE,DS:DATA</p><p> ORG 1500H </p><p> BEG: JMPSTART</p><p> TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,00H ;0~F的共陰極七段譯碼表 00H表示不顯示任何東西</p><p&g
15、t; KEYCOD DB 0EEH,0DEH,0BEH,0EDH,0DDH,0BDH,0EBH,0DBH,0BBH,0E7H,0D7H,0B7H ;行列編碼值</p><p> KEYVAL DB 0,1,2,3,4,5,6,7,8,9,0AH,0BH ;所有鍵的鍵面值</p><p> PORT1 EQU340H ;數(shù)碼管段選端口</p><p>
16、; PORT2 EQU360H ;數(shù)碼管位選端口,鍵盤矩陣的行列端口</p><p> START: MOVEAX,60000000H</p><p> MOV CR0,EAX </p><p> MOV AX,DATA</p><p> MOV DS,AX</p><p> MOV HO
17、UR,0203H ;小時分鐘以及秒的初始化</p><p> MOV MIN,0509H</p><p> MOV SEC,0502H</p><p> LEA BX,TAB</p><p> MOV STO,0 ;開始暫停標(biāo)志位置0&
18、lt;/p><p> MOV COUNT ,0 ;中斷次數(shù)計數(shù)初始值為0</p><p> ;8255初始化 ,用于產(chǎn)生報時的脈沖 </p><p> MOV DX,20FH ;利用左四的8255,控制口為20F
19、H</p><p> MOV AL,10000000B ;C口輸出</p><p> OUT DX,AL</p><p> MOV DX,20BH ;C0輸出1,蜂鳴器不響</p><p> MOV AL,0FFH</p><
20、p> OUT DX,AL </p><p> ;8254初始化,用于產(chǎn)生周期為25ms的中斷</p><p> MOV AL,00110110B ;計數(shù)器0,先低后高,方式三,二進(jìn)制</p><p> MOV DX,32cH ;寫往控制口</p>&l
21、t;p> OUT DX,AL</p><p> MOV DX,320H ;計數(shù)器0寫初值:47KHz*25ms</p><p> MOV AX,1175</p><p> OUT DX,AL</p><p> MOV AL,AH</p><p> O
22、UT DX,AL</p><p><b> ;8259初始化</b></p><p> CLI :關(guān)中斷</p><p> MOV DX,300H ;ICW1</p><p> MOV AL,00010
23、011B</p><p> OUT DX,AL</p><p> MOV DX,308H ;ICW2</p><p> MOV AL,08H ;IR0中斷類型號為08H</p><p> OUT DX,AL</p><p&
24、gt; MOV AL,00000001B ;ICW4</p><p><b> OUT DX,AL</b></p><p> MOV AL,0FEH ;IR0開屏蔽</p><p><b> OUT DX,AL</b></p>
25、<p> XOR AX,AX ;裝載中斷向量</p><p><b> MOV ES,AX</b></p><p> MOV DI,08H*4</p><p> MOV AX,OFFSET INTSR</p><p> MOV ES:[DI],AX<
26、;/p><p> MOV AX,SEG INTSR</p><p> MOV ES:[DI+2],AX</p><p> STI ;開中斷</p><p><b> JMP $</b></p><p> INTSR PROC
27、 ;中斷服務(wù)程序</p><p> CMP MIN,0509H ;比較當(dāng)前時間是否在59分55秒~00分00秒之間</p><p> JL NEXT1</p><p> CMP SEC,0505H</p><p> JL NEXT1</p><
28、;p> MOV DX,20BH</p><p> MOV AL,00H ;蜂鳴器低有效,報時</p><p> OUT DX,AL</p><p> JMP NEXT2</p><p> NEXT1: CMP MIN,0</p><p> JNE NEXT3&
29、lt;/p><p> CMP SEC,0</p><p> JNE NEXT3</p><p> MOV DX,20BH</p><p> MOV AL,00H ;蜂鳴器低有效,報時</p><p> OUT DX,AL</p><p> JMP NE
30、XT2</p><p> NEXT3: MOV DX,20BH </p><p> MOV AL,0FFH</p><p> OUT DX,AL</p><p> NEXT2: CMP COUNT,20 ;用8255產(chǎn)生0.5ms的蜂鳴</p><p> JLE N
31、EXT4</p><p> MOV DX,20BH</p><p> MOV AL,0FFH</p><p> OUT DX,AL</p><p> NEXT4: CALL KEYCHECK ;檢測有無鍵按下</p><p> CMP AL,0AH ;啟停鍵
32、按下,調(diào)用啟停程序</p><p> JNZ NEXT5</p><p> CALL TSTART</p><p> JMP NEXT6</p><p> NEXT5: CMP AL,0BH ;設(shè)置鍵按下,調(diào)用設(shè)置時間程序</p><p> JNZ NEXT6</
33、p><p> CALL SETTIME</p><p> NEXT6: INC COUNT ;當(dāng)COUNT直為40時,加一秒,之后置0</p><p> CMP COUNT,40 ;25ms*40=1s</p><p> JB NEXT7</p><p&g
34、t; CALL ADDONE</p><p> MOV COUNT,0</p><p> NEXT7: CALL SHOW ;顯示時間</p><p> MOV AL,20H ;發(fā)EOI命令,結(jié)束中斷</p><p> MOV DX,300H</p><p>
35、; OUT DX,AL</p><p><b> IRET</b></p><p> INTSR ENDP</p><p> TSTART PROC ;控制暫停和開始</p><p> CMP STO,00H</p><p><b&
36、gt; JNE LL1</b></p><p><b> DEC STO</b></p><p><b> JMP LL2</b></p><p> LL1: INC STO</p><p> LL0: CALL KEYCHECK</p>
37、<p> CMP AL,0AH</p><p><b> JZ LL2</b></p><p> CALL SHOW</p><p><b> JMP LL0</b></p><p> LL2: RET</p><p> TSTART
38、ENDP</p><p> ADDONE PROC ;加1秒子程序</p><p> MOV AX,SEC ;當(dāng)前秒個位為9,加1后變0,十位加1</p><p><b> CMP AL,9</b></p><p><b> JE N1<
39、/b></p><p><b> INC AL</b></p><p> MOV SEC,AX</p><p><b> JMP N6</b></p><p> N1: INC AH</p><p> MOV AL,0 </p>
40、;<p> CMP AH,6 ;十位加1后為6,則秒變?yōu)?0,分鐘個位加1</p><p><b> JE N2</b></p><p> MOV SEC,AX</p><p><b> JMP N6</b></p><p> N2:
41、 MOV AX,0</p><p> MOV SEC,AX</p><p> MOV AX,MIN ; 當(dāng)前分鐘個位為9,加1后變0,十位加1</p><p><b> CMP AL,9</b></p><p><b> JE N3</b></p>&l
42、t;p><b> INC AL</b></p><p> MOV MIN,AX</p><p><b> JMP N6</b></p><p> N3: INC AH</p><p><b> MOV AL,0</b></p>&l
43、t;p> CMP AH,6 ;十位加1后為6,則分鐘變?yōu)?0,小時個位加1</p><p><b> JE N4</b></p><p> MOV MIN,AX</p><p><b> JMP N6</b></p><p> N4: MOV
44、 AX,0</p><p> MOV MIN,AX</p><p> MOV AX,HOUR</p><p><b> INC AL</b></p><p> CMP AX,0204H ;小時加1后與24比,相等,則變?yōu)?</p><p><b>
45、; JE N5</b></p><p> MOV HOUR,AX</p><p><b> JMP N6</b></p><p> N5: MOV AX,0</p><p> MOV HOUR,AX</p><p> N6: RET</p
46、><p> ADDONE ENDP</p><p> SETTIME PROC ;設(shè)置時間子程序</p><p> LEA BX,TAB</p><p> MOV HOUR,0</p><p> MOV MIN,0</p><p>
47、MOV SEC,0</p><p><b> NOP</b></p><p><b> NOP</b></p><p> L1: CALL KEYCHECK ;調(diào)用KEYCHECK,無鍵按下時,AL中值為0CH</p><p> CALL DELAY</p&g
48、t;<p> CMP AL,0CH</p><p><b> JNZ L2</b></p><p><b> JMP L1</b></p><p> L2: CMP AL,02H</p><p> JG L1 ;設(shè)置小時十位時,將其他各位數(shù)
49、碼管滅掉及對應(yīng)的七段譯碼表0CH</p><p> MOV AH,AL</p><p> MOV BYTE PTR[HOUR+1],AL</p><p> MOV BYTE PTR[HOUR],0CH</p><p> MOV MIN,0C0CH</p><p> MOV SEC,0C0CH<
50、/p><p> L3: CALL SHOW</p><p> CALL KEYCHECK ;設(shè)置小時的個位</p><p> CALL DELAY</p><p> CMP AL,0CH</p><p><b> JZ L3</b></p><
51、p> MOV AH,BYTE PTR[HOUR+1]</p><p> L4: CMP AX,0204H </p><p><b> JGE L1</b></p><p> MOV HOUR,AX</p><p> L5: CALL SHOW</p&g
52、t;<p> CALL KEYCHECK ;設(shè)置分鐘的十位</p><p> CALL DELAY</p><p> CMP AL,0CH</p><p><b> JZ L5</b></p><p> L6: CMP AL,06H</p><p>
53、;<b> JGE L1</b></p><p> MOV AH,AL</p><p> MOV BYTE PTR[MIN+1],AL</p><p> L7: CALL SHOW</p><p> CALL KEYCHECK ;設(shè)置分鐘的個位</p><p&
54、gt; CALL DELAY</p><p> CMP AL,0CH</p><p><b> JZ L7</b></p><p> MOV AH,BYTE PTR[MIN+1]</p><p> L8: CMP AX,0509H</p><p><b>
55、; JG L1</b></p><p> MOV MIN,AX</p><p> L9: CALL SHOW</p><p> CALL KEYCHECK ;設(shè)置秒的十位</p><p> CALL DELAY</p><p> CMP AL,0CH</p&
56、gt;<p> JZ L9 </p><p> L10: CMP AL,06H</p><p><b> JGE L1</b></p><p> MOV AH,AL</p><p> MOV BYTE PTR[SEC+1],AL</p><
57、p> L11: CALL SHOW</p><p> CALL KEYCHECK ;設(shè)置秒的個位</p><p> CALL DELAY</p><p> CMP AL,0CH</p><p><b> JZ L11</b></p><p> MOV
58、 AH,BYTE PTR[SEC+1]</p><p> L12: CMP AX,0509H</p><p><b> JG L1</b></p><p> MOV SEC,AX</p><p> L13: CALL SHOW </p><p&
59、gt; CALL KEYCHECK ;再次按鍵,啟動計時</p><p> CALL DELAY</p><p> CMP AL,0CH</p><p><b> JZ L13</b></p><p><b> RET</b></p><p>
60、SETTIME ENDP</p><p> KEYCHECK PROC ;判斷有無鍵按下子程序</p><p><b> PUSH BX</b></p><p> CALL CLEAR</p><p> MOVDX,PORT2 </p>
61、;<p> INAL,DX </p><p> ANDAL,0FH</p><p> CMPAL,0FH </p><p> JZEXIT ;有按鍵按下,延時消抖</p><p><b> NOP</b></p><p> NO
62、P </p><p> ;再次確認(rèn)是否有鍵按下</p><p><b> INAL,DX</b></p><p> ANDAL,0FH</p><p> CMP AL,0FH</p><p><b> JZEXIT</b&g
63、t;</p><p> ;開始對每一列進(jìn)行逐行掃描</p><p> MOVCX,3 </p><p> MOVBL,0FEH</p><p> NEXT:MOVAL,BL</p><p> MOVDX,PORT2</p><p><b> OUTDX
64、,AL</b></p><p><b> NOP</b></p><p><b> NOP</b></p><p><b> INAL,DX</b></p><p> AND AL,0FH</p><p> CMP
65、 AL,0FH</p><p> JNZ KEY</p><p><b> ROLBL,1 </b></p><p> LOOP NEXT </p><p> JMP EXIT</p><p> KEY: SHL BL,4 </p>&l
66、t;p> OR AL,BL ;形成一個字節(jié)的鍵碼信息存入AL,高4位為列信息低4位為行信息</p><p> LEA SI,KEYCOD</p><p> LEA DI,KEYVAL </p><p> MOV CX,12</p><p> NEXT11: CMP AL,[SI]&l
67、t;/p><p> JZ FIND</p><p> INC SI</p><p> INC DI</p><p> LOOP NEXT11 </p><p> JMP EXIT</p><p> FIND: MOV AL,[DI]
68、;AL中內(nèi)容為所按鍵的鍵面值 </p><p><b> PUSH AX</b></p><p><b> NOP</b></p><p><b> NOP</b></p><p> WAIT1: IN AL,DX ;判斷按鍵是否已釋放,若無則等
69、待</p><p> AND AL,0FH</p><p> CMP AL,0FH</p><p> JNZ WAIT1</p><p> POP AX</p><p> JMP EXIT2</p><p> EXIT:MOV AL
70、,0CH</p><p><b> EXIT2:NOP</b></p><p> POP BX </p><p><b> RET</b></p><p> KEYCHECK ENDP</p><p> SHOW PROC ;顯示時間&l
71、t;/p><p> MOV AX,HOUR</p><p><b> XLAT</b></p><p> MOV DX,PORT1 ;段選輸出數(shù)據(jù)</p><p> OUT DX,AL</p><p> MOV DX,PORT2 ;位選輸出小時的個
72、位</p><p> MOV AL,0C2H</p><p> OUT DX,AL</p><p> CALL DELAY</p><p> CALL CLEAR </p><p> MOV AL,AH </p><p><b&g
73、t; XLAT</b></p><p> MOV DX,PORT1 ;段選輸出數(shù)據(jù)</p><p> OUT DX,AL</p><p> MOV DX,PORT2 ;位選輸出小時的十位</p><p> MOV AL,0C1H</p><p>
74、OUT DX,AL</p><p> CALL DELAY</p><p> CALL CLEAR</p><p> MOV AX,MIN</p><p><b> XLAT</b></p><p> MOV DX,PORT1 ;段選輸出數(shù)據(jù)</p>
75、;<p> OUT DX,AL </p><p> MOV DX,PORT2 ;位選輸出分鐘的個位</p><p> MOV AL,0C8H</p><p> OUT DX,AL</p><p> CALL DELAY</p><p> C
76、ALL CLEAR</p><p> MOV AL,AH</p><p><b> XLAT</b></p><p> MOV DX,PORT1 ;段選輸出數(shù)據(jù)</p><p> OUT DX,AL</p><p> MOV DX,PORT2 ;
77、位選輸出分鐘的十位</p><p> MOV AL,0C4H</p><p> OUT DX,AL</p><p> CALL DELAY</p><p> CALL CLEAR</p><p> MOV AX,SEC</p><p><b> XLAT</b
78、></p><p> MOV DX,PORT1 ;段選輸出數(shù)據(jù)</p><p> OUT DX,AL </p><p> MOV DX,PORT2 ;位選輸出秒的個位</p><p> MOV AL,0E0h</p><p><b> OUT DX,AL
79、</b></p><p> CALL DELAY</p><p> CALL CLEAR</p><p> MOV AL,AH</p><p><b> XLAT </b></p><p> MOV DX,PORT1 ;段選輸出數(shù)據(jù)</p&g
80、t;<p> OUT DX,AL</p><p> MOV DX,PORT2 ;位選輸出秒的十位</p><p> MOV AL,0D0H</p><p> OUT DX,AL</p><p> CALL DELAY</p><p> CALL CLEAR<
81、;/p><p><b> RET</b></p><p> SHOW ENDP</p><p> DELAY PROC ;延時子程序</p><p><b> PUSH CX</b></p><p> MOV CX,1000&
82、lt;/p><p><b> LOOP $</b></p><p><b> POP CX</b></p><p><b> RET</b></p><p> DELAY ENDP</p><p> CLEAR PROC
83、 ;使七段譯碼管全滅子程序</p><p> MOV AL,00H</p><p> MOV DX,PORT1</p><p> OUT DX,AL</p><p> MOV DX,PORT2</p><p> OUT DX,AL</p><p><b&
84、gt; NOP</b></p><p><b> NOP</b></p><p><b> RET</b></p><p> CLEAR ENDP</p><p><b> CODEENDS</b></p><p><b&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)接口電子鐘課程設(shè)計報告
- 微機(jī)原理課程設(shè)計-電子鐘
- 微機(jī)原理-電子鐘課程設(shè)計
- 電子鐘課程設(shè)計報告——微機(jī)原理與接口技術(shù)
- 微機(jī)原理課程設(shè)計--智能電子鐘
- 【微機(jī)原理課程設(shè)計】電子鐘的設(shè)計
- 微機(jī)原理課程設(shè)計----簡單電子鐘設(shè)計
- 微機(jī)原理-多功能電子鐘課程設(shè)計
- 微機(jī)原理課程設(shè)計---電子鐘的設(shè)計報告
- 電子鐘課程設(shè)計----數(shù)字電子鐘的設(shè)計
- eda電子鐘課程設(shè)計----電子鐘的設(shè)計
- 電子鐘課程設(shè)計
- 電子鐘課程設(shè)計--多功能電子鐘
- 電子鐘課程設(shè)計
- 電子鐘課程設(shè)計
- eda課程設(shè)計-電子鐘
- 自動電子鐘課程設(shè)計
- 數(shù)字電子鐘課程設(shè)計
- 課程設(shè)計-- 智能電子鐘
- 數(shù)字電子鐘課程設(shè)計
評論
0/150
提交評論