在时钟频率为0.5微秒的系统中编写一个程序,以从FFH到00H的十六进制连续计数。使用寄存器C在每个计数之间设置1ms的延迟,并在一个输出端口上显示输出。
问题分析:
- 十六进制计数器的设置方法是:将起始编号加载到寄存器中,并将其递减直到达到零,然后再将其递减以产生-1,这是FFH的2的补码。因此,寄存器再次达到FFH。
- 1ms时间延迟是按照流程图中所示的过程设置的-
寄存器中装入了适当的数字,因此执行以上循环会产生1ms的时间延迟。
程序:
Address | Label | Mnemonics |
---|---|---|
2000H | MVI B, FFH | |
2002H | NEXT | DCR B |
2003H | MVI C, COUNT | |
2005H | DELAY | DCR C |
2006H | JNZ DELAY | |
2009H | MOV A, B | |
200AH | OUTPORT# | |
200CH | JMP NEXT |
C寄存器是时间延迟寄存器,由值COUNT加载以产生1ms的时间延迟。
要找到COUNT的值,我们要做的是-
TD = TL + TO
where- TD = Time Delay
TL = Time delay inside loop
TO = Time delay outside loop
延迟循环包括两条指令-DCR C(4个T状态)和JNZ(10个T状态)
所以T L = 14 *时钟周期* COUNT
=> 14 *(0.5 * 10 -6 )*个
=>(7 * 10 -6 )* COUNT
循环外的延迟包括-
DCR B:4T
MVI C,数量:7吨
MOV A,B:4T
出口:10吨
JMP:10吨
合计:35T
T O = 35 *时钟周期=> 17.5微秒
因此,1毫秒=(17.5+ 7 * COUNT)微秒
因此,COUNT =(140) 10