第一篇:微機(jī)原理課程設(shè)計(電子密碼鎖)
一、設(shè)計目的
通過課程設(shè)計掌握控制系統(tǒng)設(shè)計的一般步驟,掌握系統(tǒng)總體控制方案的設(shè)計方法、8086微型計算機(jī)的應(yīng)用方法、控制算法的設(shè)計及硬件設(shè)計方法。復(fù)習(xí)并學(xué)習(xí)用軟件編程控制硬件。了解和掌握8086微機(jī)應(yīng)用系統(tǒng)的軟硬件設(shè)計過程、方法及實現(xiàn),為以后設(shè)計實現(xiàn)8086微機(jī)應(yīng)用系統(tǒng)打下良好的基礎(chǔ)。
二、設(shè)計任務(wù)與要求
(1)密碼鎖在輸入密碼正確時控制電控鎖開啟,同時顯示00字樣;當(dāng)輸入密碼錯誤時,發(fā)出錯誤警告,并顯示FF字樣;當(dāng)3次誤碼輸入時,產(chǎn)生報警;具有密碼修改的功能。
(2)選用8086和適當(dāng)?shù)拇鎯ζ骷敖涌谛酒瓿上鄳?yīng)的功能,用LED顯示器顯示電子鎖的當(dāng)前狀態(tài);畫出詳細(xì)的硬件連接圖;給出程序設(shè)計思路、畫出軟件流程圖;給出所有程序清單并加上必要注釋;完成設(shè)計說明書(包括封面、目錄、設(shè)計任務(wù)書、硬件設(shè)計思路、硬件原理圖、軟件設(shè)計思路、程序流程框圖、程序清單、所用器件型號、總結(jié)體會、參考文獻(xiàn)等)。
三、整體功能描述
本設(shè)計為多功能密碼鎖,使用存儲器保存密碼防止斷電后密碼丟失。工作時按下按鍵蜂鳴器會發(fā)出聲音提示按鍵有效并在數(shù)碼管有“--”閃爍字樣,若相隔1分鐘無按鍵按下,則清零。在輸入密碼正確的條件下輸出開鎖電平,控制電控鎖開啟,同時顯示OPEN字樣。開鎖后可按下“復(fù)位/修改密碼鍵”實現(xiàn)修改密碼功能的轉(zhuǎn)入,之后先輸入密碼再輸入同樣的密碼確認(rèn)才可成功修改,修改成功后蜂鳴器會發(fā)出三聲,數(shù)碼管“00”閃爍三次提示修改密碼成功。當(dāng)輸入密碼錯誤時,發(fā)出錯誤警告聲音,同時顯示CLOSE字樣,當(dāng)輸入密碼錯誤次數(shù)累積夠3次后,蜂鳴器會產(chǎn)生90秒的報警聲響進(jìn)行報警。
四、總體設(shè)計方案
根據(jù)本次設(shè)計的設(shè)計目的及設(shè)計要求,可有下列兩種方案: 4.1 方案一
在本次設(shè)計中,因為密碼鎖的基本功能使可以判斷密碼是否正確,以及完成對密碼的修改,所以需要用到輸入設(shè)備以及CPU的接口電路以及相關(guān)存儲設(shè)備;因為有報警提示功能,所以要用到相關(guān)的輸出設(shè)備以及接口電路。因為要完成邏輯運算功能,所以必須要有CPU,CPU就選用我們最常用也最熟悉的8086,考慮到8255的端口兼具輸入輸出功能,靈活方便,所以選用一片8255作為輸入輸出設(shè)備與8086間的借口;采用0到9數(shù)字按鍵以及相關(guān)功能選擇的輸入;輸出設(shè)備方面,采用兩位數(shù)碼管實現(xiàn)題目的狀態(tài)提示要求,用一個蜂鳴器作為相關(guān)的警報,提示的聲音輸出。另外,為簡化編程,采用8259中斷控制器來觸發(fā)中斷實現(xiàn)密碼鎖工作模式的轉(zhuǎn)換,其中的密碼輸入及判斷功能與密碼修改功能分別用兩個外部中斷來觸發(fā)中斷服務(wù)程序來實現(xiàn)。本設(shè)計的密碼位數(shù)為6位。4.2 方案二
第1頁
用匯編語言編寫程序?qū)崿F(xiàn)應(yīng)用程序的功能,從而實現(xiàn)簡易計算器匯編程序的設(shè)計與實現(xiàn)。4.2.1使用設(shè)備
含有Windows匯編編譯環(huán)境的MASM軟件及Office 2003軟件的計算機(jī)一臺。4.2.2匯編程序編寫
匯編程序編寫,根據(jù)設(shè)計要求編寫實現(xiàn)該功能的源程序代碼。4.2.3使用方法
在masm環(huán)境下運行本程序,按提示輸入正確密碼,則在屏幕上顯示00字樣,否則顯示FF字樣。
五、硬件設(shè)計
本設(shè)計使用了8086、8259A、8255、8253、2764、74LS138、74LS148、地址鎖存器、數(shù)碼管以及74系列邏輯門、蜂鳴器、開關(guān)等芯片與元器件,實現(xiàn)了鍵盤輸入、中斷控制、計時、按鍵響應(yīng)、開鎖及報警等功能模塊,其硬件連接框圖如圖1所示。
圖1 硬件連接框圖
5.1 鍵盤
本設(shè)計8255A的A口與兩片級聯(lián)的74LS148組合接用于輸入鍵盤,實現(xiàn)對輸入鍵號的讀入。工作時,8086通過程序掃描鍵盤,當(dāng)無鍵盤按下時,74LS148工作于無輸入狀態(tài),GS口輸出高電平,接到PA4作為識別有無按鍵按下信號,PA口輸入為10H;當(dāng)有按鍵輸入時,74LS148輸入口接到低電平,輸入有效,經(jīng)編碼后鍵號轉(zhuǎn)換為相應(yīng)二進(jìn)制編碼送到PA口,成為能為CPU識別的代表鍵值的有效信號。讀入的按鍵信號經(jīng)8086判斷后,根據(jù)不同的功能,輸出不同的按鍵響
第2頁
應(yīng),并轉(zhuǎn)移到相對應(yīng)的功能服務(wù)程序。
本設(shè)計總共用到11位按鍵,包括10位數(shù)碼輸入按鍵及一位“復(fù)位/修改密碼”按鍵,電路設(shè)計總共可用按鍵有16位,供升級功能使用。鍵盤電路如下圖2所示:
5.2 中斷控制
用一片8259A芯片作為中斷控制接口電路。其中IR0與IR1中斷開放,單片工作于非緩沖方式,電平觸發(fā),優(yōu)先級是普通全嵌套方式。可通過編程開中斷,通過編程或者8253計時器關(guān)中斷。電路連接如圖3所示:
圖2 鍵盤連接圖
5.3 計時
采用8253計時器控制中斷的關(guān)斷,實現(xiàn)單次輸入密碼超時則退出輸入密碼中斷子程序、報警器響鈴時間控制等功能。電路如圖3所示。
第3頁
圖3 中斷控制器連接圖
5.4 輸入輸出接口
輸入輸出接口采用可編程的8255A,8255A是Intel系列的并行接口芯片,常作為微機(jī)系統(tǒng)與外部設(shè)備接口。在連接電路時8255 的PC0、PC1接到數(shù)碼管片選,電路連接如圖3所示。同時用8255A的B口控制數(shù)碼管的顯示,C口片PC0、PC1選數(shù)碼管,PC2用來驅(qū)動SPEAK發(fā)出報警電路如圖4所示。
圖4 按鍵響應(yīng)、報警、開鎖功能電路
第4頁
5.5.儲存器及片選電路
存儲器及片選電路采用一片2764存儲器和一片74LS138,連接電路如圖5所示:
圖5 片選及存儲器電路
5.6 整機(jī)電路圖:見附錄一
六、軟件設(shè)計
6.1 程序流程圖
第5頁
開始程序初始化8255.8259初始化從RAM存儲器中讀出密碼 定義DI.SI指針開中斷data2與data3數(shù)據(jù)串比較相等?N錯誤計數(shù)器加1開鎖,并顯示00掃描鍵盤,有修改密碼鍵?Y定義SI,DI指針開中斷,實現(xiàn)密碼輸入轉(zhuǎn)存到data2有修改密碼鍵輸入?開中斷,重新輸入密碼比較是否為首次輸入密碼?N轉(zhuǎn)存密碼到RAM 鈴聲確認(rèn)修改密碼成功掃描鍵盤是否有修改密碼鍵輸入Y保持開鎖狀態(tài)結(jié)束錯誤累積超過6次?YN報警響鈴,輸出顯示FF保持關(guān)鎖N結(jié)束Y
圖6 程序流程圖
6.2 程序清單:見附錄二
七、設(shè)計總結(jié)與體會
通過本次課程設(shè)計,我對 8255,8253,8259等芯片的各引腳的功能、名稱、第6頁
工作方式、內(nèi)部結(jié)構(gòu)有了更深層次的掌握,對這三種芯片的編程從陌生轉(zhuǎn)向熟練。通過這次的微機(jī)課程設(shè)計,對書本所學(xué)的知識有了進(jìn)一步的鞏固,并且對三種芯片各自的功能、工作方式有了明確性的區(qū)分。在設(shè)計過程中遇到問題時,遇到含糊不清或者看不懂的地方及時翻閱相關(guān)課本知識。有時看課本也沒有結(jié)果時就和組員互相探討。在設(shè)計過程中,才發(fā)現(xiàn)自己遺漏許多課本的相關(guān)知識,對各芯片的功能及其工作方式掌握的不夠清楚。這說明在實踐中才能真正的掌握從課本中所學(xué)的知識。這次的課程設(shè)計讓我為一年后的畢業(yè)設(shè)計打下了基礎(chǔ)。
八、參考資料
九、附錄
附錄一:電路基本連接圖
第7頁
附錄二:程序清單
(一)DATA SEGMENT;以下代碼寫入RAM
第8頁
CODEIN DB 6 DUP(?);輸入的密碼保存的地址 CODECH DB 6 DUP(?);修改后的密碼的保存地址 CODEOR DB 0,0,0,0,0,0;初始密碼
ORG 01000H;下面的代碼寫入ROM DTABLE DB 80H,02H,10H,3FH,79H,71H,60H,5BH DATA ENDS
STACKS SEGMENT STA DB 20 DUP(?)STACKS ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKS START: MOV SI,OFFSET CODEIN MOV DI,OFFSET CODEOR MOV BP,OFFSET DTABLE
MOV AL,09H;(鍵盤輸入中斷)設(shè)定密碼輸入的中斷向量(即IR0的中斷向量)MOV AH,25H INT 21H PUSH BX PUSH DS MOV DX,SEG INPUT MOV DS,DX MOV DX,OFFSET INPUT INT 21H
MOV AL,09H;(鍵盤輸入中斷)設(shè)定密碼修改的中斷向量(即IR1的中斷向量)MOV AH,25H INT 21H PUSH BX PUSH DS MOV DX,SEG CHANGE MOV DS,DX MOV DX,OFFSET CHANGE INT 21H
MOV AL,1BH;初始化8259 OUT 10H,AL;單片工作,高電平有效 MOV AL,08H OUT 11H,AL MOV AL,03H OUT 11H,AL
第9頁
MOV AL,0FCH OUT 11H,AL;開放IR0,IR1 MOV AL,20H OUT 10H,AL MOV AL,68H OUT 10H,AL
MOV AL,82H;初始化8255 A口方式0輸出,B口方式0輸入,C口輸出 OUT 06H,AL AA: STI MOV AL,00H OUT 04H,AL;
INPUT:;CLI MOV DL,00H IN1: CMP DL,06H;JNZ IN2;
MOV CX,03FFH;R1: MOV DH,3FH MOV AL,02H OUT 00H,AL;R2: DEC DH CMP DH,00H JNZ R2 LOOP R1
JMP IN4;IN2:;MOV AL,[BP+4] OUT 04H,AL;MOV BX,0H MOV CX,03H;IN3: MOV BP,OFFSET DTABLE MOV AL,[BP] OUT 04H,AL;輸出低電平使數(shù)碼管熄滅 密碼輸入程序 判斷是否連續(xù)6次輸入錯誤密碼 若不是這繼續(xù)輸入 使蜂鳴器長鳴報警(通過延時實現(xiàn))輸出高電平使蜂鳴器發(fā)聲 報警完畢,跳至中斷返回 輸入密碼 數(shù)碼管顯示‘--’提示輸入密碼 設(shè)置循環(huán)次數(shù) 數(shù)碼管提示輸入位數(shù)
第10頁
CALL CCSCAN;調(diào)用鍵盤掃描程序 CMP AL,0BH;判斷是否按下返回鍵 JZ IN4 MOV [BX+SI],AL;保存輸入密碼 INC BX INC BP LOOP IN3
MOV BP,OFFSET DTABLE;判斷密碼是否正確 CLD MOV CX,03 MOV SI,OFFSET CODEIN MOV DI,OFFSET CODEOR REPZ CMPSB;JNZ WRO;MOV AL,[BP+3] OUT 04H,AL;MOV AL,04H OUT 00H,AL;XOR DL,AL JMP IN4
WRO:;INC DL MOV AL,[BP+5];OUT 04H,AL MOV CX,03H;W1: MOV AL,02H;OUT 00H,AL
W2:;MOV BL,3FH DEC BL CMP BL,00H JNZ W2 XOR AL,AL;OUT 00H,AL
W3:;MOV BL,3FH DEC BL CMP BL,00H JNZ W3
判斷密碼是否正確 若錯誤就報警 若正確數(shù)碼管就顯示‘00‘且給LED高電平使其點亮 出錯報警部分 數(shù)碼管顯示’FF‘提示錯誤設(shè)定蜂鳴器響的次數(shù) 使蜂鳴器發(fā)聲 延時 輸出低電平關(guān)蜂鳴器 延時 第11頁
LOOP W1 JMP IN1;中斷返回 IN4: STI IRET
CHANGE:;密碼修改程序 CLI MOV DL,00H INP1: CMP DL,06H JNZ INP2 MOV CX,03FFH RR1: MOV DH,3FH MOV AL,02H OUT 00H,AL RR2: DEC DH
CMP DH,00H JNZ RR2 LOOP RR1 JMP C4 INP2: MOV AL,[BP+4] OUT 04H,AL MOV BX,0000H MOV CX,03H INP3: MOV BP,OFFSET DTABLE MOV AL,[BP] OUT 04H,AL CALL CCSCAN CMP AL,0BH JZ IN4 MOV [BX+SI],AL INC BX INC BP LOOP INP3 MOV BP,OFFSET DTABLE CLD MOV CX,03
第12頁
MOV SI,OFFSET CODEIN MOV DI,OFFSET CODEOR REPZ CMPSB JNZ WRRO MOV AL,[BP+3] OUT 04H,AL XOR DL,DL JMP CHANGE WRRO: INC DL MOV AL,[BP+5] OUT 04H,AL MOV CX,03H WW1: MOV AL,02H OUT 00H,AL WW2: MOV BL,3FH DEC BL CMP BL,00H JNZ WW2 XOR AL,AL OUT 00H,AL WW3: MOV BL,3FH DEC BL CMP BL,00H JNZ WW3 LOOP WW1 JMP INP1;
CHAN:;MOV SI,OFFSET CODEIN MOV DI,OFFSET CODECH
MOV AL,[BP+6];OUT 04H,AL MOV CX,03FFH Y1: LOOP Y1
MOV BP,OFFSET DTABLE MOV BX,0H MOV CX,03H
當(dāng)密碼輸入正確時,轉(zhuǎn)入密碼修改部分修改密碼部分 數(shù)碼管提示第一次輸入 第13頁
C1: MOV AL,[BP] OUT 04H,AL CALL CCSCAN CMP AL,0BH JZ C4 MOV [BX+SI],AL;存放在輸入密碼緩沖區(qū) INC BX INC BP LOOP C1
MOV BP,OFFSET DTABLE MOV AL,[BP+7] OUT 04H,AL;MOV CX,03FFH Y2: LOOP Y2 MOV BP,OFFSET DTABLE MOV BX,0H MOV CX,03H C2: MOV AL,[BP] OUT 04H,AL CALL CCSCAN CMP AL,0BH JZ C4 MOV [BX+DI],AL;INC BX INC BP LOOP C2
MOV BP,OFFSET DTABLE REPZ CMPSB JNZ CHAN;MOV DI,OFFSET CODEOR MOV CX,03H CLD REP MOVSB;MOV AL,02H;OUT 00H,AL MOV CX,03FFH C3: LOOP C3 XOR AL,AL OUT 00H,AL;數(shù)碼管提示第二次輸入 存放在修改密碼緩沖區(qū) 判斷兩次輸入的密碼是否一致若是相等那就保存密碼 且蜂鳴器響一下提示修改成功中斷返回
第14頁
C4: STI IRET
CCSCAN PROC NEAR;鍵盤掃描子程序 MOV AL,00H OUT 00H,AL IN AL,02H NOT AL AND AL,0FH CMP AL,00H;JNZ K1 JMP CCSCAN K1: MOV CX,0EFFH;LOOP K1
IN AL,02H CMP AL,00H JZ CCSCAN MOV AH,60H;K2: MOV AL,AH OUT 00H,AL IN AL,02H NOT AL AND AL,0FH CMP AL,00H;JNZ K3 OR AH,01H ROR AH,1;AND AH,0FH JMP K2 K3: ADD AL,AH RET CCSCAN ENDP CODE ENDS END START
程序清單
(二)利用DOS調(diào)用顯示DATA SEGMENT TABLE DB '888'
判斷是否有鍵按下延時 掃描第一列 判斷是否有鍵按下掃描下一列 第15頁
STRING1 DB 'Please enter a passward:',0DH,0AH,'$' STRING2 DB 'Wrong!',0DH,0AH,'$' STRING3 DB 'OPEN!','$' STRING4 DB 'CLOSE!','$' BUFFER DB 40,?,40 DUP(0)TAB_LEN EQU 26 DATA ENDS;STACK SEGMENT DB 100 DUP(0)STACK ENDS;CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,STRING1 MOV AH,09H INT 21H LEA DX,BUFFER
MOV AH,0AH INT 21H MOV SI,DX INC SI MOV BL,[SI] MOV BH,0 INC SI LEA DI,TABLE MOV CX,TAB_LEN CMP CX,BX JNC GOON LEA DX,STRING2 JMP EXIT GOON: CLD MOV AL,[SI] SCAN:REPNZ SCASB JZ MATCH ERROR: LEA DX,STRING4 JMP EXIT MATCH: INC CX CMP CX,BX
第16頁
JC ERROR PUSH CX PUSH SI PUSH DI MOV CX,BX DEC DI REPZ CMPSB POP DI POP SI POP CX JZ FOUND JCXZ ERROR JMP SCAN FOUND: DEC DI LEA DX,STRING3 EXIT:MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START
第17頁
第二篇:微機(jī)原理課程設(shè)計++多功能密碼鎖
微機(jī)原理課程設(shè)計報告
學(xué)院:
專業(yè): 班級: 姓名:
指導(dǎo)老師:
設(shè)計任務(wù):多功能密碼鎖
目錄
一、設(shè)計目標(biāo)
二、設(shè)計要求
三、整體功能描述
四、硬件設(shè)計功能模塊 1.鍵盤 2.中斷控制 3.計時 4.按鍵響應(yīng) 5.報警 6.儲存器及片選 7.整機(jī)電路
五、程序流程圖
六、程序清單
七、設(shè)計總結(jié)
一、設(shè)計目標(biāo)
1.密碼鎖在輸入密碼正確的條件下輸出開鎖電平,控制電控鎖開啟,同 顯示O字樣。
2.當(dāng)輸入密碼錯誤時,發(fā)出錯誤警告聲音,同時顯示C字樣。3.當(dāng)六次誤碼輸入的條件下,產(chǎn)生報警電平報警。
4.還可以實現(xiàn)對密碼的修改,修改成功后,蜂鳴器發(fā)出確認(rèn)音。
二、設(shè)計要求
1、選用8088和適當(dāng)?shù)拇鎯ζ骷敖涌谛酒瓿上鄳?yīng)的功能。
2、用LED顯示器顯示電子鎖的當(dāng)前狀態(tài)。
3、畫出詳細(xì)的硬件連接圖。
4、給出程序設(shè)計思路、畫出軟件流程圖。
5、給出地址分配表。
6、給出所有程序清單并加上必要注釋。
7、完成設(shè)計說明書(列出參考文獻(xiàn),所用器件型號)。
三、整體功能描述
本設(shè)計為多功能密碼鎖,使用存儲器保存密碼防止斷電后密碼丟失。工作時按下按鍵蜂鳴器會發(fā)出聲音提示按鍵有效并在數(shù)碼管有“--”閃爍字樣,若相隔1分鐘無按鍵按下,則清零。在輸入密碼正確的條件下輸出開鎖電平,控制電控鎖開啟,同時顯示O字樣。開鎖后可按下“復(fù)位/修改密碼鍵”實現(xiàn)修改密碼功能的轉(zhuǎn)入,之后先輸入密碼再輸入同樣的密碼確認(rèn)才可成功修改,修改成功后蜂鳴器會發(fā)出三聲,數(shù)碼管“O”閃爍三次提示修改密碼成功。當(dāng)輸入密碼錯誤時,發(fā)出錯誤警告聲音,同時顯示FF字樣,當(dāng)輸入密碼錯誤次數(shù)累積夠6次后,蜂鳴器會產(chǎn)生90秒的報警聲響進(jìn)行報警。
四、硬件設(shè)計功能模塊
本設(shè)計使用了8088、8259A、8255、8253、A28F512、74LS138、74LS148、地址鎖存器、數(shù)碼管以及74系列邏輯門、蜂鳴器、開關(guān)等芯片與元器件,實現(xiàn)了鍵盤輸入、中斷控制、計時、按鍵響應(yīng)、開鎖及報警等功能模塊。以下一一詳述。
1.鍵盤
本設(shè)計8255A的A口與兩片級聯(lián)的74LS148組合接用于輸入鍵盤,實現(xiàn)對輸入鍵號的讀入。工作時,8086通過程序掃描鍵盤,當(dāng)無鍵盤按下時,74LS148工作于無輸入狀態(tài),GS口輸出高電平,接到PA4作為識別有無按鍵按下信號,PA口輸入為10H;當(dāng)有按鍵輸入時,74LS148輸入口接到低電平,輸入有效,經(jīng)編碼后鍵號轉(zhuǎn)換為相應(yīng)二進(jìn)制編碼送到PA口,成為能為cpu識別的代表鍵值的有效信號。讀入的按鍵信號經(jīng)8086判斷后,根據(jù)不同的功能,輸出不同的按鍵響應(yīng),并轉(zhuǎn)移到相對應(yīng)的功能服務(wù)程序。
本設(shè)計總共用到11位按鍵,包括10位數(shù)碼輸入按鍵及一位“復(fù)位/修改密碼”按鍵,電路設(shè)計總共可用按鍵有16位,供升級功能使用。
鍵盤電路如下所示:
圖1 鍵盤連接圖
2.中斷控制
用一片8259芯片作為中斷控制接口電路??赏ㄟ^編程開中斷,通過編程或者8253計時器關(guān)中斷。電路連接如下:
圖2 中斷控制器連接圖 3.計時
采用8253計時器控制中斷的關(guān)斷,實現(xiàn)單次輸入密碼超時則退出輸入密碼中斷子程序、報警器響鈴時間控制等功能。電路如圖2所示。
4.按鍵響應(yīng)
8255PC0、PC1接到數(shù)碼管片選、PC2接到蜂鳴器、PC3接到電子鎖。電路連接如圖3所示:
圖3 按鍵響應(yīng)、報警、開鎖功能電路 5.報警功能
同時用8255A的B口控制數(shù)碼管的顯示,C口片PC0、PC1選數(shù)碼管,PC2用來驅(qū)動SPEAK發(fā)出報警。電路如圖3所示。
6.儲存器及片選電路:
圖4 片選及存儲器電路
7.整機(jī)電路圖:
五、軟件流程圖:
六、程序清單:
各芯片地址:8259 30H
8255 60H
8253 20H
存儲器
2000H
DATAS SEGMENT
;程序初始化
DATA1 DB '0','0','0','0','0','0'
DATA2 DB 6 DUP(?)
DATA3 DB 6 DUP(?)
DATA4 DB 6 DUP(?)DATAS ENDS
STACKS SEGMENT PARA STACK'STACK' STA DB 100 DUP(?)TOP EQU LENGTH STA STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS,ES:DATAS START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,TOP
MOV AX,0
;初始化中斷向量表
MOV ES,AX
MOV BX,84H
;IR1中斷類型碼21h*4=84h
MOV AX,OFFSET INPUT
MOV ES:[BX],AX
MOV AX,SEG INPUT
;段地址
MOV ES:[BX+2],AX
MOV AL,90H
;8255初始化,A口方式0,輸入;B、c口方式0,輸出
OUT 63H,AL MOV AL,36H
;8253初始化,方式0 OUT 23H,AL
MOV AL,13H
;8259A初始化,ICW1
OUT 30H,AL
MOV AL,20H
;ICW2
OUT 31H,AL
MOV AL,01
;ICW4
OUT 31H,AL
MOV AL,00
;OCW1
OUT 31H
MOV CX,06H
;從RAM里讀出密碼到DATA2,密碼為6位
MOV SI,2000H
MOV DI,OFFSET DATA2 LP1:MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP LP1
;讀入密碼結(jié)束
MOV BX,00
;輸入密碼次數(shù)計數(shù)器初始值 RE: MOV AL,03H
OUT 62H,AL
MOV AL,71H
;未開鎖,B口輸出顯示FF
OUT 61H,AL
MOV CX,06H
MOV SI,OFFSET DATA2
;定義SI、DI
MOV DI,OFFSET DATA3
HLT
STI
;停機(jī),開中斷,等待密碼輸入
CLD
INC BX
;輸入密碼次數(shù)加1
REPE CMPSB
;將輸入六位數(shù)碼與密碼比較
CMP CX,00
JE OPEN
;相等則轉(zhuǎn)到開鎖
CMP BX,06H
;輸入錯誤且累積未夠6次,重新輸入
JNE RE
MOV AL,07H
;若錯誤次數(shù)累積夠6次,觸發(fā)蜂鳴器報警
OUT 62H,AL
MOV AL,71H
;B口輸出FF
OUT 61H,AL MOV AL,2048H
;報警鈴響計時,90秒后關(guān)斷蜂鳴器,保持顯示FF
OUT 20H,AL MOV AL,03H OUT 62H,AL
JMP DOON
;跳到結(jié)束
OPEN:MOV AL,0BH
;開鎖,并顯示00
OUT 62,AL
MOV AL,3FH
OUT 61H C1: IN AL,60H
CALL D20MS
;去抖動
CMP AL,00H
JE C1
CMP AL,0AH
;掃描鍵盤,是否有修改密碼建(10)輸入
JNE DOON
;沒有則結(jié)束
C0: MOV SI,OFFSET DATA2
;重新定義SI、DI
MOV DI,OFFSET DATA3
MOV CX,06H
HLT
STI
;開中斷,輸入修改程序 C2: MOV AL,[DI]
MOV [SI],AL
INC SI
INC DI
LOOP C2
;輸入密碼轉(zhuǎn)移到data2
IN AL,60H
;掃描鍵盤,若有修改密碼鍵輸入則重新修改
CALL D20MS
CMP AL,0AH
JE C0 C3: MOV SI,OFFSET DATA2;再次輸入密碼確認(rèn)
MOV DI,OFFSET DATA3
MOV CX,06H
HLT
STI
REPE CMPSB
CMP CX,00
;若data2與data3不相等則從新輸入
JNE C3
MOV CX,06H
;若相等,則從DATA2寫密碼到RAM
MOV SI,2000H
MOV DI,OFFSET DATA2 C4: MOV AL,[DI]
MOV [SI],AL
INC SI
INC DI
LOOP C4
;轉(zhuǎn)存密碼結(jié)束
CALL RING2
;蜂鳴三次,表示修改好了
IN AL,60H
;掃描鍵盤,若有修改密碼鍵輸入則重新修改
CALL D20MS
CMP AL,0AH
JE C0
JMP DOON
;修改完畢,轉(zhuǎn)到結(jié)束
;中斷子程序
INPUT: PUSH AX
;保護(hù)現(xiàn)場
PUSH DS
PUSH BX
PUSH CX
PUSH DI
PUSH SI
MOV AL,1020H
;8253開始一分鐘輸入限制計時
OUT 20H,AL IN1:
IN AL,60H
;讀A口
CALL D20MS
;去抖動
CMP AL,10H
JE IN1
;若無按鍵按下,則重新掃描
CMP AL,0AH
;若有按鍵按下,比較是否為復(fù)位鍵
JNE IN3
CALL RING1
;為復(fù)位鍵則輸出按鍵有效提示音并重新輸入
MOV CX,06H
MOV DI,OFFSET DATA3
JMP IN1 IN3:
CALL RING1
;若不是復(fù)位鍵,則把鍵值送到data3
MOV [DI],AL
INC DI
LOOP IN1
;循環(huán),掃描下一次按鍵,直到輸入夠6位密碼
MOV AL,01
OUT 30,AL
POP SI
;中斷結(jié)束恢復(fù)現(xiàn)場
POP DI
POP CX
POP BX
POP DS
POP AX
CLI
;關(guān)中斷
IRET
;中斷返回
DOON: MOV AH,4CH
INT 21H
;20ms延時子程序
D20MS PROC NEAR
PUSH CX
MOV CX,0080H D1: DEC CX
LOOP D1
;循環(huán)
POP CX
RET
;返回 D20MS ENDP
;輸入按鍵響應(yīng)子程序
RING1 PROC NEAR
PUSH AX
;保護(hù)AXCX
PUSH CX
MOV CX,05H
;設(shè)置提示音為0.1秒
MOV AL,07H
;輸出顯示“--”字樣
OUT 62H,AL
MOV AL,40H
OUT 61H,AL R1: CALL D20MS
LOOP R1
MOV AL,00H
OUT 62H,AL
POP CX
POP AX
RET
RING1 ENDP
;修改確認(rèn)鈴聲子程序
RING2 PROC NEAR
PUSH AX
PUSH CX
MOV CX,03H
R2: MOV AL,0FH
OUT 62H,AL
MOV AL,40H
OUT 61H,AL
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
MOV AL,00H
OUT 62H,AL
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
CALL D20MS
LOOP R2
MOV AL,0BH
OUT 62H,AL
;數(shù)碼管滅
;三次0.1秒的提示聲
;開鈴聲
;延時0.1秒
;關(guān)鈴聲
;延時0.1秒
;循環(huán)
;恢復(fù)開鎖狀態(tài)
;返回
MOV AL,3FH
OUT 61H,AL
POP CX
POP AX
RET RING1 ENDP
;返回 CODES ENDS END START
;結(jié)束
七、設(shè)計總結(jié)
1、遇到的問題及解決方法
首先遇到的問題是鍵盤的設(shè)計,剛開始想用8279,但是對8279不夠熟悉,研究了一下就放棄了,再而想到用8255的A、B口組合64位矩陣鍵盤或者用C口低4位與高4位組合的16位鍵盤,但最后還是使用了開關(guān)與編碼器組合的形式組成16位鍵盤,簡單明了,但是還沒有解決雙鍵同時按下的問題。
再而由于學(xué)8259的時候不夠認(rèn)真,所以開始寫8259初始化的時候也顯的力不從心,最終參考了書本和其他資料,還是寫了出來。
設(shè)計中接觸到的另一個問題是密碼的儲存的問題,剛開始沒有想到cpu關(guān)機(jī)后密碼消失的問題,后來加了一篇存儲器實現(xiàn)了密碼的保存。
遇到的其他問題都跟同學(xué)們討論而得到了一定的解決。
2、課程設(shè)計總結(jié)
通過本次課程設(shè)計,我進(jìn)一步了解 8255,8253,8259等芯片的內(nèi)部結(jié)構(gòu),熟悉各種基本工作模式和編程方法;
加深了對 8086中斷系統(tǒng)工作過程的了解;
學(xué)會綜合應(yīng)用多種微機(jī)接口與單元電路,構(gòu)成滿足要求的小型微機(jī)應(yīng)用系統(tǒng); 學(xué)會了CPU與存儲器的連接方法,擴(kuò)展存儲空間的方法。
3、參考資料
《微型計算機(jī)原理及應(yīng)用》 吳榮光 呂鈞星 編著,華南理工大學(xué)出版社 《微型計算機(jī)原理與匯編語言程序設(shè)計》 趙國相等編著,科學(xué)出版社 《精通Protel DXP 2004電路設(shè)計》張睿 趙艷華 劉志剛 編著,電子工業(yè)出版社
第三篇:微機(jī)原理課程設(shè)計電子鬧鐘
電子鐘設(shè)計
1任務(wù)要求
1.1顯示位置:屏幕中央.1.2日期顯示格式“時:分:秒.1.312/24時制可調(diào).1.4在顯示屏上顯示提示語“CURRENT TIME IS:”和當(dāng)前時間.2工作原理
1時鐘起始時間的設(shè)置
先調(diào)用DOS操作系統(tǒng)模塊9,在顯示屏上顯示提示語“TIME SYSTEM IS:”,輸入時制12或24后,顯示“CURRENT TIME IS:”,再調(diào)用DOS操作系統(tǒng)模塊10,提示要輸入時鐘的起始時間,輸入時間的格式是“時:分:秒”。輸入的時間以字符串形式存放在已定義的存儲器緩存區(qū)內(nèi),繼而調(diào)用TRAN1轉(zhuǎn)換子程序和MUL10乘10子程序,將存放在存儲器緩存區(qū)內(nèi)的ASCII字符轉(zhuǎn)換為壓縮BCD碼,并將時、分、秒的值放在寄存器CH、DH、DL中。
2延時程序
調(diào)用延時TIME延時中斷服務(wù)程序,累加到存放秒值的寄存器DL中,并進(jìn)行十進(jìn)制調(diào)整。在累加的過程中,不斷地對時、分、秒值進(jìn)行比較,秒不能等于60,分不能等于60,時不能等于24。秒等于限制值時,則使秒值為0分值加1;分等于限制值時,則使分值為0時值加1;時等于限制值時,則使時值為0;時、分、秒值都不超過限制值時,就轉(zhuǎn)顯示屏輸出。
3時間顯示
調(diào)用DOS操作系統(tǒng)模塊9,可用來顯示存儲器內(nèi)字符串。由于顯示的字符必須為ASCII碼,因為要調(diào)用TRAN2轉(zhuǎn)換子程序?qū)⒓拇嫫鰿H、DH、DL內(nèi)壓縮BCD碼字符串轉(zhuǎn)換成ASCII字符串,字符串最后以字符“$”結(jié)束,并按時、分、秒的順序送存儲器緩沖區(qū)內(nèi)。調(diào)用DOS操作系統(tǒng)模塊9,(DS:DX)應(yīng)指向字符串首址。程序一旦進(jìn)入運行,就將不間斷地在顯示屏顯示時間,要想程序停止運行,可同時在鍵盤按下CTRL和BREAK二鍵。
4程序堆圖 5程序清單
DATA SEGMENT BUFFER DB 10;設(shè)置輸入字符串用緩沖區(qū) DB ? DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$' CT DB 'CURRENT TIME IS:$' PM DB 'PM $' AM DB 'AM $' KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR DB ? DAT ENDS STA SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?)TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H;設(shè)置1CH中斷
MOV AL,1CH
INT 21H
;段地址放入ES,偏移地址放入BX
MOV KEEPIP,BX
;保偏移地址存
MOV KEEPCS,ES
;保存段地址
PUSH DS
MOV DX,OFFSET TIME
MOV AX,SEG TIME
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;設(shè)置中斷功能調(diào)用
INT 21H
POP DS
MOV DX,OFFSET TS
;DOS功能模塊,顯示字符串
MOV AH,9
INT 21H
MOV AH,1
;DOS功能模塊,從鍵盤輸入字符
INT 21H
MOV AH,1
INT 21H
MOV SR,AL
MOV DL,0AH
;”換行“
MOV AH,2
INT 21H
MOV DL,0DH
;”回車“
MOV AH,2
INT 21H
MOV DX,OFFSET CT
;DOS功能模塊,顯示字符串,提示從鍵盤輸入
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,10
;DOS功能模塊,從鍵盤輸入字符串到緩沖區(qū)
INT 21H
MOV BX,OFFSET BUFFER+2
CALL TRAN1
;將輸入的ASCII碼轉(zhuǎn)換為BCD碼
INC BX
INC BX
CALL TRAN1
INC BX
INC BX
CALL TRAN1
MOV BX,OFFSET BUFFER+2
MOV AL,[BX]
CALL MUL10
;將BCD碼轉(zhuǎn)換為壓縮的BCD碼
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DL,AL AGAIN: PUSH CX
MOV CX,18
STI
;開中斷 W:
CMP CX,0
JNE W
CLI
POP CX
MOV AL,DL
ADD AL,1
;”秒“加1
DAA
MOV DL,AL
CMP AL,60H
;”秒“與60比較
JNE DISPY
;小于60S,轉(zhuǎn)顯示程序
MOV DL,0
;等于60S, ”秒“值為0,”分“+1
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
;”分“于60比較
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
MOV AL, SR
CMP AL,32H
JNE NEXT
JMP DISPY NEXT: MOV AL,CH
MOV HOUR,CH
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: CALL IOCLR
CALL IOSET1
CALL STAR
CALL IOSET2
CALL STAR
CALL IOSET
MOV BX,OFFSET BUFFER
MOV AL,SR
CMP AL,32H
JNE NEXT2
CALL AD12
MOV AL,HOUR
JMP NEXT1 NEXT2: MOV AL,CH
;”時“值轉(zhuǎn)換成ASCII碼
NEXT1: CALL TRAN2
;將壓縮BCD碼轉(zhuǎn)換成ASCII碼
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
;”分“值轉(zhuǎn)換成ASCII碼
CALL TRAN2
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
;”秒“值轉(zhuǎn)換成ASCII碼
CALL TRAN2
INC BX
MOV AL,'$'
;顯示字符串結(jié)束碼
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET BUFFER
MOV AH,9
;DOS功能模塊,顯示字符串
INT 21H
POP DX
POP CX
POP BX
JMP AGAIN
CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
RET START ENDP MUL10 PROC
;將BCD碼轉(zhuǎn)換為壓縮的BCD碼
ADD AL,AL
DAA
MOV CL,AL
ADD AL,AL
DAA
ADD AL,AL
DAA
ADD AL,CL
DAA
MOV CL,AL
INC BX
MOV AL,[BX]
ADD AL,CL
RET MUL10 ENDP TRAN1 PROC
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
RET TRAN1 ENDP TRAN2 PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET TRAN2 ENDP IOCLR PROC
PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV AX,0600H
MOV BH,02
SUB CX,CX
MOV DX,184FH
INT 10H
;ASCII碼轉(zhuǎn)換成BCD碼
;將壓縮BCD碼轉(zhuǎn)換成ASCII碼;調(diào)用BIOS,清除全屏幕
POP AX
POP BX
POP DX
POP CX
RET IOCLR ENDP TIME
PROC
DEC CX
IRET TIME
ENDP
PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H
調(diào)用BIOS,設(shè)置屏幕光標(biāo)在中央
;POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR
6設(shè)計時遇到的問題及解決方法
在課程設(shè)計中遇到的最大的困難是如何利用軟、硬件配合的方式產(chǎn)生中斷,對中斷向量表的裝載還比較模糊,對中斷的初始化、具體設(shè)置、中斷返回還不是很清楚,程序設(shè)計一度陷入停滯狀態(tài),不知如何是好.于是我又重新翻閱了我們的學(xué)習(xí)課本,也就是電子工業(yè)出版社的《微機(jī)原理與接口技術(shù)(基于16位機(jī))》,重點研究了第9章《中斷》,通過對這一章的學(xué)習(xí),我終于對中斷有了詳細(xì)的認(rèn)識,在設(shè)計程序時也容易了很多。
設(shè)中斷服務(wù)程序入口地址為TIME,則相應(yīng)的程序如下:
??
KEEPIP DW 0
;設(shè)置內(nèi)存緩沖區(qū),用于暫存 KEEPCS DW 0
;DOS的中斷矢量
??
;在主程序的初始化部分,先取出DOS的中斷矢量并加以保存,然后裝入需要的中斷矢量
MOV AH,35H
;取出DOS的中斷矢量,并送ES:BX
MOV AL,1CH
INT 21H
MOV KEEPIP,BX
;保存DOS的中斷矢量
MOV KEEPCS,ES
PUSH DS;保護(hù)DS
MOV DX,OFFSET TIME
;將中斷矢量取代
MOV AX,SEG TIME
;DOS的中斷矢量
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;設(shè)置中斷功能調(diào)用
INT 21H
POP DS
;恢復(fù)DS ??
AGAIN: PUSH CX
MOV CX,18
STI
;開中斷 W:
CMP CX,0
JNE W
CLI ??
TIME
PROC
DEC CX
IRET TIME
ENDP ??
;在程序結(jié)尾處,用以下程序恢復(fù)DOS的中斷矢量 CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI 7新增功能及實現(xiàn)方法
7.112時制時顯示AM或PM
??
AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP ??
7.2綠色顯示時間
??
IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP ??
7.3在數(shù)字上下方各顯示一行個數(shù)同小時數(shù)的”=“ ??
IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP ?? 8心得體會
這是我第一次用匯編語言來設(shè)計一個小程序,歷時一周終于完成,其間有不少感觸。首先就是借鑒.魯迅先生曾說過要”拿來“,對,在這次課程設(shè)計中,就要”拿來"不少子程序,比如將ASCII碼轉(zhuǎn)換成BCD碼,將BCD碼轉(zhuǎn)換成壓縮BCD碼,將壓縮BCD碼轉(zhuǎn)換成ASCII碼等,這些子程序的設(shè)計是固定的,因此可以直接從指導(dǎo)資料中調(diào)用,至于設(shè)置光標(biāo)的子程序,只需要修改幾個參數(shù)就可以,這大大方便了我的設(shè)計,為我節(jié)省了很多的時間。還有就是指導(dǎo)老師提供的資料很重要.這次課程設(shè)計的大部分程序,都可以在李老師提供的資料中找到,這對我的程序設(shè)計很有幫助,從這些資料中,我可以看出這個時鐘程序的基本流程,修改一些程序就可以實現(xiàn)這個時鐘的基本功能,添加一些程序就可以實現(xiàn)這個時鐘的附加功能,可以說,如果沒有李老師提供的源程序,我將面臨很大的困難。文章引用自:
第四篇:微機(jī)原理課程設(shè)計(電子時鐘)
電子時鐘課程設(shè)計
一:設(shè)計背景
電子數(shù)字鐘的應(yīng)用十分廣泛,通過計時精度很高的石英晶振(也可采用衛(wèi)星傳遞的時鐘標(biāo)準(zhǔn)信號),采用相應(yīng)進(jìn)制的計數(shù)器,轉(zhuǎn)化為二進(jìn)制數(shù),經(jīng)過譯碼和顯示電路準(zhǔn)確地將時間“時”“分”“秒”用數(shù)字的方式顯示出來。與傳統(tǒng)的機(jī)械鐘相比,它具有走時準(zhǔn)確,顯示直觀,無機(jī)械傳動,無需人的經(jīng)常調(diào)整等優(yōu)點。它廣泛用于電子表、車站、碼頭、廣場等公共場所的大型遠(yuǎn)距離時間顯示電子鐘。
二:數(shù)字鐘電路設(shè)計思路
1.選用8253計數(shù)器2進(jìn)行1s的定時,其輸出OUT1與8259的IRQ0相連,當(dāng)定時到1s時產(chǎn)生一個中斷服務(wù)程序進(jìn)行時、分、秒的計數(shù),并送入相應(yīng)的存儲單元;8255的A口接七段數(shù)碼管的位選信號,B口接數(shù)碼管的段選信號。時、分、秒的數(shù)值通過對8255的編程可送到七段數(shù)碼管上顯示。2.此程序主要由四部分組成:
第一部分為最主要的部分定義顯示界面;
第二部分為利用延時程序,并將調(diào)用的二進(jìn)制表示的時間數(shù)轉(zhuǎn)換成ASCII碼,并將時間數(shù)存入內(nèi)存區(qū);
第三部分將存在系統(tǒng)內(nèi)存區(qū)的時間數(shù)用七段數(shù)碼管顯示出來; 第四部分利用循環(huán)程序分別對秒個位、秒十位、分個位、分十位與相應(yīng)的規(guī)定值進(jìn)行比較,結(jié)合延時程序來實現(xiàn)電子鐘數(shù)字的跳變,從而形成走時準(zhǔn)確的電子鐘。
該程序?qū)崿F(xiàn)了準(zhǔn)確顯示秒和分,讀數(shù)準(zhǔn)確,走時精準(zhǔn)。此電子鐘能準(zhǔn)確的從0時0分0秒走時到23時59分59秒,然后能自動回復(fù)到0時0分0秒循環(huán)走時。
3.基本工作原理:系統(tǒng)設(shè)計的電子時鐘主要由顯示模塊、時鐘控制模塊和時鐘運算模塊三大部分組成。以8086微處理器作CPU,用8253做定時器產(chǎn)生時鐘頻率提供一個頻率為10kHz的時鐘信號,要求每隔10ms完成一次掃描鍵盤的工作。在寫入控制字與計數(shù)初值后,每到10ms定時器就啟動工作,即當(dāng)計數(shù)器減到1時,輸出端OUT0輸出一個CLK周期的低電平,向CPU申請中斷,當(dāng)達(dá)到100次時,則輸出端OUT1輸出1s,向CPU申請中斷,由8255控制一個數(shù)碼管顯示,當(dāng)計數(shù)到60s時,則輸出端OUT2向CPU申請中斷,由另一數(shù)碼管顯示1min,同理由數(shù)碼管顯示1h.CPU處理,使數(shù)碼管的顯示發(fā)生變化。
電子時鐘的顯示格式HH:MM:SS由左到右分別為時、分、秒,并依次對秒、分、小時寄存器的內(nèi)容加一,六個數(shù)碼管動態(tài)顯示時、分、秒的當(dāng)前值。最大記時23:59:59超過這個時間時分秒位都清零從00:00:00重新開始。8253芯片介紹
8253是NMOS工藝制成的可編程計數(shù)器/定時器,有幾種芯片型號,外形引腳及功能都是兼容的,只是工作的最高計數(shù)速率有所差異,例如8253(2.6MHz),8253-5(5MHz)8253內(nèi)部有三個計數(shù)器,分別成為計數(shù)器0、計數(shù)器1和計數(shù)器2,他們的機(jī)構(gòu)完全相同。每個計數(shù)器的輸入和輸出都決定于設(shè)置在控制寄存器中的控制 字,互相之間工作完全獨立。每個計數(shù)器通過三個引腳和外部聯(lián)系,一個為時鐘輸入端CLK,一個為門控信號輸入端GATE,另一個為輸出端OUT。每個計數(shù) 器內(nèi)部有一個8位的控制寄存器,還有一個16位的計數(shù)初值寄存器CR、一個計數(shù)執(zhí)行部件CE和一個輸出鎖存器OL。
8255芯片介紹 8255特性:
①一個并行輸入/輸出的LSI芯片,多功能的I/O器件,可作為CPU總線與外圍的接口.②具有24個可編程設(shè)置的I/O口,即使3組8位的I/O口為PA口,PB口和PC口.它們又可分為兩組12位的I/O口,A組包括A口及C口(高4位,PC4~PC7),B組包括B口及C口(低4位,PC0~PC3).A組可設(shè)置為基本的I/O口,閃控(STROBE)的I/O閃控式,雙向I /O3種模式;B組只能設(shè)置為基本I/O或閃控式I/O兩種模
8255芯片
8253芯片
式,而這些操作模式完全由控制寄存器的控制字決定.8255引腳功能:
RESET:復(fù)位輸入線 , CS:芯片選擇信號線 , RD:讀信號線 , WR:寫入信號 , D0~D7:三態(tài)雙向數(shù)據(jù)總線 ,PA0~PA7:端口A輸入輸出線 ,PB0~PB7:端口B輸入輸出線, PC0~PC7:端口C輸入輸出線, A0,A1:地址選擇線 三:程序流程圖
三、電
子
表
原
理
圖
:
四:程序代碼
D8279 equ 200H C8279 equ 202H C8253 equ 20bH D82530 equ 208H D82531 equ 209H C82590 equ 210H
C82591 equ 211H data segment HOUR
db 00 MINUTE
db 00 SECOND
db 008 STAT
db 00 LED
db 31H,06H,5bH,4fH,66H,6dH,7dH,27H,7fH,6fH,00H,00H DISBUF db 8 dup(0)data ends stack segment stack
dw 100 dup(?)stack ends code segment
assume cs:code,ds:data START:
MOV AX,DATA
MOV DS,AX
CLI
MOV AL,13H
MOV DX,C82590
OUT DX,AL
MOV AL,8
MOV DX,C82591
OUT DX,AL
MOV AL,1
OUT DX,AL
MOV AX,0
MOV ES,AX
LEA AX,INT0
MOV AX,CS
MOV ES:[4*8+2],AX
MOV DX,C8253
MOV AL,36H
OUT DX,AL
MOV DX,D82530
MOV AX,10000
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,C8253
MOV AL,36H
OUT DX,AL
MOV DX,D82531
MOV AX,100
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,C8279
MOV AL,00H
OUT DX,AL
MOV AL,34H
OUT DX,AL
MOV AL,0D2H
OUT DX,AL
MOV STAT,0
MOV DX,C82591
MOV AL,0FEH
OUT DX,AL
WAIT1:
MOV DX,C8279
IN AL,DX
MOV AH,AL
AND AL,80H
JNE WAIT1
MOV AL,AH
AND AL,0FH
CMP AL,00H
JE WAIT1
MOV AL,40H
OUT DX,AL CHK: MOV DX,D8279
IN AL,DX
CMP AL,33H
JNE BBB
MOV DX,C82591
MOV AL,0FFH
OUT DX,AL
MOV AL,STAT
INC AL
MOV STAT,AL
CMP AL,1
JNZ AA1
MOV SI,OFFSET DISPBUF
MOV CX,4
MOV AL,00 BB0: MOV [SI],AL
INC SI
LOOP BB0
CALL DISP
JMP CHK AA1: CMP AL,2
JNZ AA2
MOV SI,OFFSET DISPBUF
MOV AL,00
MOV [SI],AL
INC SI
MOV [SI],AL
ADD SI,2
MOV [SI],AL
INC SI
MOV [SI],AL
CALL DISP
JMP CHK AA2: CMP AL,3
JNZ AA3
MOV SI,OFFSET DISPBUF+2
MOV CX,4
MOV AL,00 BB1: MOV [SI],AL
INC SI
LOOP BB1
CALL DISP
JMP CHK AA3: MOV STAT,00
MOV AL,0FEH
MOV DX,C82591
OUT DX,AL
CALL FULLSFM
CALL DISP
JMP CHK BBB: CMP AL,3BH
JE BBB0
JMP CCC BB0: MOV AL,STAT
CMP AL,1
JNZ BBB1
MOV AL,HOUR
ADD AL,1
DAA
MOV HOUR,AL
CALL FULLSH1
CALL DISP
JMP BBB BBB1: MOV AL,STAT
CMP AL,2
JNZ BBB3
MOV AL,MINUTE
ADD AL,1
DAA
MOV MINUTE,AL
CALL FULLFEN
CALL DISP
JMP BBB BBB3:
MOV AL,STAT
CMP AL,3
JZ
BBB4
JMP
DDD BBB4:
MOV AL,SECOND
ADD AL,1
DAA
MOV SECOND,AL
CALL FULLMIAO
CALL DISP
JMP BBB
CCC:
CMP AL,3AH
JE CC0
JMP DDD CC0:
MOV AL,STAT
CMP AL,1
JNZ CCC1
MOV AL,HOUR
SUB AL,1
DAS
MOV AL,HOUR
SUB AL,1
ADD AL,1
DAA
MOV SECOND,AL
CMP AL,60H
JNZ FANHUI
MOV SECOND,0
MOV AL,MINUTE
ADD AL,1
DAA
MOV MINUTE,AL
CMP AL,60H
JNZ FANHUI
MOV MINUTE,0
MOV AL,HOUR
ADD AL,1
DAA
MOV HOUR,AL
CMP AL,24H
JNZ FANHUI
MOV HOUR,0
CALL FULLSFM
CALL DISP
POP SI
POP DI
POP BX
POP AX
IRET FULL
SFM PROC NEAR
LEA DI,DISBUF
LEA BX,LED
LEA SI,SECOND
MOV CX,3 AA4:
MOV AL,[SI]
AND AL,0FH
XLAT
MOV [DI],AL
INC DI
MOV AL,[SI]
PUSH CX
MOV CL,4
SHR AL,CL
AND AL,0FH
XLAT
MOV [DI],AL
INC DI
POP CX
INC SI
LOOP AA4
RET FULL
SFM ENDP FULL
SHI PROC NEAR
LEA SI,DISBUF
MOV AL,0
MOV CX,4 CCC0:
MOV [SI],AL
INC SI
LOOP CCC0
LEA BX,LED
MOV AL,HOUR
AND AL,0FH
XLAT
MOV [SI],AL
XLAT
MOV [SI],AL
MOV AL,HOUR
MOV CL,4
SHR
AL,CL
AND AL,0FH
XLAT
INC
SI
MOV
[SI],AL
RET FULL
SHI ENDP FULL
FEN PROC NEAR
LEA SI,DISBUF
MOV AL,0
MOV [SI],AL
INC SI
MOV [SI],AL
INC SI
LEA BX,LED
MOV
AL,MINUTE
AND AL,0FH
XLAT
MOV
[SI],AL
MOV AL,MINUTE
MOV
CL,4
SHR AL,CL
AND AL,0FH
XLAT
INC SI
MOV
[SI],AL
RET FULL
FEN ENDP FULL
MIAO PROC NEAR
LEA SI,DISBUF
LEA BX,LED
MOV AL,SECOND
AND AL,0FH
XLAT
MOV [SI],AL
MOV AL,SECOND
MOV CL,4
SHR AL,CL
AND AL,0FH
XLAT
INC SI
MOV [SI],AL
MOV AL,0
INC SI
MOV [SI],AL
INC SI
MOV [SI],AL
INC SI
MOV [SI],AL
INC SI
MOV [SI],AL
RET FULL MIAO ENDP DISP
PROC NEAR
MOV CX,8
MOV DX,D8279
LEA SI,DISBUF DISI
MOV AL,[SI]
OUT DX,AL
INC SI
LOOP DISI
RET CODE ENDS
END START
第五篇:微機(jī)原理課程設(shè)計
電子信息科學(xué)與技術(shù)《微機(jī)原理》課程設(shè)計
一、本次課程設(shè)計的目的和意義
學(xué)習(xí)和掌握計算機(jī)中常用接口電路的應(yīng)用和設(shè)計技術(shù),充分認(rèn)識理論知識對應(yīng)用技術(shù)的指導(dǎo)性作用,進(jìn)一步加強(qiáng)理論知識與應(yīng)用相結(jié)合的實踐和鍛煉。通過這次設(shè)計實踐能夠進(jìn)一步加深對專業(yè)知識和理論知識學(xué)習(xí)的認(rèn)識和理解,使自己的設(shè)計水平和對所學(xué)的知識的應(yīng)用能力以及分析問題解決問題的能力得到全面提高。
二、設(shè)計時間、基本要求
(一)、設(shè)計時間:二周(二)、基本要求:
a.每題2人;b.設(shè)計出完整的接口電路;c.編寫出全部程序;d.在實驗系統(tǒng)上調(diào)試通過。
三、設(shè)計選題與要求
選題一:多路模擬數(shù)據(jù)采集系統(tǒng)設(shè)計
要求:設(shè)計一個2路以上的模擬數(shù)據(jù)采集系統(tǒng)。
1、用按鍵選擇那一路;
2、用LED顯示轉(zhuǎn)換結(jié)果(十進(jìn)制數(shù));
3、將每一路采集的100個數(shù)據(jù)存放到各自的存儲區(qū)中。
選題二:溫度測控系統(tǒng)的設(shè)計
要求:利用ADC0809設(shè)計一個溫度測控系統(tǒng),在LED數(shù)碼顯示器上顯示溫度值,并對溫度進(jìn)行測試和控制,當(dāng)檢測溫度到達(dá)溫度上限60℃時開風(fēng)扇(即開啟電動機(jī),或以一個燈的亮滅表示),低于下限30℃時關(guān)閉風(fēng)扇,LED上的顯示內(nèi)容為:XX ℃(采用十進(jìn)制顯示)。
選題三:函數(shù)發(fā)生器的設(shè)計(一)要求:利用DAC0832設(shè)計一個函數(shù)發(fā)生器,并利用按鍵選擇輸出波形,能分別產(chǎn)生三角波、階梯波(每階梯1V)、正向鋸齒波、負(fù)向鋸齒波和方波。并利用按鍵(自行定義)進(jìn)行輸出波形選擇,同時將當(dāng)前輸出波形代號顯示在LED上(左邊位):0為方波、1為正向鋸齒波、2為負(fù)向鋸齒波、3 為三角波、4為階梯波。
選題四:函數(shù)發(fā)生器的設(shè)計(二)要求:設(shè)計一個三角波發(fā)生器,可利用鍵盤改變其輸出波形的幅值。例如,可利用1-5這5個數(shù)字鍵改變其輸出波形的幅值,當(dāng)按下1-5數(shù)字鍵時使D/A輸出幅值從1V增加到5V。
選題五:電子音樂播放器
要求:設(shè)計要求:利用8253作為音階頻率發(fā)生器,應(yīng)先對“2008年奧運會主題歌”進(jìn)行編碼后存入音符表,并建立好音階表(只建立一個8度即可),音符長度不能少于60個,連續(xù)播放3遍后停止。
選題六:鍵盤電子樂器
要求:利用并行接口8155作為鍵盤接口,設(shè)計一個具有2個八度音階的鍵盤樂器,音階鍵不少于16個,采用掃描方式管理鍵盤,音域范圍自行定義。
選題七:電子時鐘設(shè)計
要求:利用8253定時器設(shè)計一個具有時、分、秒顯示的電子時鐘,并定義一個啟動鍵,當(dāng)按下該
鍵時時鐘從當(dāng)前設(shè)定值(可在顯示緩沖區(qū)中予置)開始走時。
選題八:壓力測控系統(tǒng)的設(shè)計(一)要求:對壓力傳感器的信號進(jìn)行檢測并在LED數(shù)碼顯示器上顯示壓力值,當(dāng)壓力低于30pa時,黃燈閃爍,閃爍周期為1秒。當(dāng)壓力高于150pa時,紅燈閃爍。LED的顯示內(nèi)容為P=XXX。X為測試值。
選題九:可變輸出頻率方波發(fā)生器設(shè)計
要求:設(shè)計一個輸出方波頻率可利用按鍵改變的方波信號發(fā)生器(可以使用D/A也可以直接使用8253產(chǎn)生方波),利用鍵盤選擇方波發(fā)生器的輸出頻率并驅(qū)動喇叭。輸出頻率=鍵號*100HZ
選題十:直流電機(jī)速度控制器設(shè)計
要求:利用D/A轉(zhuǎn)換器和按鍵設(shè)計一個直流電動機(jī)轉(zhuǎn)速控制器。按鍵定義如下:0 停止,1-1/10轉(zhuǎn)速,2-2/10轉(zhuǎn)速?? 9 最高速(D/A輸出滿量程),鍵號每加1,D/A輸出增加0.5V
選題十一:可任意啟動/停止的電子秒表設(shè)計
要求:6位LED數(shù)碼顯示,計時單位為1/100秒。利用功能鍵進(jìn)行啟/??刂啤F涔δ転椋荷想姾笥嫊r器清0,當(dāng)?shù)谝淮危ɑ蚱鏀?shù)次)按下啟/停鍵時開始計數(shù)。第2次(或偶數(shù)次)按下該鍵時停止計時,再一次按啟/停鍵時清零后重新開始計時??
選題十二:溫度測試系統(tǒng)設(shè)計
要求:利用溫度傳感器和ADC0809設(shè)計一個溫度測試系統(tǒng),將測試結(jié)果(十進(jìn)制)在LED上顯示出來,并定義一個保持按鍵,當(dāng)按下該鍵時,將當(dāng)前測試值保持不變(按鍵不動作時為正常測量顯示)。溫度顯示格式為:XXX ℃。(可以每隔0.3秒測量一次)
選題十三:壓力測試系統(tǒng)設(shè)計(二)要求:利用壓力傳感器和ADC0809設(shè)計一個壓力測試系統(tǒng),并將測試結(jié)果(十進(jìn)制)在LED上顯示出來,并定義一個測試最大值按鍵,當(dāng)按下該鍵時,可進(jìn)行最大值測量(按鍵不動作時為正常測量顯示),即:只有當(dāng)當(dāng)前測量值大于上次測量值時才刷新顯示,顯示格式為:P=XXX??梢悦扛?.3秒測量一次。
選題十四:簡易計算器系統(tǒng)設(shè)計
要求:設(shè)計一個可以進(jìn)行2位數(shù)四則運算的計算器。
1、用按鍵輸入數(shù)和運算符號;
2、用LED顯示運算過程和結(jié)果(十進(jìn)制數(shù));
3、可以表示出當(dāng)前的運算類型;
4、具有清零和復(fù)位功能;
5、具有連續(xù)運算功能。
選題十五:交通燈控制系統(tǒng)
要求:按照時間控制原則,利用并行接口和定時器,設(shè)計一套十字路口的交通燈管理系統(tǒng),通行時間(或禁止時間)30秒,準(zhǔn)備時間3秒,在準(zhǔn)備時間里黃燈閃爍3次,閃爍頻率為0.5秒,周而復(fù)始。可利用8255、8253等接口電路。
選題十六:計件系統(tǒng)設(shè)計
要求:利用8253計數(shù),對外界脈沖技術(shù),并將計數(shù)值在數(shù)碼管上顯示,可通過鍵盤控制重新計數(shù)。
四、設(shè)計任務(wù)及要求
1、接口設(shè)計:根據(jù)所選題目和所用的接口電路芯片設(shè)計出完整的接口電路,并在實驗系統(tǒng)上完成電路的連接和調(diào)試通過。
2、程序設(shè)計:要求畫出程序框圖,設(shè)計出全部程序并給出程序設(shè)計說明和程序注釋。
3、課程設(shè)計報告:(1)設(shè)計題目;
(2)系統(tǒng)的主要功能、作用以及主要技術(shù)性能指標(biāo);
(3)總體設(shè)計方案、工作和組成原理(框圖)或設(shè)計說明、采用的技術(shù)路線等;
(4)系統(tǒng)設(shè)計:接口電路設(shè)計,程序設(shè)計(程序框圖和程序清單及注釋)其他有關(guān)的理論分析和計算;
(5)設(shè)計總結(jié):對整個設(shè)計工作過程進(jìn)行歸納和綜合,對設(shè)計中所存在的問題和不足進(jìn)行分析和總結(jié),提出解決的方法、措施、建議和對這次設(shè)計實踐的認(rèn)識、收獲和提高。