📄 h005master_longv10.asm
字号:
;********************************************;
; COMPANY : HORN ;
; PROJECT NAME : H-020II ;
; AUTHOR : LIGAOSHOU ;
; VERSION : V1.0 ;
; START DATE : 2005.11.18 ;
; MODIFY : 2005.11.22 ;
; BODY : PIC16C54 ;
; COMPILER : V7.1 ;
; CRYSTAL : 4MHZ ;
;********************************************;
TEMP0 EQU 7H
TEMP1 EQU 8H
FLAG EQU 9H
DISTANCE EQU 0AH
CHANNEL0_TEMP0 EQU 0BH
CHANNEL0_TEMP1 EQU 0CH
CHANNEL0_TEMP2 EQU 0DH
CHANNEL1_TEMP0 EQU 0EH
CHANNEL1_TEMP1 EQU 0FH
CHANNEL1_TEMP2 EQU 10H
CHANNEL2_TEMP0 EQU 11H
CHANNEL2_TEMP1 EQU 12H
CHANNEL2_TEMP2 EQU 13H
CHANNEL3_TEMP0 EQU 14H
CHANNEL3_TEMP1 EQU 15H
CHANNEL3_TEMP2 EQU 16H
SEND_BUF EQU 17H
TEMP2 EQU 18H
TEMP3 EQU 19H
SEND_BUF0 EQU 1AH
SEND_BUF1 EQU 1BH
SEND_BUF2 EQU 1CH
DIGITAL_COUNT EQU 1EH
COUNT_3TIMES EQU 1FH
;************PORT DEFINE**********************
#DEFINE CLOCK_OUT_P PORTB,2
#DEFINE DATA_OUT_P PORTB,5
#DEFINE DATA_IN_P PORTA,3
#DEFINE TMR0_BIT7 TMR0,7
#DEFINE A_P PORTB,1
#DEFINE B_P PORTB,0
;************FLAG DEFINE**********************
#DEFINE CH_BIT0_F FLAG,0
#DEFINE CH_BIT1_F FLAG,1
#DEFINE ZERO_F FLAG,2
#DEFINE V_FF_F FLAG,3
#DEFINE CLR_3TIMES_F FLAG,4
#DEFINE CLOCK_F FLAG,5
;*********************************************
LIST P=16C54
#INCLUDE <P16C5X.INC>
#INCLUDE <MACRO1.INC>
ORG 0H
;*********************************************
;NAME :MIDDLE_SUB
;FUCTION :
;INPUT :TEMP0,TEMP1,TEMP2
;OUTPUT :TEMP0
;USED REGISTER :TEMP0,TEMP1,TEMP2,TEMP3
;SUBROUTINE :
;*********************************************
MIDDLE_SUB:
MOVF TEMP0,W
SUBWF TEMP1,W
BTFSS STATUS,C
GOTO MIDDLE_L10 ;TEMP0>TEMP1
MOVF TEMP0,W ;TEMP0<=TEMP1
SUBWF TEMP2,W
BTFSC STATUS,C
GOTO MIDDLE_L20 ;TEMP0<=TEMP2
GOTO MIDDLE_END ;TEMP0>TEMP2
MIDDLE_L10:
MOVF TEMP0,W
SUBWF TEMP2,W
BTFSS STATUS,C
GOTO MIDDLE_L30 ;TEMP0>TEMP2
GOTO MIDDLE_END ;TEMP0<=TEMP2
MIDDLE_L20:
MOVF TEMP1,W
SUBWF TEMP2,W
BTFSS STATUS,C
GOTO MIDDLE_L40 ;TEMP2<TEMP1
GOTO MIDDLE_L50 ;TEMP2>=TEMP1
MIDDLE_L30:
MOVF TEMP1,W
SUBWF TEMP2,W
BTFSS STATUS,C
GOTO MIDDLE_L50 ;TEMP2<TEMP1
MIDDLE_L40: ;TEMP2>=TEMP1
MOVM TEMP0,TEMP2
GOTO MIDDLE_END
MIDDLE_L50:
MOVM TEMP0,TEMP1
MIDDLE_END:
RETLW 0
;*********************************************
;NAME :SEND_DATA_SUB
;FUCTION :
;INPUT :SEND_BUF
;OUTPUT :
;USED REGISTER :TEMP3
;SUBROUTINE :
;*********************************************
SEND_DATA_SUB:
BCF DATA_OUT_P
CALL DELAY1MS
BSF DATA_OUT_P
CALL DELAY110US
MOVH TEMP3,8H
BCF STATUS,C
SEND_DATA_LOOP:
RLF SEND_BUF,F
BTFSS STATUS,C
GOTO SEND_ZERO
SEND_ONE:
BCF DATA_OUT_P
CALL DELAY110US
BSF DATA_OUT_P
CALL DELAY300US
GOTO SEND_COM
SEND_ZERO:
BCF DATA_OUT_P
CALL DELAY300US
BSF DATA_OUT_P
CALL DELAY110US
SEND_COM:
DECFSZ TEMP3
GOTO SEND_DATA_LOOP
BSF DATA_OUT_P
RETLW 0
;*********************************************
;NAME :SEND_CLOCK_SUB
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :TEMP0,TEMP1
;SUBROUTINE :
;*********************************************
SEND_CLOCK_SUB:
;BTFSS CLOCK_F
;GOTO SEND_CLOCK_L10
;MOVH TEMP1,08H
;GOTO SEND_CLOCK_L20
;SEND_CLOCK_L10:
MOVH TEMP1,28H
SEND_CLOCK_L20:
MOVLW 04H
SEND_CLOCK_LOOP:
XORWF PORTB,F
GOTO SEND_CLOCK_L1
SEND_CLOCK_L1:
GOTO SEND_CLOCK_L2
SEND_CLOCK_L2:
GOTO SEND_CLOCK_L3
SEND_CLOCK_L3:
GOTO SEND_CLOCK_L4
SEND_CLOCK_L4:
NOP
DECFSZ TEMP1
GOTO SEND_CLOCK_LOOP
BCF CLOCK_OUT_P
RETLW 0
;*********************************************
;NAME :DELAY1MS
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :TEMP0,TEMP1
;SUBROUTINE :
;*********************************************
DELAY1MS:
MOVH TEMP0,5H
D_1MS_LOOP1:
MOVH TEMP1,41H
D_1MS_LOOP2:
DECFSZ TEMP1
GOTO D_1MS_LOOP2
DECFSZ TEMP0
GOTO D_1MS_LOOP1
RETLW 0
;*********************************************
;NAME :DELAY300US
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :TEMP0,TEMP1
;SUBROUTINE :
;*********************************************
DELAY300US:
MOVH TEMP0,06H
D_150US_LOOP1:
MOVH TEMP1,0FH
D_150US_LOOP2:
DECFSZ TEMP1
GOTO D_150US_LOOP2
DECFSZ TEMP0
GOTO D_150US_LOOP1
NOP
RETLW 0
;*********************************************
;NAME :DELAY110US
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :TEMP0,TEMP1
;SUBROUTINE :
;*********************************************
DELAY110US:
MOVH TEMP0,03H
D_100US_LOOP1:
MOVH TEMP1,0AH
D_100US_LOOP2:
DECFSZ TEMP1
GOTO D_100US_LOOP2
DECFSZ TEMP0
GOTO D_100US_LOOP1
NOP
NOP
NOP
RETLW 0
;*********************************************
;NAME :PORT_INITIAL_SUB
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :
;SUBROUTINE :
;*********************************************
PORT_INITIAL_SUB:
CLRF PORTA
CLRF PORTB
CLRW
TRIS PORTB
MOVLW 08H
TRIS PORTA ;SET DATA_IN_P IS INPUT
BSF DATA_OUT_P
RETLW 0
;*********************************************
;NAME :RAM_INITIAL_SUB
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :
;SUBROUTINE :
;*********************************************
RAM_INITIAL_SUB:
MOVLW 08H
MOVWF TEMP0
CLR_RAM_LOOP:
MOVF TEMP0,W
MOVWF FSR
CLRW
MOVWF INDF
INCF TEMP0,F
MOVLW 20H
XORWF TEMP0,W
BTFSS STATUS,Z
GOTO CLR_RAM_LOOP
CLRW
MOVWF TEMP0
MOVH CHANNEL0_TEMP1,0FFH
MOVH CHANNEL0_TEMP2,0FFH
MOVH CHANNEL1_TEMP1,0FFH
MOVH CHANNEL1_TEMP2,0FFH
MOVH CHANNEL2_TEMP1,0FFH
MOVH CHANNEL2_TEMP2,0FFH
MOVH CHANNEL3_TEMP1,0FFH
MOVH CHANNEL3_TEMP2,0FFH
MOVH SEND_BUF0,0FFH
RETLW 0
;*********************************************
;NAME :SYS_INITIAL_SUB
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :
;SUBROUTINE :
;*********************************************
SYS_INITIAL_SUB:
MOVLW 26H ;0010 0101B
OPTION ;GPWU,GPPU,T0SC,T0SE,PSA,PS2,PS1,PS0
;PS2,PS1,PS0=000 TIMER0 RATE=1:2 WDT RATE=1:1
;PS2,PS1,PS0=001 TIMER0 RATE=1:4 WDT RATE=1:2
;PS2,PS1,PS0=010 TIMER0 RATE=1:8 WDT RATE=1:4
;PS2,PS1,PS0=011 TIMER0 RATE=1:16 WDT RATE=1:8
;PS2,PS1,PS0=100 TIMER0 RATE=1:32 WDT RATE=1:16
;PS2,PS1,PS0=101 TIMER0 RATE=1:64 WDT RATE=1:32
;PS2,PS1,PS0=110 TIMER0 RATE=1:128 WDT RATE=1:64
;PS2,PS1,PS0=111 TIMER0 RATE=1:256 WDT RATE=1:128
;PSA=0 TO TIMER0 PSA=1 TO WDT
;T0SE=0 ????????????TOSE=1 ??????????
;T0SC=0 ???????????? T0SC=1 ????T0CKI????????
;(16C54????????)GPPU=0 GP0,GP1,GP3 ??????ENABLE GPPU=1 DISABLE
;(16C54????????)GPWU=0 GP0,GP1,GP3 ????????????ENABLE GPWU=1 DISABLE
RETLW 0
;*********************************************
CONVERT: ;(/128) ; foot inch
ADDWF PCL,F
;RETLW 0H ;"0.0 " 0 ;0.00
RETLW 10H ;"0.35m" 1 ;1.03
RETLW 14H ;"0.45m" 2 ;1.07
RETLW 19H ;"0.55m" 3 ;1.11
RETLW 1dH ;"0.65m" 4 ;2.03
RETLW 21H ;"0.75m" 5 ;2.07
RETLW 26H ;"0.85m" 6 ;2.11
RETLW 2bH ;"0.95m" 7 ;3.03
RETLW 30H ;"1.05m" 8 ;3.07
RETLW 34H ;"1.15m" 9 ;3.11
RETLW 38H ;"1.25m" a ;4.03
RETLW 3dH ;"1.35m" b ;4.07
RETLW 42H ;"1.45m" c ;5.00
RETLW 46H ;"1.55m" d ;5.03
RETLW 4bH ;"1.65m" e ;5.07
RETLW 4fH ;"1.75m" f ;5.11
RETLW 54H ;"1.85m" 10 ;6.03
RETLW 58H ;"1.95m" 11 ;6.07
RETLW 5cH ;"2.05m" 12 ;6.11
RETLW 61H ;"2.15m" 13 ;7.03
RETLW 65H ;"2.25m" 14 ;7.07
RETLW 6aH ;"2.35m" 15 ;7.11
RETLW 6eH ;"2.45m" 16 ;8.03
RETLW 73H ;"2.55m" 17 ;8.07
RETLW 77H ;"2.65m" 18 ;8.11
RETLW 7cH ;"2.75m" 19 ;9.03
RETLW 81H ;"2.85m" 1a ;9.07
RETLW 86H ;"2.95m" 1b ;9.11
RETLW 8bH ;"3.05m" 1c
RETLW 90H ;"3.15m" 1d
RETLW 95H ;"3.25m" 1e
RETLW 9aH ;"3.35m" 1f
RETLW 9fH ;"3.45m" 20
RETLW 0a4H ;"3.55m" 21
RETLW 0a9H ;"3.65m" 22
RETLW 0aeH ;"3.75m" 23
RETLW 0b3H ;"3.85m" 24
RETLW 0b8H ;"3.95m" 25
RETLW 0bdH ;"4.05m" 26
RETLW 0FFH
;*********************************************
;*********************************************
;NAME :DIGITAL_SUB
;FUCTION :
;INPUT :TEMP2
;OUTPUT :SEND_BUF0
;USED REGISTER :DIGITAL_COUNT
;SUBROUTINE :
;*********************************************
DIGITAL_SUB:
CMPRS TEMP2,0FFH,DIGITAL_L10
CLRF DIGITAL_COUNT
MOVM SEND_BUF0,TEMP2
GOTO DIGITAL_END
DIGITAL_L10:
INCF DIGITAL_COUNT
MOVLW 05H
SUBWF DIGITAL_COUNT,W
BTFSS STATUS,C
GOTO DIGITAL_END
CLRF DIGITAL_COUNT
MOVH SEND_BUF0,0FFH
DIGITAL_END:
RETLW 0
;*********************************************
;NAME :DEAL_SUB
;FUCTION :
;INPUT :CHANNEL0_TEMP0,CHANNEL1_TEMP0,CHANNEL2_TEMP0,CHANNEL3_TEMP0
;OUTPUT :SEND_BUF0
;USED REGISTER :TEMP0,TEMP1,TEMP2,TEMP3
;SUBROUTINE :
;*********************************************
DEAL_SUB:
MOVF CHANNEL0_TEMP0,W
SUBWF CHANNEL1_TEMP0,W
BTFSS STATUS,C
GOTO DEAL_L10
MOVM TEMP2,CHANNEL0_TEMP0
GOTO DEAL_L11
DEAL_L10:
MOVM TEMP2,CHANNEL1_TEMP0
DEAL_L11:
MOVF TEMP2,W
SUBWF CHANNEL2_TEMP0,W
BTFSC STATUS,C
GOTO DEAL_L12
MOVM TEMP2,CHANNEL2_TEMP0
DEAL_L12:
MOVF TEMP2,W
SUBWF CHANNEL3_TEMP0,W
BTFSC STATUS,C
GOTO DEAL_L13
MOVM TEMP2,CHANNEL3_TEMP0
DEAL_L13:
CLRF TEMP0
MOVF TEMP2,W
CMPRS TEMP2,0,DEAL_L20 ;
CMPRS TEMP2,0FFH,DEAL_L40
CONVERT_LOOP:
MOVF TEMP0,W
CALL CONVERT
SUBWF TEMP2,W
BTFSS STATUS,C
GOTO DEAL_L30
INCF TEMP0
GOTO CONVERT_LOOP
DEAL_L20:
CLRF SEND_BUF0
GOTO DEAL_END
DEAL_L30:
MOVM SEND_BUF0,TEMP0
GOTO DEAL_END
DEAL_L40:
MOVH SEND_BUF0,0FFH
DEAL_END:
RETLW 0
;*********************************************
START:
CALL PORT_INITIAL_SUB
CALL RAM_INITIAL_SUB
CALL SYS_INITIAL_SUB
;*********************************************
;NAME :MAINLOOP
;FUCTION :
;INPUT :
;OUTPUT :
;USED REGISTER :
;SUBROUTINE :
;*********************************************
MAINLOOP:
CALL DELAY1MS
CALL DELAY1MS
;CLRWDT
BTFSC CLR_3TIMES_F
GOTO MAINLOOP10
BSF CLR_3TIMES_F
MOVH COUNT_3TIMES,03H
MAINLOOP10:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,0,CH0_L10
GOTO CH1_L10
CH0_L10:
BCF A_P
BCF B_P ;CHANNEL0
GOTO CH_COMMON_LABEL
CH1_L10:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,1,CH1_L11
GOTO CH2_L10
CH1_L11:
BSF A_P
BCF B_P ;CHANNEL1
GOTO CH_COMMON_LABEL
CH2_L10:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,2,CH2_L11
GOTO CH3_L10
CH2_L11:
BCF A_P
BSF B_P ;CHANNEL2
GOTO CH_COMMON_LABEL
CH3_L10:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,3,CH3_L11
GOTO CH_COMMON_LABEL
CH3_L11:
BSF A_P
BSF B_P ;CHANNEL3
;GOTO CH_COMMON_LABEL
CH_COMMON_LABEL:
CLRF TMR0
MOVLW 06H ;START
OPTION
CALL SEND_CLOCK_SUB
CALL DELAY1MS
CALL DELAY300US
CALL DELAY110US
CALL DELAY110US
CALL DELAY110US
CALL DELAY110US
CALL DELAY110US
BTFSC DATA_IN_P
GOTO WAIT_ZERO
MOVLW 26H
OPTION ;STOP COUNTER
CLRF DISTANCE ;VALUE IS ZERO
;*********************************************
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
;CALL DELAY1MS
;CALL DELAY1MS
;CALL DELAY1MS
;CALL DELAY1MS
;*********************************************
GOTO MAINLOOP51
WAIT_ZERO:
BTFSS DATA_IN_P
GOTO MAINLOOP50
BTFSS TMR0_BIT7
GOTO WAIT_ZERO
WAIT_ZERO1:
BTFSS DATA_IN_P
GOTO MAINLOOP50
BTFSC TMR0_BIT7
GOTO WAIT_ZERO1
MOVLW 26H
OPTION ;STOP COUNTER
MOVH DISTANCE,0FFH ;VALUE IS 0FFH
GOTO MAINLOOP51
MAINLOOP50:
MOVLW 26H
OPTION ;STOP COUNTER
MOVF TMR0,W
MOVWF DISTANCE
;*********************************************
CALL DELAY1MS
CALL DELAY1MS
;*********************************************
MAINLOOP51:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,0,CH0_FUZHI_L10
GOTO CH1_FUZHI_L10
CH0_FUZHI_L10:
MOVM CHANNEL0_TEMP2,CHANNEL0_TEMP1
MOVM CHANNEL0_TEMP1,CHANNEL0_TEMP0
MOVM CHANNEL0_TEMP0,DISTANCE
BSF CH_BIT0_F
BCF CH_BIT1_F
GOTO MAINLOOP
CH1_FUZHI_L10:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,1,CH1_FUZHI_L11
GOTO CH2_FUZHI_L10
CH1_FUZHI_L11:
MOVM CHANNEL1_TEMP2,CHANNEL1_TEMP1
MOVM CHANNEL1_TEMP1,CHANNEL1_TEMP0
MOVM CHANNEL1_TEMP0,DISTANCE
BCF CH_BIT0_F
BSF CH_BIT1_F
GOTO MAINLOOP
CH2_FUZHI_L10:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,2,CH2_FUZHI_L11
GOTO CH3_FUZHI_L10
CH2_FUZHI_L11:
MOVM CHANNEL2_TEMP2,CHANNEL2_TEMP1
MOVM CHANNEL2_TEMP1,CHANNEL2_TEMP0
MOVM CHANNEL2_TEMP0,DISTANCE
BSF CH_BIT0_F
BSF CH_BIT1_F
GOTO MAINLOOP
CH3_FUZHI_L10:
MOVF FLAG,W
ANDLW 03H
MOVWF TEMP0
CMPRS TEMP0,3,CH3_FUZHI_L11
GOTO MAINLOOP
CH3_FUZHI_L11:
MOVM CHANNEL3_TEMP2,CHANNEL3_TEMP1
MOVM CHANNEL3_TEMP1,CHANNEL3_TEMP0
MOVM CHANNEL3_TEMP0,DISTANCE
BCF CH_BIT0_F
BCF CH_BIT1_F
DECFSZ COUNT_3TIMES
GOTO MAINLOOP
BCF CLR_3TIMES_F
MOVM TEMP0,CHANNEL0_TEMP0
MOVM TEMP1,CHANNEL0_TEMP1
MOVM TEMP2,CHANNEL0_TEMP2
CALL MIDDLE_SUB
MOVM CHANNEL0_TEMP0,TEMP0
MOVM TEMP0,CHANNEL1_TEMP0
MOVM TEMP1,CHANNEL1_TEMP1
MOVM TEMP2,CHANNEL1_TEMP2
CALL MIDDLE_SUB
MOVM CHANNEL1_TEMP0,TEMP0
MOVM TEMP0,CHANNEL2_TEMP0
MOVM TEMP1,CHANNEL2_TEMP1
MOVM TEMP2,CHANNEL2_TEMP2
CALL MIDDLE_SUB
MOVM CHANNEL2_TEMP0,TEMP0
MOVM TEMP0,CHANNEL3_TEMP0
MOVM TEMP1,CHANNEL3_TEMP1
MOVM TEMP2,CHANNEL3_TEMP2
CALL MIDDLE_SUB
MOVM CHANNEL3_TEMP0,TEMP0
CALL DEAL_SUB
;CALL DIGITAL_SUB
MOVM SEND_BUF,SEND_BUF0
CALL SEND_DATA_SUB
GOTO MAINLOOP
ORG 1FFH
GOTO START
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -