目的
用代码说明延迟执行原理
实现功能:累加器每隔一小段时间,自增加一,增加有限次
ORG 0000H ;始地址
AJMP START ;Jump到Start
ORG 0003H ;中断地址
START: MOV A , #0000H ;立即寻址,将常数送到累加器A
LOOP: MOV R0 , #0006H ;立即寻址,将常数送到寄存器R0
DJNZ R0 , DELAY ;如果R0不等于0,R0-1跳到延迟函数
AJMP LAST ;跳转到LAST
;延迟函数
DELAY: MOV R1 , #0005H ;立即寻址,将常数送到寄存器R1
WAIT: DJNZ R1 , WAIT
INC A ;累加器A自增加一
AJMP LOOP ;跳转到Loop
LAST: NOP ;空指令
END
在Keil查看系统是怎么运作的
1.打开调试功能
如果Keil报错报error:56的时候请先编译(Build)
2.寄存器窗口
符号说明
符号 | 名称 |
---|---|
Regs | 寄存器0~7 |
a | 累加器A |
b | 累加器B |
PC | 程序计数器(保存下一条指令地址) |
states | 步数 |
dptr | 16位数据指针寄存器 |
sec | 时间(秒) |
3.单步调试
可以让程序一句一句执行,然后查看寄存器窗口观察各变量的变化
4.查看汇编语句是怎样保存在内存
4.1 在Disassembly窗口可查看程序下一条执行到哪
符号对比
符号 | 名称 |
---|---|
C:0x0000 | 内存地址 |
0103 | 内存内容 |
AJMP | 指令 |
4.2查看内存地址里的内容
假如我想查看,内存0x0001里保存的是什么,就在Address搜索0x0001,在下面显示框就显示内容是03
5.延迟原理
延迟时间=指令执行次数 X 执行单条指令的时间(不同类型指令执行时间不一定相同)
而指令执行时间还与晶振频率有关