【微機原理作業】從0開始設計RTC系統(一)
【微機原理作業】從0開始設計RTC系統(二)
上兩篇博客實現了秒錶功能,但我們希望鐘錶還有調整時鐘的功能,所以需要外加一個按鍵調整時鐘電路。
思路
仿真硬件
8255A :A、B口輸出,C口上部輸出,下部輸入
重置清零按鈕按下後,時鐘從0開始計時
秒調整按鈕按下後,秒數加1,其餘類似
其餘硬件不變
彙編程序
主程序
LP:
; 主任務
CALL KEY
CALL DISP ; 顯示子程序調用
JMP LP ; 循環
按鍵
KEY PROC
MOV DX, PORTC
IN AL, DX
TEST AL, 8H
JZ NEXTHOU
TEST AL, 4H
JZ NEXTMIN
TEST AL, 2H
JZ NEXTSEC
TEST AL, 1H
JZ RESET
CALL DISP ; 消抖
CALL DISP
CALL DISP
MOV DX, PORTC
IN AL, DX
TEST AL, 8H
JZ NEXTHOU
TEST AL, 4H
JZ NEXTMIN
TEST AL, 2H
JZ NEXTSEC
TEST AL, 1H
JZ RESET
重置清零
RESET:
; 清零
MOV DX, PORTC
IN AL, DX
TEST AL, 1H
JNZ EXITKEY
CALL DISP
CALL DISP
CALL DISP
MOV DX, PORTC
IN AL, DX
TEST AL, 1H
JNZ EXITKEY
MOV HOU, 0
MOV MIN, 0
MOV SEC, 0
CALL DELAY
調整秒
NEXTSEC:
; 秒調整
MOV DX, PORTC
IN AL, DX
TEST AL, 2H
JNZ EXITKEY
CALL DISP
CALL DISP
CALL DISP
MOV DX, PORTC
IN AL, DX
TEST AL, 2H
JNZ EXITKEY
MOV AL, SEC
ADD AL, 1
DAA
CALL DELAY
MOV SEC, AL
CMP SEC, 60H
JB NEXTSEC
MOV SEC, 0
調整分
NEXTMIN:
; 分調整
MOV DX, PORTC
IN AL, DX
TEST AL, 4H
JNZ EXITKEY
CALL DISP
CALL DISP
CALL DISP
MOV DX, PORTC
IN AL, DX
TEST AL, 4H
JNZ EXITKEY
MOV AL, MIN
ADD AL, 1
DAA
CALL DELAY
MOV MIN, AL
CMP MIN, 60H
JB NEXTMIN
MOV MIN, 0
調整時
NEXTHOU:
; 時調整
MOV DX, PORTC
IN AL, DX
TEST AL, 8H
JNZ EXITKEY
CALL DISP
CALL DISP
CALL DISP
MOV DX, PORTC
IN AL, DX
TEST AL, 8H
JNZ EXITKEY
MOV AL, HOU
ADD AL, 1
DAA
CALL DELAY
MOV HOU, AL
CMP HOU, 24H
JB NEXTHOU
MOV HOU, 0
問題
-
仿真報錯:invalid internal memory size == NULL(internal memory mode)
解決:將8086中的參數設置第2項 ,設置 intener memory 爲10000 -
時鐘最小單位不是1秒
解決:修改分頻數和延時 -
調時過快
解決:修改延時 -
字符9和8顯示不全
上網查:
(1)延時不夠,出現鬼影
(2)顯示字符之前沒有清零
這些方法我都試過了,但沒有解決問題,如果有大佬知道怎麼弄,麻煩評論告訴我