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中。
广告