📄 ldd2.asm
字号:
;NOW USING
INCLUDE "P16C73.INC"
ORG 000H
GOTO MAIN
ORG 004H
GOTO TIMER
ORG 0050H
MAIN: BSF STATUS,5
MOVLW 0E1H ;定义PORTA为输入
TRIS PORTA
MOVLW 01H ;定义PORTB为输出
TRIS PORTB
MOVLW 0BFH
TRIS PORTC
MOVLW 06H
MOVWF ADCON1 ;RA口用于数字功能
BCF STATUS,5
CLRF 3AH
CLRF 3BH
CLRF 3CH
CLRF 4CH
CLRF 4DH
CLRF 4EH
CLRF 50H
CLRF 51H
CLRF 52H
CLRF 53H
CLRF 54H
CLRF 55H
CLRF 56H
CLRF 57H
MOVLW 03H
MOVWF 48H
MOVLW 03H
MOVWF 4BH
MOVLW 0C8H
MOVWF 4CH
MOVLW 23H
MOVWF 4DH
MOVLW 04H
MOVWF 44H
MOVWF 46H
MOVLW 03H
MOVWF 45H ;45H存放通道数
BSF STATUS,5
BSF PIE1,1 ;定时器2中断打开
BCF PIE1,4
TESTER2: BCF STATUS,5
BSF RCSTA,7
BCF RCSTA,4
BSF STATUS,5
MOVLW 33H
MOVWF SPBRG ;设置波特率1200
BSF TXSTA,5
MOVLW 0FFH
MOVWF PR2
BCF STATUS,5
CLRF T2CON
MOVLW 7EH
MOVWF T2CON ;定时器2方式设置
MOVLW 05H
MOVWF TMR2 ;赋初值
TESTER3: BCF STATUS,5
MOVLW 0FFH ;定义口初始状态
MOVWF PORTA
MOVLW 0FFH
MOVWF PORTB
MOVLW 0FFH
MOVWF PORTC
BCF ADCON0,0 ; 关闭AD模块
BCF STATUS,0
RLF 45H,1
RLF 45H,1
RLF 45H,1
MOVF PORTA,0
ANDLW 0E7H
IORWF 45H,0
MOVWF PORTA ;选择通道3
RRF 45H,1
RRF 45H,1
RRF 45H,1
MOVLW 05
MOVWF TMR0
BSF STATUS,5
BCF STATUS,5
MOVLW 0E0H ;设外设中断和定时器0中断有效
MOVWF INTCON
MOVLW 0
MOVWF 29H
MOVLW 0
MOVWF 2AH
MOVLW 0
MOVWF 2BH
CLRF 3DH
MOVLW 19H ;3DH存放定时器循环次数
MOVWF 3DH
MOVLW 05H
MOVWF 2FH
MOVLW 05H
MOVWF TMR0
CLRF TMR1L
CLRF TMR1H
CLRF T1CON
BSF STATUS,5
CLRF PIE2
CLRF PIE1
BCF PIE1,1
BCF PIE1,2
; BSF PIE2,0
BCF STATUS,5
MOVLW 0AH ;CCP1为比较模式
MOVWF CCP1CON
MOVLW 04H ;CCP2为捕捉模式
MOVWF CCP2CON
MOVLW 49H
MOVWF FSR
MOVLW 23H
MOVWF CCPR1L
CLRF CCPR1H
BCF PORTA,1 ;报警器
BCF 4FH,0 ;清标志
BCF 4FH,1
BCF 4FH,2 ;报警器一直打开标志
BCF 4FH,3 ;报警器关断标志
BCF 4FH,4
BCF 4FH,6
BIGHA: BSF PORTA,1
MOVLW 02H
MOVWF 5EH
AGAINA: MOVLW 0FAH
MOVWF 5FH
AGAIN: LCALL YSZ
DECFSZ 5FH,1
GOTO AGAIN
DECFSZ 5EH,1
GOTO AGAINA
BCF PORTA,1
START: MOVLW 0H ; F16F17F18存储回复信号计时值
MOVWF 26H
MOVLW 0H
MOVWF 27H
MOVLW 0H
MOVWF 28H
BCF 4FH,6
MOVF 45H,0
BTFSS STATUS,2
GOTO SST
MOVLW 04H ;4个通道循环后重新置数
MOVWF 45H
SST: DECF 45H,1 ;通道数减1
RLF 45H,1
RLF 45H,1
RLF 45H,1
MOVF PORTA,0
ANDLW 0E7H
IORWF 45H,0
MOVWF PORTA ;选择通道
RRF 45H,1
RRF 45H,1
RRF 45H,1
BCF STATUS,5
BCF PORTB,5 ;开始发测距高频脉冲置RB5为0(测试信号)
START1: MOVLW 14H ;F39存储高频脉冲个数
MOVWF 39H
LOOP2: MOVLW 01H ;F38存储高频脉冲的周期
MOVWF 38H
NOP
NOP
LOOP1: DECFSZ 38H,1
GOTO LOOP1
BTFSS PORTA,2
GOTO SIO1
BCF PORTA,2
DECFSZ 39H,1 ;发完一个高频脉冲后减1
GOTO LOOP2
CALL YSZ
BSF T1CON,0
BSF STATUS,5
MOVLW 00H
OPTION
BCF PIR2,0
BCF PIE2,0 ;重新打开捕捉中断
BCF STATUS,5
BSF PORTB,2
WAIT: BTFSC PORTB,2 ;PORTB,2为一个通道探测时间标志,为0则时间到,
; 转另外的通道测试
GOTO WAIT2
WAIT5: BSF PORTB,2
MOVLW 05H
MOVWF TMR0
BCF T1CON,0
CLRF TMR1L
CLRF TMR1H
BCF 4FH,0 ;4FH的0位若为1则不再赋值
TAK: BTFSC 4FH,6 ;4FH的1位为0则该数据无效,反之则有效
GOTO START
MOVF 45H,0 ;若该通道无回复信号则存OFFH无效数据
BCF STATUS,0
RLF 45H,0
MOVWF 4EH
MOVLW 50H
ADDWF 4EH,0
MOVWF FSR
MOVLW 0FFH
MOVWF INDF
INCF FSR
MOVLW 0FFH
MOVWF INDF
GOTO START
WAIT2: BTFSC PORTA,5 ;等待回复信号,若有低电平回复信号则跳过
GOTO WAIT
JUMP1: BSF 4FH,6 ;若有回复信号则置该位为1作标记
MOVF TMR1L,0 ;27H28H存放回复信号时间数
MOVWF 28H
MOVF TMR1H,0
MOVWF 27H
MOVF 45H,0 ;判断通道
SUBLW 03H
BTFSC STATUS,2
GOTO LOAD3
MOVF 45H,0
SUBLW 02H
BTFSC STATUS,2
GOTO LOAD2
MOVF 45H,0
SUBLW 01H
BTFSC STATUS,2
GOTO LOAD1
MOVF 45H,0
BTFSC STATUS,2
GOTO LOAD0
CLRF 45H
; BTFSC 4FH,0 ;4FH的0位若为1则不再比较,跳过比较
GOTO GAIN
LOAD3: MOVLW 56H
MOVWF FSR
BSF 4FH,1 ;4FH的1位为0则该数据无效,反之则有效
GOTO COMMA
LOAD2: MOVLW 54H
MOVWF FSR
BSF 4FH,1 ;4FH的1位为0则该数据无效,反之则有效
GOTO COMMA
LOAD1: MOVLW 52H
MOVWF FSR
BSF 4FH,1 ;4FH的1位为0则该数据无效,反之则有效
GOTO COMMA
LOAD0: MOVLW 50H
MOVWF FSR
BSF 4FH,1 ;4FH的1位为0则该数据无效,反之则有效
GOTO COMMA
COMMA: BTFSC 4FH,0 ;4FH的0位若为1则跳过赋值
GOTO GAIN
AGAN1: BSF 4FH,1
MOVF 27H,0 ;不相等则重新存储新值
MOVWF INDF
INCF FSR,1
MOVF 28H,0
MOVWF INDF
BSF 4FH,0 ;下一个回复信号脉冲不再赋值
GAIN: BTFSC PORTB,2 ;判断是否时间到?
GOTO WAITBAK
CLRF 26H
CLRF 27H
CLRF 28H
; BSF PORTB,2
GOTO WAIT
WAITBAK: ; CALL YSZ
BTFSS PORTA,5
GOTO GAIN
BSF 4FH,0
GOTO WAIT
SIO1: BSF PORTA,2
NOP
GOTO LOOP2
YSZ: BCF PORTB,4
MOVLW 02H
MOVWF 3EH
MOVLW 0E4H
MOVWF 3FH
LOP1: DECFSZ 3FH,1
GOTO LOP1
DECFSZ 3EH,1
GOTO LOP1
BSF PORTB,4
RETURN
;--------------中断处理程序---------------
TIMER: BTFSS PIR1,1 ;是否为定时器2中断
GOTO SAFER
; GOTO SAFER
; DECFSZ 48H,1 ;定时器2中断处理,即报警器处理程序段,48H存放报警器节奏数
GOTO LOV1
BCF INTCON,6
BCF PIR1,1
; BTFSC 4FH,5 ;若该位为高则蜂鸣器固定频率响
GOTO MILLD1
MOVF 4AH,0 ;4AH存放蜂鸣器固定频率值
GOTO MILLD2
MILLD1: MOVF 49H,0
; COMF 49H,0
; BTFSC STATUS,2
; GOTO KIS12
; MOVLW 23H
MILLD2: MOVWF 48H
GOTO KIS22
KIS22: BTFSC PORTA,1
GOTO FMQ1
BSF PORTA,1
MOVLW 05H
MOVWF TMR2
BCF PIR1,1
BSF INTCON,6
RETFIE
FMQ1: BCF PORTA,1
MOVLW 05H
MOVWF TMR2
BCF PIR1,1
BSF INTCON,6
RETFIE
LOV1: BCF PIR1,1
BCF INTCON,6
RETFIE
SAFER: BCF INTCON,2
DECFSZ 3DH,1 ;3DH存放定时器循环次数
GOTO BACK3
MOVLW 19H
MOVWF 3DH
; GOTO KKK
DECFSZ 2FH,1
GOTO BACK3
MOVLW 0DH
MOVWF 2FH
DECFSZ 48H,1 ; 48H存放报警器节奏数
GOTO KKK
; MOVLW 07H
MOVF 4BH,0
MOVWF 48H
; MOVF 27H,0
; MOVWF 4BH
; BCF STATUS,0
; RRF 4BH,1
; INCF 4BH,1
; GOTO KIS11
BTFSS 4FH,2 ;报警器是否需要一直打开
GOTO KIS11
BSF PORTA,1 ;报警器动作,一直打开
GOTO KKK
KIS11: BTFSS 4FH,3 ;报警器是否关断
GOTO KIS22B
KIS12: BCF PORTA,1 ;关断报警器
GOTO KKK
KIS22B: BTFSC PORTA,1 ;蜂鸣器处理程序段
GOTO FMQ1B
BSF PORTA,1
MOVLW 05H
MOVWF TMR2
BCF PIR1,1
BSF INTCON,6
GOTO KKK
FMQ1B: BCF PORTA,1
MOVLW 05H
MOVWF TMR2
BCF PIR1,1
BSF INTCON,6
KKK: BCF PORTB,2 ;一个通道测试时间到标记
; GOTO UUU
MOVF 45H,0
BTFSS STATUS,2
GOTO JJ5
; MOVLW 04H ;4个通道循环后重新置数
; MOVWF 45H
; GOTO JJ5
;-------------- 选最小数程序段 ------------
MOVF 50H,0
SUBWF 52H,0
BTFSS STATUS,0
GOTO SUB1 ;选出小数52H53H
BTFSS STATUS,2
GOTO SUBD1 ;选出小数50H51H
MOVF 51H,0
SUBWF 53H,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -