一、任务需求
指示灯LED4闪烁,亮0.5秒,灭0.5秒,无限循环
二、针对硬件的编程
- 1、确定原理图
- 2、确定硬件的物理关系
三、设计步骤
1.用自己的语言描述工作流程
- 1.1指示灯LED4亮
- 1.2延时0.5秒
- 1.3指示灯LED4灭
- 1.4延时0.5秒
- 1.5跳转到1.1步
2.确定硬件连接关系,确定驱动逻辑
- CLR 清零
- SETB 置高电平
3. 延时子程序
实现方法:
软件延时 | 与单片机相关 指令执行周期相关 | 工程里面这种做法不可取 |
硬件延时 | 与单片机相关 与硬件定时器相关 | 均与系统时钟相关 |
软硬结合 | 取长补短 |
软件延时
3.1确定系统时钟
系统时钟 | 12MHZ |
单周期指令 | 1us |
双周期指令 | 2us |
四周期指令 | 4us |
时钟频率f:12MHZ
时钟周期T:1/f
机器周期:1/12MHZ*12=1us
指令周期:执行一条指令所花费的时间 以机器周期为基本单位
3.2确定指令周期数
总线的位宽 8位 1字节 0-255(不能超过这个范围)
R7==0 顺序执行(执行下一条指令)
循环嵌套
更简洁的写法
C语言中的函数在汇编语言中叫子程序 ——D500ms
LCALL——长调用 长指的是64k空间里面都能调用到
D1ms 代表的是地址 是子程序的名字
RET返回(主函数)
四、完整的汇编指令
ORG不是汇编指令,是给汇编器看的
PC决定了程序执行的位置
地址总线:16位
数据总线:8位
单片机读取机器码的 思考过程
执行指令的方式
PC指针初始是0000H 由硬件决定 复位后为0
做了长跳转到main 是为了把中断服务程序的入口地址给预留出来
堆栈指针
PC默认值为07H,永远用不到的
压进去的第一个数是PC的低八位
本文来自【手工汇编_004_程序执行过程】