㈠ 微機原理中倒計時秒錶的程序中的IRE報錯怎麼解決
電子秒錶的設計
一、設計要求
利用8253A,用實驗箱上的數碼管模擬一個秒錶,要求具有一般秒錶的功能。
二、設計內容
1、能顯示實時時間(時間可用實驗箱上的按鍵進行調整)。時間值的變化可採用查詢8253A的計數器值來進行計算。
2、按「1」鍵時,進入秒錶准備狀態,再按「1」鍵開始秒錶計時(計時單位為1/100秒),再按「1」鍵時停止秒錶計時。秒錶計時的時間在數碼管上顯示。
3、按「2」鍵退出秒錶計時狀態,顯示實時時間。
㈡ 微機原理與介面技術的實驗報告怎麼寫
微雀褲機介面課程設計實驗報告
一、實驗目的:
1. 掌握綜合使用基本輸入設備,通用介面頃猜簡晶元,專用介面晶元的方法;
2. 熟悉並行介面晶元8255的使用與硬體介面方法, 熟悉8255的各種工作方式,掌握8255的編程方法;
3. 掌握實時處理程序的編制和調試方法;
二、設計兆陸要求:
用實驗儀器上的並行介面控制鍵盤和LED顯示,設計一個定時顯示裝置,用四個數碼管顯示時間(左邊兩位顯示分值,右邊兩位秒值).
用小鍵盤控制計時和顯示:
C鍵(清除) 顯示00-00
G鍵(啟動) 顯示XX-XX變化的分、秒。
S鍵(停止) 顯示XX-XX不變
P鍵(設置初始值)設置分、秒的初值
E鍵(終止程序) 熄滅數碼管,程序退出
㈢ 微機原理與介面技術課程設計 題目:象棋比賽計時表設計
你也說了,24小時時鍾
肯定12:00 12:00朋友
房東問時24分是24分或0:00,
很負責扒猛任地告訴你
晚上12點,因塌此大為24進制,至少有24到下一個入口,其餘的應該是
像團豎全小數已經進入到10 10 110,位0個朋友...
㈣ 電子鍾課程設計(微機原理)急需!!!!
電子鬧鍾接線圖
設計原理:
計時功能:
用到的8254的功能只是相當於一個分頻計,輸入一定頻率的緩慶脈沖信號使每隔一秒就會在OUT0端產生0到1的躍變,作為中斷IRQ的請求信號。由於秒、分的進制形式不同,可通過中斷程序控制,由此完成計時功能。
顯示功能:
可以用四位二進制碼分別對應表示X4X3X2X1的邏輯值(1--高電平,0--低電平),實現時鍾的顯示功能。具體操作:首先將秒的個位數據通過8255的B埠送給數碼管,同時將二進制碼「0111」通過8255的A埠送給小鍵盤X4X3X2X1,這樣通過計算機的掃描後,就會在數碼管4上顯示秒的個位值;接著將秒的十位數據送給數碼管,同時將二進制碼「1011」送給小鍵盤X4X3X2X1,這樣就會在數碼管3上顯示相應的數值;同樣的道理,分別將分的個位、十位送給數碼管,「1101」 、「1110」送給小鍵盤X4X3X2X1,就會依次在數碼管2、1上顯示分的個位、十位數值。特別注意分秒的間隔點,由於數碼管共陰極,將數碼二進制最高位置1,其他為置0即可。
按鍵功能:
由於X1,X2,X3,X4低電平顯示相應的數碼管,利用讀回的Y1,Y2邏輯值辨別究竟按下哪個鍵,並通過相應的編程來完成不同鍵的按鍵功能。
(1)1鍵清除功能的設置:
在判別了按鍵的邏輯值為01110後,將存儲時間的每一個內存單元賦0,這樣在數碼管顯示的就是00.00,便達到了清除功能的目的。
(2)2鍵啟動、3鍵停止計時功能的設置:
在進行2鍵和3鍵功能設置之前,我們必須定義一個暫停標志位:PAUSE,它用標準的邏輯值(0、1)來表示,假如PAUSE=0,在進行計時設置的時候,讓其自動加1,依次顯示時間的各位;假如PAUSE=1,我們就將其返回,停止加1,即暫停計時。
接著,假如我們判別的是2鍵被按下,就令PAUSE=0,讓計數器計時,自動加1;假如我們按下的是3鍵,就令PAUSE=1,讓計數器暫停計時,即停止加1。
(3)4鍵終止程序功能的設置:
從上面的分析,我們已經知道,只有同時將對應鍵盤X列的低電平送到相應的數碼管才會使得數碼管亮,所以我們在判別了是4鍵被按下後,只要將鍵盤對應的二進制碼全部賦高電平,並送到數碼管,同時結束程序,就可以實現熄滅數碼管、退出程序的功能。
(4)5鍵重置初始值功能的設置:
在這里我們設置了兩個標志位:調整位標志ADJUST和閃爍標志FLASH。它們的具體設置如下:
ADJUST初始設置為00H,表示非調整狀態,01H表示調整秒的個位,02H表示調整秒的十位,03H表示調整分的個位,04H表示調整分的十位。
FLASH設置為邏輯值,初始設置為00H,表示非閃爍狀態,0FFH表示閃爍,其閃爍功能實現的過程為:假如FLASH=0FFH,則將00H送給數碼管,讓數碼管不顯示。然後,在中斷計時程序裡面,加入FLASH取反語句,由於計時程序每秒加1循環一次,這樣FLASH也實現了每秒改變邏輯值一次。也就是說,數碼管閃爍的周期是1秒。當然,閃爍標志位只是在有對應位需要調整的時候才用的著。
要雀握實現5鍵設置初始時間的功能,我們就必須增加一個鍵(6鍵)來控制時間的增加。
(5)6鍵時間位加1功能的設置
這里,我們再引進一個標志位:按鍵標志KEYMARK。其設置為邏輯值,初始設置為0,表示允許響應此次按鍵,並在響應過後,將其置1;KEMARK為1時,表示不響應此次按鍵。之所以要設置此標志位,是因為鍵盤掃描的速度非常擾歲握快,假如我按下6鍵需要調整時間加1,我按下的時間再怎麼短,計算機一定已經掃描了無數次,這樣一來,我只按了一次,時間位就會響應無數次,實現了無數次的加1,從而無法實現6鍵的功能。
匯編源程序:
INTCSR_BYTE0 EQU 9438H
INTCSR_BYTE1 EQU 9439H
INTCSR_BYTE2 EQU 943AH
INTCSR_BYTE3 EQU 943BH
IMB4_BYTE3 EQU 941FH
MY8254_COUNT0 EQU 9C40H
MY8254_COUNT1 EQU 9C41H
MY8254_COUNT2 EQU 9C42H
MY8254_MODE EQU 9C43H
MY8255_A EQU 9C60H
MY8255_B EQU 9C61H
MY8255_C EQU 9C62H
MY8255_MODE EQU 9C63H
IRQ EQU 01C8H
DATA SEGMENT
CSBAK DW ?
IPBAK DW ?
MKBAK DB ?
ADJUST DB 00H ;調整位標志
FLASH DB 00H ;閃爍標志位
PAUSE DB 0B ;暫停標志位
KEYMARK DB 0B ;按鍵標志位
INKEY DB 00H ;按鍵
SECONDA DB 00H ;秒個位
SECONDB DB 00H ;秒十位
MINUTEA DB 00H ;分個位
MINUTEB DB 00H ;分十位
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;數碼管0-9的編碼
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
CLI
MOV AX,DATA
MOV DS,AX
MOV DX,INTCSR_BYTE0
MOV AL,00H
OUT DX,AL
MOV DX,INTCSR_BYTE1
MOV AL,1FH
OUT DX,AL
MOV DX,INTCSR_BYTE2
MOV AL,3FH
OUT DX,AL
MOV DX,INTCSR_BYTE3
MOV AL,00H
OUT DX,AL
MOV AX,0000H
MOV ES,AX
MOV DI,01ccH ;保存系統中斷矢量
MOV AX,ES:[DI]
MOV IPBAK,AX
MOV AX,OFFSET MYINT
CLD
STOSW
MOV AX,ES:[DI]
MOV CSBAK,AX
MOV AX,SEG MYINT ;設置中斷矢量
STOSW
IN AL,0A1H
MOV MKBAK,AL
AND AL,0F7H
OUT 0A1H,AL
STI ;開中斷
MOV DX,MY8254_MODE ;8254初始化
MOV AL,15H ; 00010101:計數器0,只讀低八位,方式2分頻器,十進制
OUT DX,AL
MOV DX,MY8254_COUNT0
MOV AL,0
OUT DX,AL
MOV DX,MY8255_MODE ;8255初始化
MOV AL,81H ;10000001:A口:方式0,輸出,B口:方式 0 ,
;輸出,C口:低四位輸入,高四位輸出
OUT DX,AL
A1: NOP ;等待
MOV CX,32H
A2: MOV DX, MY8255_B
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET LED
MOV AL,SECONDA
XLAT LED
CMP ADJUST,01H ;是否調整秒的個位
JNE DIS_SECONDA
CMP FLASH,0FFH ;是否閃爍
JNE DIS_SECONDA
AND AL,00H ;熄滅數碼管(若FLASH=1)
DIS_SECONDA: ;顯示秒的個位
OUT DX, AL
MOV DX,MY8255_A
MOV AL,0111B
OUT DX,AL
CALL KEYCTR ;調用按鍵處理程序
CALL DELAY ;調用延遲程序
MOV DX,MY8255_B
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET LED
MOV AL,SECONDB
XLAT LED
CMP ADJUST,02H ;是否調整秒的十位
JNE DIS_SECONDB
CMP FLASH,0FFH
JNE DIS_SECONDB
AND AL,00H
DIS_SECONDB: ;顯示秒的十位
OUT DX,AL
MOV DX,MY8255_A
MOV AL,1011B
OUT DX,AL
CALL KEYCTR
CALL DELAY
MOV DX,MY8255_B
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET LED
MOV AL,MINUTEA
XLAT LED
CMP ADJUST,03H ;是否調整分的個位
JNE DIS_MINUTEA
CMP FLASH,0FFH
JNE DIS_MINUTEA
AND AL,00H
DIS_MINUTEA: ;顯示分的個位
ADD AL,80H ;顯示XX.XX中的點「.」
OUT DX,AL
MOV DX,MY8255_A
MOV AL,1101B
OUT DX,AL
CALL KEYCTR
CALL DELAY
MOV DX,MY8255_B
MOV AX,DATA
MOV DS,AX
MOV BX , OFFSET LED
MOV AL, MINUTEB
XLAT LED
CMP ADJUST,04H ;是否調整分的十位
JNE DIS_MINUTEB
CMP FLASH,0FFH
JNE DIS_MINUTEB
AND AL,00H
DIS_MINUTEB: ;顯示分的十位
OUT DX,AL
MOV DX,MY8255_A
MOV AL , 1110B
OUT DX,AL
CALL KEYCTR
CALL DELAY
LOOP SK1
JMP SK2
SK1: JMP A2
SK2: JMP A1
MYINT: PUSH DS
PUSH AX
PUSH DX
MOV DX,IMB4_BYTE3
IN AL,DX
MOV DX,INTCSR_BYTE2
MOV AL,3FH
OUT DX,AL
;清8259中斷標志
MOV AL,63H ;根據中斷號修改
OUT 0A0H,AL
MOV AL,62H
OUT 20H,AL
MOV AX,DATA
MOV DS,AX
NOT FLASH ;中斷處理程序
MOV KEYMARK,0B
CMP PAUSE,0B
JNE L1
INC SECONDA
CMP SECONDA,0AH
JC L1
MOV SECONDA,00H
INC SECONDB
CMP SECONDB,06H
JC L1
MOV SECONDB,00H
INC MINUTEA
CMP MINUTEA,0AH
JC L1
INC MINUTEB
MOV MINUTEA,00H
CMP MINUTEB,06H
JC L1
MOV MINUTEB,00H
L1: POP DS
POP AX
POP DX
IRET
KEYCTR PROC NEAR
MOV INKEY,AL
MOV DX,MY8255_C
IN AL,DX
AND AL,03H ;高六位清零
CMP AL,10B ;是否按下Y1行
JNE INY2
ADD INKEY,00H
JMP JUDGKEY
INY2: CMP AL,01B ;是否按下Y2行
JNE SKIP
ADD INKEY,10000B
JUDGKEY:
CMP INKEY,01110B ;是否按下1鍵
JNE KEY2
AND SECONDA,00H ;時間位清零
AND SECONDB,00H
AND MINUTEA,00H
AND MINUTEB,00H
SKIP: JMP BACK
KEY2: CMP INKEY,01101B ;是否按下2鍵
JNE KEY3
AND PAUSE,0B ;啟動計時
JMP BACK
KEY3: CMP INKEY,01011B ;是否按下3鍵
JNE KEY4
MOV PAUSE,1B ;暫停計時
JMP BACK
KEY4: CMP INKEY,00111B ;是否按下4鍵
JNE KEY5
MOV DX,MY8255_A
MOV AL,0FFH ;熄滅數碼管,程序退出
OUT DX,AL
CALL DELAY
MOV AX,4C00H
INT 21H
JMP BACK
KEY5: CMP INKEY,11110B ;是否按下5鍵
JNE KEY6
CMP KEYMARK,0B
JNE KEY6
MOV KEYMARK,1B
MOV PAUSE,1B
CMP ADJUST,04H ;是否已調整完分的十位
JE TL
INC ADJUST
JMP BACK
TL: AND ADJUST,00H
JMP BACK
KEY6: CMP INKEY,11101B ;是否按下6鍵
JNE BACK
CMP KEYMARK,0B
JNE BACK
MOV KEYMARK,1B
CMP ADJUST,01H ;是否調整秒的個位
JNE AD1
INC SECONDA ;秒的個位加1
CALL OUTCLEAR ;判斷溢出
JMP BACK
AD1: CMP ADJUST,02H ;是否調整秒的十位
JNE AD2
INC SECONDB
CALL OUTCLEAR
JMP BACK
AD2: CMP ADJUST,03H ;是否調整分的個位
JNE AD3
INC MINUTEA
CALL OUTCLEAR
JMP BACK
AD3: CMP ADJUST,04H ;是否調整分的十位
JNE BACK
INC MINUTEB
CALL OUTCLEAR
BACK: RET
KEYCTR ENDP
OUTCLEAR PROC NEAR ;溢出清零程序
CMP SECONDA,0AH
JC Q1
AND SECONDA,00H
Q1: CMP SECONDB,06H
JC Q2
AND SECONDB,00H
Q2: CMP MINUTEA,0AH
JC Q3
AND MINUTEA,00H
Q3: CMP MINUTEB,06H
JC Q4
AND MINUTEB,00H
Q4: RET
OUTCLEAR ENDP
DELAY: PUSH CX ;延遲程序
MOV CX,1111H
DXMS: LOOP DXMS
POP CX
RET
CODE ENDS
END START
㈤ 微機原理與介面課程設計倒計時器
你可以讓8253計秒產生中斷,然後將倒計時時間在中斷里減1。倒計時時間可以是時、分、秒,秒到0後再減就將分鍾減1,秒變59等。
主程序顯示是循環的,就是不斷去讀取那個倒計時時間,並顯示。
㈥ 微機原理與介面技術課程設計之數字顯示倒計時器
DATAS SEGMENT
sec db 24 ;倒數的秒數,可以隨意更改
osec db 0
startmsg db "Counting down .... press [p] to puase, [c] to continue, [s] to stop",13,10,"$"
timesup db 13,10,"Times up!"
endmsg db 13,10,"Thanks for using, bye~$"
secStr db 6 p ("$")
curpg db 0
ispause db 0
x db 0
y db 0
DATAS ENDS
STACKS SEGMENT
db 64 p(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
push ax
push bx
push cx
push dx
MOV AX,DATAS
MOV DS,AX
lea dx,startmsg
call puts
;讀取時間
mov ah,2ch
int 21h
mov osec,dh ;記下秒數
call getxy ;取得游標的位置
;倒數,顯示倒數,查鍵盤。
;倒數的原理就是 osec 和現在秒數的對比得出
timer:
mov ah,2ch
int 21h
mov ah,6 ;檢查鍵盤
mov dl,0ffh
int 21h
cmp al,"s" ;終止程式
jz done
cmp al,"p" ;暫停程式
jz pause
cmp al,"c" ;繼續程式
jz continue
cmp ispause,0
jg timer
cmp osec,dh ;檢查秒數的變化
jnz interval
jmp timer
interval:
mov osec,dh ;更新秒數
dec sec
call showcountdown ;顯示倒數秒數(sec)
cmp sec,0
jg timer
lea dx,timesup
call puts
jmp done
pause:
mov ispause,1
jmp timer
continue:
mov ispause,0
jmp timer
puts:
mov ah,9
int 21h
ret
showcountdown:
call setxy ;保持顯示倒數的位置
xor ax,ax
xor dx,dx
mov al,sec
cbw
mov bl,10
div bl
add al,"0"
add ah,"0"
lea bx,secStr
mov byte ptr[bx],al
mov byte ptr [bx+1],ah
mov dx,bx
call puts
ret
;讀取游標的位置
getxy:
mov ah,3
int 10h
mov x,dl
mov y,dh
mov curpg,bh
ret
;設置游標的位置
setxy:
mov ah,2
mov bh,curpg
mov dl,x
mov dh,y
int 10h
ret
done:
pop dx
pop cx
pop bx
pop ax
MOV AH,4CH
INT 21H
CODES ENDS
END START
㈦ 微機原理與介面技術8254的設計題
微機原理與介面技術課程設計
課程尺液設計題目:
溫度州困純控制冊咐系統
㈧ 微機原理課程設計:通過使用軟體延時,編寫一個程序,在屏幕上依次顯示9、8、7。。。1、0十個數字。。。
CODESEGMENT
ASSUMECS:CODE
START:
MOVCX,3;設外循環3次
@0:
PUSHCX
MOVCX,10;設內循環10次
@1:
MOVAH,2
MOVDX,CX
DECDX;將內循環變數減一後輸出
ORDL,30H
神純指INT21H
MOVAX,18;延時18個單位,約等於1秒
CALLDELAY_PROC
LOOP@1
CALLLFCR;換行回車
POPCX
LOOP@0
MOVAH,4CH
INT21H
LFCR:PUSHAX
PUSHDX
MOVAH,2
MOVDL,13
INT21H
MOVDL,10
INT21H
POPDX
POPAX
游配RET
;===============================================================
DELAY_PROCPROC褲好NEAR;延遲子程式,延遲ax/18秒
PUSHES
PUSHDX
MOVDX,40H
MOVES,DX
MOVDX,ES:[006CH];取系統1/18秒計數
ADDDX,AX;延時x/18
DELAY10:
CMPES:[006CH],DX;時限到了?
JBEDELAY10;沒
POPDX
POPES
RET
DELAY_PROCENDP
;============================================================
CODEENDS
ENDSTART
㈨ 求教各位微機原理大師!!一個搶答器實驗!!!
data segment
CountDown = 5;倒計時的秒飢鄭數,也是搶答時間上限,不要超過9秒
msgCD db 'CountDown','$'
msgU db 'User '
Uid db ?
db '檔耐: '
Time db ?,'.',?,?,' Seconds.$'
UKey db 'qzpm';按鍵ASCII碼
UCount = ($-UKey);搶答人數
msg db 'Press Any key to Exit!$'
msg1 db 'No one Press!$'
StartTC dw ?,? ;搶答開始時鍾計數
EndTC dw ?,? ;搶答結束時鍾計數
data ends
PRTSTR MACRO X;輸出字元串
LEA DX,X
MOV AH,09H
INT 21H
ENDM
SETXY MACRO X,Y;設置游標位置,X=行,Y=列
XOR BH,BH
MOV AH,02H
MOV DH,X
MOV DL,Y
INT 10H
ENDM
code segment
assume cs:code,ds:data
DELAY PROC far;延時一秒
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,02H
INT 1AH
MOV BL,DH
D_P:MOV AH,02H
INT 1AH
CMP BL,DH
JZ D_P
POP DX
POP CX
POP BX
POP AX
RET
DELAY ENDP
start:
mov ax,data
mov ds,ax
;設置80×25黑白字元顯示模式
MOV AH,00H
MOV AL,02H
INT 10H
SETXY 12,35
PRTSTR msgCD;屏幕中間顯示CountDown
;倒計時開始爛蠢頌
xor cx,cx
mov cl,CountDown
@@:
SETXY 13,40
mov dl,cl
add dl,30h
mov ah,02h
int 21h;顯示倒計時秒數
call DELAY;延時一秒
loop @B
SETXY 13,40
mov dl,cl
add dl,30h
mov ah,02h
int 21h
;搶答計時開始
mov ah,0
int 1ah ;cx:dx=獲得自午夜以來的時鍾計數,每秒18.2次.
mov StartTC,dx
mov StartTC+2,cx;保存搶答開始時鍾計數
mov bx,CountDown*91/5;CountDown秒所經過的時鍾數
add dx,bx
adc cx,0
mov EndTC,dx
mov EndTC+2,cx ;計算並保存搶答結束計數
L_again:
mov ah,06h
mov dl,0ffh
int 21h
or al,al
jz L_test;沒按鍵則直接檢測是否已到搶答時間上限
xor si,si
@@:
cmp UKey[si],al
je L_Press
inc si
cmp si,UCount
jb @B
L_test:
mov ah,0
int 1ah
mov bx,EndTC
mov ax,EndTC+2
sub bx,dx
sbb ax,cx
jae L_again
SETXY 14,33
PRTSTR msg1
jmp @F
L_Press:
mov ah,0
int 1ah;獲得按鍵時刻的時鍾數
inc si
mov ax,si
add al,30h
mov Uid,al;存貯按鍵用戶編號
mov bx,StartTC
mov ax,StartTC+2
sub dx,bx
sbb cx,ax;計算從計時開始到按鍵經過的時鍾數,最後存在dx中
mov ax,1000
mul dx
mov bx,182
div bx;將時鍾數換算成百分秒數,存放在ax中
mov bl,100
div bl;計算整秒數,結果在al中
add al,30h
mov Time,al
mov al,ah
xor ah,ah
mov bl,10
div bl;計算十分秒數,結果在al中
add al,30h
mov Time+2,al
add ah,30h
mov Time+3,ah;百分秒
SETXY 14,34
PRTSTR msgU
@@:
SETXY 15,29
PRTSTR msg
@@:
mov ah,06h
mov dl,0ffh
int 21h;等待用戶按鍵退出
cmp al,0
je @B
mov ax,4c00h
int 21h
code ends
end start