📄 myasm.a51
字号:
; 汇编代码部分
$NOMOD51
NAME MYASM
#include "REG51.H" ; 头文件在当前目录下,允许重复说明
?PR?_fnAdd?MYASM SEGMENT CODE ; 码段定义叙述,需要对本文件内的所有
?PR?_fnSub?MYASM SEGMENT CODE ; 函数进行描述
?PR?timerCt0?MYASM SEGMENT CODE
EXTRN DATA (aa) ; 全局变量在主程序中已有定义
extrn CODE (_fnMul) ; 外部C函数调用说明
PUBLIC timerCt0 ; 对外传递函数名叙述
PUBLIC _fnSub
PUBLIC _fnAdd
;------------------------------------------------------------------------
; 相对应于C函数的函数格式:
; unsigned char fnAdd( unsigned char x ,unsigned char y )
;------------------------------------------------------------------------
RSEG ?PR?_fnAdd?MYASM
_fnAdd:
USING 0
PUSH ACC
lcall _fnMul ; *** 调用C函数 ***
MOV A,R7
ADD A,R5
MOV R7,A
POP ACC
?C0001:
RET
;------------------------------------------------------------------------
; 相对应于C函数的函数格式:
; unsigned char fnSub( unsigned char x ,unsigned char y )
;------------------------------------------------------------------------
RSEG ?PR?_fnSub?MYASM
_fnSub:
USING 0
PUSH ACC
CLR C
MOV A,R7
SUBB A,R5
MOV R7,A
POP ACC
?C0002:
RET
;-----------------------------------------------------------------------
; 中断函数中断号对应向量表的说明,如果还有其他中断使用汇编的,请一并顺序
; 在此叙述。
;-----------------------------------------------------------------------
CSEG AT 0000BH ; 定时中断0
LJMP timerCt0
;------------------------------------------------------------------------
; 相对应于C函数的函数格式:
; void timerCt0(void) interrupt 1
; 这是一个定时中断函数,作为演示没有做太多的处理,仅仅对(int)aa++。中断函
; 数须要特别留意现场保护
;------------------------------------------------------------------------
RSEG ?PR?timerCt0?MYASM
USING 0
timerCt0:
PUSH ACC
PUSH PSW
MOV TH0,#0FFH
MOV TL0,#0E0H
INC aa+01H
MOV A,aa+01H
JNZ ?C0004
INC aa
?C0004:
POP PSW
POP ACC
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -