8085程式模擬即時時鐘
現在讓我們來看一個Intel 8085微處理器的程式。在這個程式中,我們將看到如何使用8085生成即時時鐘。
問題陳述:
編寫8085組合語言程式來模擬即時時鐘。
討論:
在這個程式中,我們使用8085MPU建立一個即時時鐘。我們在這裡生成1秒的延遲來更新秒數。這個時鐘是24小時制時鐘。我們從00:00:00初始化時鐘。要將值顯示到七段顯示器上,我們必須使用一些埠IC和正確的配置。每60秒更新分鐘欄位,每60分鐘更新小時欄位。對於十進位制更新,在每次增量中使用DAA指令。
我們將小時欄位儲存到8008H,分鐘欄位儲存到8007H。秒值儲存在8009H位置。
注意:為了簡單起見,我們在這裡將數字儲存到記憶體中。要顯示數字,我們可以使用七段顯示器和其他顯示功能將其顯示在顯示器上。
輸入:
這裡我們沒有提供任何輸入。
流程圖:
程式:
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 00, 00 | BEG | LXI H,0000H | 將HL清零為0000H |
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。
廣告