?? 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 + -