?? zj927.s43
字號:
DIV2 RLC R12
JC DIV4
DEC R10
JZ DIV4
RLA R14
RLC R15
JNC DIV1
SUB R11,R15
SETC
JMP DIV2
DIV4 RET
;******************************************************************
;
; BIN4 TO BCD2
;
; INPUT R5
; OUTPUT R6
;******************************************************************
BIN4_BCD2 MOV #8,R7 ;BIN4 TO BCD2 SUB PROGRAM
CLR R6
BIN4LOOP RLA.B R5
DADD R6,R6
DEC R7
JNZ BIN4LOOP
RET
;******************************************************************
;
; DELAY10MS
;
;******************************************************************
DELAY10MS ;DELAY 10MS, MCLK=800KHz
DELAY10MSLOOP TST &DELAYTIME ;DELAYDATA : (0.01/(1/800000))/3=2666
JNZ DELAY10MSLOOP
RET
;******************************************************************
;
; DELAYMS
;
; INPUT R10
; DELAY R10*10US
;******************************************************************
DELAYMS DEC R10 ;MCLK=800KHz, 1 STEP = 1.25US
NOP ;TOTEL 8 STEP A LOOP
NOP
NOP
NOP
NOP
JNZ DELAYMS
RET
;******************************************************************
;
; DELAYMS
;
; INPUT R10
; DELAY R10*0.1S
;******************************************************************
DELAY01MS PUSH R14 ;DELAY R10*0.1MS, MCLK=800KHz
DELAY01MSLOOP1 MOV #4444,R14 ;(0.1/(1/800000))/3=26666
DELAY01MSLOOP DEC R14
JNZ DELAY01MSLOOP
DEC R10
JNZ DELAY01MSLOOP1
POP R14
RET
;******************************************************************
;
; TIMER_A INTERRUPT
;
;******************************************************************
TA0_ISR PUSH R10
PUSH R11
PUSH R12
PUSH R13
PUSH R14
PUSH R15
XOR.B #80H,&P4OUT
TST &DELAYTIME
JZ TA0_DEL
DEC &DELAYTIME
TA0_DEL
BIT #S_START,&STATE ;TIMER_A INTERRUPT SUB PROGRAM
JC TA0_ISR1
JMP TA0_EXIT
TA0_ISR1 CMP #250,&DOT
JGE DOTY
INC &DOT
JMP TA0_ISR2
DOTY MOV #0,&DOT
XOR.B #080H,&251H
TA0_ISR2
BIT #S_HELP,&STATE
JC HELP_OUT1
BIT #S_INPHASE,&STATE
JC INPHASE_OUT1
BIT #S_POINT,&STATE
JC POINT_OUT1
JMP TA0_EXIT
HELP_OUT1 CALL #HELP_OUT
JMP TA0_EXIT
INPHASE_OUT1 CALL #INPHASE_OUT
JMP TA0_EXIT
POINT_OUT1 CALL #POINT_OUT
TA0_EXIT POP R15
POP R14
POP R13
POP R12
POP R11
POP R10
RETI
;-----------------------------------------------------------------
HELP_OUT
HELP_CH1 INC &CH1TIME
CMP &CH1FREQ,&CH1TIME
JL HELP_CH3
MOV #0,&CH1TIME
MOV.B &CH1RANGE,&DADATA
MOV.B #0,&DACONT
MOV.B &P2OUT,R15
BIC.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
CALL #DA
MOV.B &CH1WIDTH,R10
CALL #DELAYMS
MOV.B &0FFH,&DADATA
CALL #DA
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
NOP
HELP_CH3 INC &CH3TIME
CMP &CH3FREQ,&CH3TIME
JL HELP_CH4
MOV #0,&CH3TIME
MOV.B &CH3RANGE,&DADATA
MOV.B #0,&DACONT
MOV.B &P2OUT,R15
BIS.B #B,R15
BIC.B #A,R15
MOV.B R15,&P2OUT
CALL #DA
MOV.B &CH3WIDTH,R10
CALL #DELAYMS
MOV.B &0FFH,&DADATA
CALL #DA
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
NOP
HELP_CH4 INC &CH4TIME
CMP &CH4FREQ,&CH4TIME
JL HELP_CH2
MOV #0,&CH4TIME
MOV.B &CH4RANGE,&DADATA
MOV.B #0,&DACONT
MOV.B &P2OUT,R15
BIS.B #A,R15
BIS.B #B,R15
MOV.B R15,&P2OUT
CALL #DA
MOV.B &CH4WIDTH,R10
CALL #DELAYMS
MOV.B &0FFH,&DADATA
CALL #DA
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
NOP
HELP_CH2 INC &CH2TIME
CMP &CH2FREQ,&CH2TIME
JL HELP_CH21
MOV #0,&CH2TIME
MOV #5,&CH2PULSE
MOV #0,&CH2RANGE
MOV.B &CH2RANGE,&DADATA
MOV.B #1,&DACONT
CALL #DA
MOV.B &CH2WIDTH,R10
CALL #DELAYMS
MOV.B #0FFH,&DADATA
CALL #DA
JMP HELP_EXIT
HELP_CH21 CMP &CH2PULSE,&CH2TIME
JEQ HELP_CH22
JMP HELP_EXIT
HELP_CH22 CMP #0FFH,&CH2RANGE
JGE HELP_CH23
ADD #5,&CH2PULSE
MOV.B &CH2RANGE,&DADATA
MOV.B #1,&DACONT
CALL #DA
MOV.B &CH2WIDTH,R10
CALL #DELAYMS
MOV.B #0FFH,&DADATA
CALL #DA
JMP HELP_EXIT
HELP_CH23 MOV #0FFH,&CH2RANGE
HELP_EXIT RET
;-----------------------------------------------------------------
INPHASE_OUT
INPHASE_CH1 INC &CH1TIME
CMP &CH1FREQ,&CH1TIME
JL INPHASE_CH3
MOV #0,&CH1TIME
MOV.B &CH1RANGE,&DADATA
MOV.B #0,&DACONT
MOV.B &P2OUT,R15
BIC.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
CALL #DA
MOV.B &CH1WIDTH,R10
CALL #DELAYMS
MOV.B &0FFH,&DADATA
CALL #DA
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
NOP
INPHASE_CH3 INC &WAVETIME
INC &CH3TIME
CMP &WAVEFREQ,&WAVETIME
JL INPHASE_CH31
MOV #0,&WAVETIME
MOV #0,CH3TIME
XOR.B #S_WAVEGAP,&STATE
INPHASE_CH31 MOV.B &CH3RANGE,&DADATA
MOV.B #0,&DACONT
CALL #DA
BIT #S_WAVEGAP,&STATE
JC INPHASE_CH32
CMP #WAVEGAPI,&CH3TIME
JL INPHASE_CH34
JMP INPHASE_CH33
INPHASE_CH32 CMP #WAVEGAPII,&CH3TIME
JL INPHASE_CH34
INPHASE_CH33 MOV.B &P2OUT,R15
BIC.B #A,R15
BIS.B #B,R15
MOV.B R15,&P2OUT
MOV #0,&CH3TIME
INPHASE_CH34 MOV.B &CH3WIDTH,R10
CALL #DELAYMS
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
MOV.B #0FFH,&DADATA
CALL #DA
INPHASE_CH4 INC &CH4TIME
CMP &CH4FREQ,&CH4TIME
JL INPHASE_CH2
MOV #0,&CH4TIME
MOV.B &CH4RANGE,&DADATA
MOV.B #0,&DACONT
MOV.B &P2OUT,R15
BIS.B #A,R15
BIS.B #B,R15
MOV.B R15,&P2OUT
CALL #DA
MOV.B &CH4WIDTH,R10
CALL #DELAYMS
MOV.B &0FFH,&DADATA
CALL #DA
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
NOP
INPHASE_CH2 INC &CH2TIME
CMP &CH2FREQ,&CH2TIME
JL INPHASE_CH21
MOV #0,&CH2TIME
MOV #5,&CH2PULSE
MOV #0,&CH2RANGE
MOV.B &CH2RANGE,&DADATA
MOV.B #1,&DACONT
CALL #DA
MOV.B &CH2WIDTH,R10
CALL #DELAYMS
MOV.B #0FFH,&DADATA
CALL #DA
JMP INPHASE_EXIT
INPHASE_CH21 CMP &CH2PULSE,&CH2TIME
JEQ INPHASE_CH22
JMP INPHASE_EXIT
INPHASE_CH22 CMP #0FFH,&CH2RANGE
JGE INPHASE_CH23
ADD #5,&CH2PULSE
MOV.B &CH2RANGE,&DADATA
MOV.B #1,&DACONT
CALL #DA
MOV.B &CH2WIDTH,R10
CALL #DELAYMS
MOV.B #0FFH,&DADATA
CALL #DA
JMP INPHASE_EXIT
INPHASE_CH23 MOV #0FFH,&CH2RANGE
INPHASE_EXIT RET
;------------------------------------------------------------------
POINT_OUT BIT #S_WAVE,&STATE
JC POINT_WAVE
INC &CH1TIME
CMP &CH1FREQ,&CH1TIME
JL POINT_EXIT
POINT_DA MOV #0,&CH1TIME
MOV.B &CH1RANGE,&DADATA
MOV.B #0,&DACONT
CALL #DA
MOV.B &P2OUT,R15
BIC.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
MOV.B &CH1WIDTH,R10
CALL #DELAYMS
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
MOV.B #0FFH,&DADATA
CALL #DA
MOV.B #5,R10
CALL #DELAYMS
MOV.B &CH3RANGE,&DADATA
CALL #DA
MOV.B &P2OUT,R15
BIC.B #A,R15
BIS.B #B,R15
MOV.B R15,&P2OUT
MOV.B &CH1WIDTH,R10
CALL #DELAYMS
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
MOV.B #0FFH,&DADATA
CALL #DA
MOV.B #5,R10
CALL #DELAYMS
MOV.B &CH4RANGE,&DADATA
CALL #DA
MOV.B &P2OUT,R15
BIS.B #A,R15
BIS.B #B,R15
MOV.B R15,&P2OUT
MOV.B &CH1WIDTH,R10
CALL #DELAYMS
MOV.B &P2OUT,R15
BIS.B #A,R15
BIC.B #B,R15
MOV.B R15,&P2OUT
MOV.B #0FFH,&DADATA
CALL #DA
MOV.B #5,R10
CALL #DELAYMS
MOV.B &CH2RANGE,&DADATA
MOV.B #1,&DACONT
CALL #DA
MOV.B &CH1WIDTH,R10
CALL #DELAYMS
MOV.B #0FFH,&DADATA
CALL #DA
JMP POINT_EXIT
POINT_WAVE INC &WAVETIME
INC &CH1TIME
CMP &WAVEFREQ,&WAVETIME
JL POINT_WAVE1
MOV #0,&CH1TIME
MOV #3,&WAVETIME
XOR.B #S_WAVEGAP,&STATE
POINT_WAVE1 BIT #S_WAVEGAP,&STATE
JC POINT_WAVE2
CMP #WAVEGAPI,&CH1TIME
JL POINT_EXIT
JMP POINT_WAVE3
POINT_WAVE2 CMP #WAVEGAPII,&CH1TIME
JL POINT_EXIT
POINT_WAVE3 MOV #0,&CH1TIME
JMP POINT_DA
POINT_EXIT RET
;******************************************************************
;
; TIMER_B INTERRUPT
;
;******************************************************************
TB0_ISR PUSH R10
BIT #S_START,&STATE ;TIMER_B INTERRUPT SUB PROGRAM
JZ TBNEXT
;XOR.B #080H,&251H
CALL #TBNEXT1
TBNEXT POP R10
RETI
;-----------------------------------------------------------------
TBNEXT1 BIT #S_HELP,&STATE
JC TIMER_H
BIT #S_INPHASE,&STATE
JC TIMER_H
BIT #S_POINT,&STATE
JC TIMER_P
RET
;-----------------------------------------------------------------
TIMER_H INC.B &TIMER1
CMP.B #60,&TIMER1
JL TIMER_H1
MOV.B #0,&TIMER1
INC.B TIMER2
MOV.B &TIMER2,&254H
CMP.B #99,&TIMER2
JL TIMER_H1
MOV.B #0,TIMER2
TIMER_H1 RET
;------------------------------------------------------------------
TIMER_P DEC.B &TIMER1
TST.B &TIMER1
JNZ TIMER_P1
MOV.B #60,&TIMER1
DEC.B &TIMER2
MOV.B &TIMER2,&254H
TST.B &TIMER2
JNZ TIMER_P1
MOV.B &POINTTIMER,TIMER2
MOV.B &POINTTIMER,&254H
CALL #STOP
TIMER_P1 RET
;------------------------------------------------------------------
STOP BIC.B &S_START,&STATE
BIC.B &04H,&LED_CODE
BIS.B #POWER,&P3OUT ;STOP THE DC-DC
BIC.B #0F0H,&P2OUT ;STOP THE RELAY
BIC.B #080H,&251H
MOV #02H,R10
CALL #BZ
MOV #02H,R10
CALL #DELAY01MS
MOV #02H,R10
CALL #BZ
MOV #02H,R10
CALL #DELAY01MS
MOV #10,R10
CALL #BZ
RET
;******************************************************************
;
; TABLE
;
;******************************************************************
DIS_TAB
DB 07DH,060H,03EH,07AH,063H ;0,1,2,3,4
DB 05BH,05FH,070H,07FH,07BH ;5,6,7,8,9
DB 000H,000H,000H,000H,000H ;[]
;------------------------------------------------------------------
;
; 中斷向量
;
;------------------------------------------------------------------
ORG 0FFFEH
DW RESET
ORG 0FFECH
DW TA0_ISR
ORG 0FFFAH
DW TB0_ISR
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -