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