?? 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 + -