4 8051宏定义函数举例

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值