📄 adc.bak
字号:
;--------------------------------
;- 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
LED_active: DS 1
LED_duty: DS 1
toggle: DS 1
value: DS 1
time: DS 1
result: DS 1
;--------------------------------
;- VECTOR TABLE -
;--------------------------------
INT0 CSEG at 0000H
DW Start
INT1 CSEG at 0006H
INTLVI: DW Start
INT11 CSEG at 001AH
INTTM80: DW Inttm80
;--------------------------------
OPT DSEG at 80H
OPTION: DB 10011000b
PROG CSEG at 82H
Start:
DI
Initial:
MOV PCC, #0
MOV PPCC, #0
MOV IF0, #00
MOV IF1, #00
MOV MK0, #0FFH
MOV MK1, #0FFH
MOV LSRCM,#01H
MOV OSTS, #0
MOV WDTM, #70H
CLR1 PMC2.3
CLR1 PM2.3
CLR1 PM4.5
CLR1 PM12.3
SET1 PMC2.0
SET1 PM2.0
CLR1 LED1
CLR1 LED2
CLR1 LED3
CLR1 LED4
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
Ram_initial:
MOV time,#10
CALL !Ini_TM80
EI
Main_loop:
CALL !AD_convert
MOV A,result
ROL A,1
ROL A,1
AND A,#03H
MOV LED_active,A
MOV A,result
AND A,#03FH
XCH A,X
MOV A,#040H
SUB A,X
MOV LED_duty,A
CALL !Wait
BR Main_loop
;================================
;- SUB-program -
;================================
Wait:
NOP
NOP
NOP
NOP
NOP
NOP
RET
;--------------------------------
AD_convert:
MOV ADS, #00
SET1 ADCE
NOP
NOP
NOP
SET1 ADCS
ADLoop:
BF ADIF, $ADLoop
MOV A, ADCRH
MOV result,A
CLR1 ADCS
CLR1 ADCE
CLR1 ADIF
RET
;--------------------------------
Ini_TM80:
CLR1 TCE80
MOV TMC80, #06H
MOV A, time
MOV CR80, A
SET1 TCE80
CLR1 TMIF80
CLR1 TMMK80
RET
;---------------------------------
Drive_LED:
MOV A, value
ROR A,1
ROR A,1
ROR A,1
RORC A,1
BNC $LED1_off
CLR1 LED1
BR Next1
LED1_off:
SET1 LED1
Next1:
MOV A, value
ROR A,1
ROR A,1
RORC A,1
BNC $LED2_off
CLR1 LED2
BR Next2
LED2_off:
SET1 LED2
Next2:
MOV A, value
ROR A,1
RORC A,1
BNC $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
;---------------------------------
Inttm80:
PUSH_STACK
CLR1 CY
MOV A, toggle
RORC A,1
BC $Flash_off
MOV toggle,#01H
MOV A,LED_active
CMP A,#00
BZ $Set_value_1
CMP A,#01H
BZ $Set_value_3
CMP A,#02H
BZ $Set_value_7
CMP A,#03H
BZ $Set_value_f
BR Exit
Flash_off:
MOV toggle,#00H
MOV A,LED_active
CMP A,#00
BZ $Set_value_0
CMP A,#01H
BZ $Set_value_1
CMP A,#02H
BZ $Set_value_3
CMP A,#03H
BZ $Set_value_7
BR Exit
Set_value_0:
MOV value,#00H
CALL !Drive_LED
BR Exit
Set_value_1:
MOV value,#01H
CALL !Drive_LED
BR Exit
Set_value_3:
MOV value,#03H
CALL !Drive_LED
BR Exit
Set_value_7:
MOV value,#07H
CALL !Drive_LED
BR Exit
Set_value_f:
MOV value,#0FH
CALL !Drive_LED
BR Exit
Exit:
MOV A,LED_duty
MOV time,A
CALL !Ini_TM80
POP_STACK
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -