8085微處理器即時時鐘模擬程式
在這裡,我們將看到一個有趣的問題。我們將瞭解如何使用8085微處理器模擬一個即時時鐘。
問題陳述−
編寫一個8085組合語言程式來模擬即時時鐘。
討論−
在這個程式中,我們使用8085MPU建立了一個即時時鐘。在這裡,我們生成1秒延遲來更新秒數。這個時鐘是24小時時鐘。我們從00:00:00初始化時鐘。要將值顯示到7段顯示器上,我們必須使用一些埠IC和正確的配置。每60秒更新分鐘欄位,每60分鐘更新小時欄位。對於十進位制更新,在每次增量中使用DAA指令。
我們將小時欄位儲存在8008H中,分鐘欄位儲存在8007H中。秒值儲存在位置8009H。
注意:這裡為了簡單起見,我們將數字儲存在記憶體中。要顯示數字,我們可以使用7段顯示器和其他顯示功能將其顯示在顯示器上。
輸入
這裡我們沒有提供任何輸入。
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 00, 00 | BEG | LXI H,0000H | 用0000H清零HL |
F003 | 22, 07, 80 | HR_MIN | SHLD 8007H | 將HL內容儲存在8007H和8006H中 |
F006 | AF | | XRA A | 清零A暫存器 |
F007 | 32, 09, 80 | N_SEC | STA 8009H | 將累加器內容儲存在8009H中 |
F00A | CD, 34, F0 | | CALL DELAY | 延遲1秒 |
F00D | 3A, 09, 80 | | LDA 8009H | 載入秒值 |
F010 | C6, 01 | | ADI 01H | 將01加到累加器中 |
F012 | 27 | | DAA | 調整十進位制 |
F013 | FE, 60 | | CPI 60H | 與60H比較 |
F015 | C2, 07, F0 | | JNZ N_SEC | 如果Z=0,跳轉到N_SEC |
F018 | 2A, 07, 80 | | LHLD 8007H | 從8007H載入HL |
F01B | 7D | | MOV A,L | 將L載入到A |
F01C | C6, 01 | | ADI 01H | 將01加到A |
F01E | 27 | | DAA | 十進位制調整 |
F01F | 6F | | MOV L,A | 將A載入到L |
F020 | FE, 60 | | CPI 60H | 將A與60H比較 |
F022 | C2, 03, F0 | | JNZ HR_MIN | 如果Z=0,跳轉到HR_MIN |
F025 | 2E, 00 | | MVI L,00H | 清零L暫存器 |
F027 | 7C | | MOV A,H | 將H載入到A |
F028 | C6, 01 | | ADI 01H | 將01加到A |
F02A | 27 | | DAA | 十進位制調整 |
F02B | 67 | | MOV H,A | 將A送回H |
F02C | FE, 24 | | CPI 24H | 將小時與24比較 |
F02E | C2, 03, F0 | | JNZ HR_MIN | 如果Z=0,跳轉到HR_MIN |
F031 | C3, 00 | | JMP BEG | 跳轉到開始 |
F034 | 0E, 02 | DELAY | MVI C,02H | 將計數初始化為02H |
F036 | 11, FF, FF | L1 | LXI D,FFFFH | 將DE載入為FFFFH |
F039 | 1B | L2 | DCX D | 減少DE |
F03A | 7A | | MOV A,D | 將D取到A |
F03B | B3 | | ORA E | 對A和E進行或運算 |
F03C | C2, 16, F0 | | JNZ L2 | 如果Z=0,跳轉到L2 |
F03F | 0D | | DCR C | 將C減1 |
F040 | C2, 13, F0 | | JNZ L1 | 如果Z=0,跳轉到L1 |
F043 | C9 | | RET | 從子程式返回 |
輸出
數字儲存在記憶體位置8008H – 8007H和8009H中。
廣告