-
本仓库相关网址:
CSDN文章地址 - https://blog.csdn.net/qq582880551/article/details/127594062
Gitee工程和源码地址 - https://gitee.com/langcai1943/8051-from-boot-to-application -
相关仓库:
嵌入式整体介绍,里面也描述了部分8051的内容:
才鲸嵌入式 / 嵌入式知识图谱WiKi - https://gitee.com/langcai1943/embedded-knowledge-wiki
C语言框架讲解,让你对C语言要学哪些东西有一个完整的了解:
embedded_programming_skills/ 0_doc / 02-C语言框架讲解.md - https://gitee.com/langcai1943/embedded_programming_skills/blob/develop/0_doc/02-C语言框架讲解.md
4)展示汇编宏定义函数和中断处理
- 工程文件:本文档同级目录/04_Macro_func_and_irq/04_Macro_func_and_irq.uvproj
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 经常会使用的宏定义函数
; 用汇编写函数时都要手动操作的压栈和弹栈,C语言中是形参和实参被编译器自动压栈弹栈了
PUSH_ALL MACRO
; PUSH只有一条指令,就是将直接地址压入堆栈(例如R0~R7是四组中的一组,就不能直接PUSH)
PUSH PSW ; 程序状态字
PUSH ACC ; 累加器
PUSH B ; 寄存器B,可做通用寄存器,在乘除法中与A寄存器配合
PUSH DPH ; 数据指针DPTR
PUSH DPL
; MOV指令有58条,操作对象不同,就是一条新的指令
; MOV的dst目标可以是R0~R7、@R0和@R1间接地址、直接地址、A累加器、C进位bit、直接寻址的bit、
; DPTR间接寻址,src源数据可以是#立即数、直接地址、R0~R7、@R0和@R1间接地址、
; C进位bit、直接寻址bit、A累加器
; https://blog.csdn.net/qq582880551/article/details/124063498
MOV A, D_PAGESEL ; 大容量RAM分页
PUSH ACC
MOV A,R0 ; R0~R7寄存器
PUSH ACC
MOV A,R1
PUSH ACC
MOV A,R2
PUSH ACC
MOV A,R3
PUSH ACC
MOV A,R4
PUSH ACC
MOV A,R5
PUSH ACC
MOV A,R6
PUSH ACC
MOV A,R7
PUSH ACC
ENDM
; POP的时候要和PUSH返回来
POP_ALL MACRO
POP ACC
MOV R7,A
POP ACC
MOV R6,A
POP ACC
MOV R5,A
POP ACC
MOV R4,A
POP ACC
MOV R3,A
POP ACC
MOV R2,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
POP ACC
MOV D_PAGESEL,A
POP DPL
POP DPH
POP B
POP ACC
POP PSW
ENDM
; 一些延时,在用IO模拟SPI或者I2C时会用到
NOP2 MACRO
NOP
NOP
ENDM
NOP4 MACRO
NOP2
NOP2
ENDM
NOP8 MACRO
NOP4
NOP4
ENDM
NOP16 MACRO
NOP8
NOP8
ENDM
NOP32 MACRO
NOP16
NOP16
ENDM
NOP64 MACRO
NOP32
NOP32
ENDM
NOP128 MACRO
NOP64
NOP64
ENDM
NOP256 MACRO
NOP128
NOP128
ENDM