📄 allfunc.asm
字号:
;--------------------------------
;- MACRO DEFINITION -
;--------------------------------
PUSH_STACK MACRO
PUSH AX
PUSH HL
PUSH BC
PUSH DE
ENDM
POP_STACK MACRO
POP DE
POP BC
POP HL
POP AX
ENDM
;--------------------------------
;- I/O DEFINE -
;--------------------------------
LED1 EQU P2.3
LED2 EQU P13.0
LED3 EQU P4.5
LED4 EQU P12.3
;--------------------------------
;- SYMBOL DECLARATION -
;--------------------------------
ram_start EQU 0FE7FH
ram_end EQU 0FEFFH
stack EQU 0FEFFH
;--------------------------------
;- RAM DECLARATION -
;--------------------------------
DATA DSEG at 0FE80H
value: DS 1
IntP0Flag: DS 1
Timer80Flag: DS 1
number: DS 1
i: DS 1
;--------------------------------
;- VECTOR TABLE -
;--------------------------------
INT0 CSEG at 0000H
DW Start
INT11 CSEG at 001AH
INTTM80: DW Inttm80
INT2 CSEG at 0008H
INTP0: DW Intp0
;--------------------------------
PROG CSEG at 80H
Start:
DI
Initial:
MOV PCC, #0
MOV PPCC, #0
MOV LSRCM,#01H
MOV OSTS, #0
MOV WDTM, #70H
CLR1 PMC2.3
CLR1 PM2.3
CLR1 PM4.5
CLR1 PM12.3
MOV ADS, #00
SET1 PMC2.0
SET1 PM2.0
SET1 LED1
SET1 LED2
SET1 LED3
SET1 LED4
MOVW AX, #stack
MOVW SP, AX
MOVW HL, #ram_start
Ram_clear:
MOV A,#0
MOV [HL],A
INCW HL
MOVW AX,HL
CMPW AX,#ram_end
BC $Ram_clear
CALL !Ini_TM80
CALL !Ini_Intp0
EI
Main_loop:
CALL !AD_convert
CMP IntP0Flag, #00H
BZ $Call_show0
CMP IntP0Flag, #01H
BZ $Call_show1
CMP IntP0Flag, #02H
BZ $Call_show2
CMP IntP0Flag, #03H
BZ $Call_show3
BR Main_loop
Call_show0:
CALL !Show0
BR Exit_call_show
Call_show1:
CALL !Show1
BR Exit_call_show
Call_show2:
CALL !Show2
BR Exit_call_show
Call_show3:
CALL !Show3
Exit_call_show:
BR Main_loop
;----------------------------------------
AD_convert:
SET1 ADCE
NOP
NOP
NOP
NOP
NOP
SET1 ADCS
ADLoop:
BF ADIF, $ADLoop
MOV A, ADCRH
MOV CR80, A
CLR1 ADCS
CLR1 ADCE
CLR1 ADIF
RET
;-------------------------------------------
Ini_TM80:
CLR1 TCE80
MOV TMC80, #06H
MOV CR80, #00H
CLR1 TMIF80
CLR1 TMMK80
RET
;-------------------------------------------
Ini_Intp0:
MOV INTM0,#00
CLR1 PMK0
RET
;-------------------------------------------
Intp0:
PUSH_STACK
INC IntP0Flag
CMP IntP0Flag, #04H
BNZ $Intp0_exit
MOV IntP0Flag, #00H
Intp0_exit:
POP_STACK
RETI
;-----------------------------------------
Inttm80:
PUSH_STACK
MOV Timer80Flag, #01H
POP_STACK
RETI
;-------------------------------------------
Restart_TM80:
CLR1 TCE80
MOV Timer80Flag, #00H
SET1 TCE80
RET
;------------------------------------------
Wait:
CALL !Restart_TM80
Wait_Loop1:
CMP number, #00H
BZ $Wait_exit
Wait_Loop0:
CMP Timer80Flag, #00H
BZ $Wait_Loop0
MOV Timer80Flag, #00H
DEC number
CMP number, #00H
BNZ $Wait_Loop1
Wait_exit:
RET
;--------------------------------------------
Drive_LED:
MOV A, value
AND A, #08H
CMP A, #08H
BNZ $LED1_off
CLR1 LED1
BR Next1
LED1_off:
SET1 LED1
Next1:
MOV A, value
AND A, #04H
CMP A, #04H
BNZ $LED2_off
CLR1 LED2
BR Next2
LED2_off:
SET1 LED2
Next2:
MOV A, value
AND A, #02H
CMP A, #02H
BNZ $LED3_off
CLR1 LED3
BR Next3
LED3_off:
SET1 LED3
Next3:
MOV A, value
RORC A,1
BNC $LED4_off
CLR1 LED4
BR Next4
LED4_off:
SET1 LED4
Next4:
RET
;-----------------------------------------
Show0:
MOV value, #01H
CALL !Drive_LED
MOV i, #00H
Show0_loop1:
CALL !Drive_LED
MOV A, value
ROL A, 1
ADD A, #01H
MOV value, A
MOV number, #02H
CALL !Wait
INC i
CMP i, #04H
BNZ $Show0_loop1
MOV value, #08H
MOV i, #00H
Show0_loop2:
CALL !Drive_LED
MOV A, value
ROR A, 1
ADD A, #08H
MOV value, A
MOV number, #02H
CALL !Wait
INC i
CMP i, #04H
BNZ $Show0_loop2
RET
;---------------------------------------
Show1:
MOV i, #00H
Show1_loop1:
MOV value, #09H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
CMP i, #04H
BNZ $Show1_loop1
MOV i, #00H
Show1_loop2:
MOV value, #06H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
CMP i, #04H
BNZ $Show1_loop2
RET
;------------------------------------------
Show2:
MOV value, #05H
CALL !Drive_LED
MOV number, #03H
CALL !Wait
MOV value, #0AH
CALL !Drive_LED
MOV number, #03H
CALL !Wait
RET
;-----------------------------------------
Show3:
MOV i, #00H
Show3_loop1:
MOV value, #0CH
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
CMP i, #04H
BNZ $Show3_loop1
MOV i, #00H
Show3_loop2:
MOV value, #03H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
CMP i, #04H
BNZ $Show3_loop2
RET
;------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -