📄 02.asm
字号:
GOTO START
GOTO START
ORG 0004H
;****************************************************
;###################################################按键检测程序
ADAJ ;按键模拟转换
BCF STATUS,5
CLRF ANJZ ;清按键值
CLRF ADRES
BSF STATUS,5 ;重新定义模拟口
MOVLW B'11001011'
MOVWF TRISA
MOVLW B'100'
MOVWF ADCON1
BCF STATUS,5
MOVLW B'10011001' ;32分频,选中RA3
MOVWF ADCON0
MOVLW D'8'
MOVWF DCOUNT1 ;延时2TAD
DLOOP1
DECFSZ DCOUNT1
GOTO DLOOP1
MOVLW D'4'
MOVWF DCOUNT1 ;延时14微秒,采样时间
DLOOP2
DECFSZ DCOUNT1
GOTO DLOOP2
BSF ADCON0,GO
NOP
NOP
BTFSC ADCON0,GO
GOTO $-1
MOVF ADRES,0
MOVWF ANJZ ;按键值保护
RETLW 0
;###################################################排风检测
ADP ;排风模拟转换
; CLRF PAIFZ ;清排风值
CLRF ADRES
BSF STATUS,RP0 ;重新定义模拟口
MOVLW B'100'
MOVWF ADCON1
BCF STATUS,RP0
MOVLW B'10000001' ;32分频,选中RA0
MOVWF ADCON0
MOVLW D'8'
MOVWF DCOUNT1 ;延时2TAD
DLOOP3
DECFSZ DCOUNT1
GOTO DLOOP3
MOVLW D'4'
MOVWF DCOUNT1 ;延时14微秒,采样时间
DLOOP4
DECFSZ DCOUNT1
GOTO DLOOP4
BSF ADCON0,GO
NOP
BTFSC ADCON0,GO
GOTO $-1
MOVF ADRES,0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ADDWF PAIFZ1,1 ;排风值保护
BTFSC STATUS,C
INCF PAIFZ2 ;保存进位值
DECFSZ PAIFZ3,1
RETLW 0 ;不到16次,不做处理
MOVLW D'16'
MOVWF PAIFZ3 ;16次求平均值
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BCF STATUS,C
NOP
RRF PAIFZ2,1
RRF PAIFZ1,1 ;右移一次
BCF STATUS,C
NOP
RRF PAIFZ2,1
RRF PAIFZ1,1 ;右移二次
BCF STATUS,C
NOP
RRF PAIFZ2,1
RRF PAIFZ1,1 ;右移三次
BCF STATUS,C
NOP
RRF PAIFZ2,1
RRF PAIFZ1,1 ;右移四次
NOP
NOP
MOVF PAIFZ1,0
MOVWF PAIFZ ;确认排风值
CLRF PAIFZ1
CLRF PAIFZ2
RETLW 0
;###################################################送风检测
ADS ;送风模拟转换
; CLRF SONGFZ ;清送风值
CLRF ADRES
BSF STATUS,RP0 ;重新定义模拟口
MOVLW B'100'
MOVWF ADCON1
BCF STATUS,RP0
MOVLW B'10001001' ;32分频,选中RA1
MOVWF ADCON0
MOVLW D'8'
MOVWF DCOUNT1 ;延时2TAD
DLOOP5
DECFSZ DCOUNT1
GOTO DLOOP5
MOVLW D'4'
MOVWF DCOUNT1 ;延时14微秒,采样时间
DLOOP6
DECFSZ DCOUNT1
GOTO DLOOP6
BSF ADCON0,GO
NOP
BTFSC ADCON0,GO
GOTO $-1
MOVF ADRES,0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ADDWF SONGFZ1,1 ;排风值保护
BTFSC STATUS,C
INCF SONGFZ2 ;保存进位值
DECFSZ SONGFZ3,1
RETLW 0 ;不到16次,不做处理
MOVLW D'16'
MOVWF SONGFZ3 ;16次求平均值
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BCF STATUS,C
NOP
RRF SONGFZ2,1
RRF SONGFZ1,1 ;右移一次
BCF STATUS,C
NOP
RRF SONGFZ2,1
RRF SONGFZ1,1 ;右移二次
BCF STATUS,C
NOP
RRF SONGFZ2,1
RRF SONGFZ1,1 ;右移三次
BCF STATUS,C
NOP
RRF SONGFZ2,1
RRF SONGFZ1,1 ;右移四次
NOP
NOP
MOVF SONGFZ1,0
MOVWF SONGFZ ;确认排风值
CLRF SONGFZ1
CLRF SONGFZ2
RETLW 0
;###################################################
BCD ;显示十进制转换
MOVLW D'8'
MOVWF DCOUNT2 ;转换8次
CLRF R1 ;清理百位
CLRF R2 ;清理个位
BCD1
RLF DCOUNT3 ;被转换值
RLF R2
RLF R1
RLF R0
DECFSZ DCOUNT2
GOTO BCD2
RETLW 0
BCD2
MOVLW R2
MOVWF FSR ;间接寄存器
CALL BCD3 ;调整3个位
MOVLW R1
MOVWF FSR ;间接寄存器
CALL BCD3 ;调整百位
NOP
GOTO BCD1
BCD3 ;BCD调整
MOVLW D'3'
ADDWF 0,W ;间接寄存器运算
MOVWF TEMP
BTFSC TEMP,3
MOVWF 0
MOVLW H'30'
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,7
MOVWF 0
RETLW 0
;###################################################
FENGM ;蜂鸣器子程序
MOVLW D'10'
MOVWF R3
BSF PORTA,2 ;共10次
FENGM1
CALL YANS ;频率2.4KHZ
DECFSZ R3,1
GOTO FENGM4
BCF PORTA,2
RETLW 0
FENGM4
BTFSS XIANGF,0
GOTO FENG
BSF PORTA,2
BCF XIANGF,0
;COMF PORTA,2
GOTO FENGM1
FENG
BCF PORTA,2
BSF XIANGF,0
GOTO FENGM1
;###################################################
YANS ;延时250微秒
MOVLW D'65'
MOVWF R0
DLOOP7
DECFSZ R0,1
GOTO DLOOP7
NOP
RETLW 0
;###################################################
FENGM5 ;间歇5毫秒
MOVLW D'10'
MOVWF R3
FENGM2
CALL YANS
DECFSZ R3,1
GOTO FENGM2
RETLW 0
;###################################################
FENGM3
BTFSC BAOJ2,0
GOTO FENGM6
CALL FENGM5 ;无报警要求
RETLW 0
FENGM6 ;有报警要求
BTFSC BAOJ3,0 ;判断是否为报警时间
GOTO FENGM7 ;报警时间段
BSF STATUS,5
MOVLW B'00001011'
MOVF TRISA
BCF STATUS,5
BCF PORTA,2
DECFSZ BAOJ4 ;报警的静止时间段
GOTO FENGM8
CALL FENGM5
MOVLW D'100' ;响100次,500毫秒
MOVWF BAOJ4
BSF BAOJ3,0
RETLW 0
FENGM8
CALL FENGM5
RETLW 0
;*****************************************************************
FENGM7 ;报警时间段
BSF STATUS,5
MOVLW B'00001011'
MOVF TRISA
BCF STATUS,5
BSF PORTA,2
DECFSZ BAOJ4 ;报警时间段
GOTO FENGM9
CALL FENGM5
MOVLW D'100' ;响100次,500毫秒
MOVWF BAOJ4
CLRF BAOJ3
BCF PORTA,2
RETLW 0
FENGM9
CALL FENGM5 ;报警时间段,A2口一直为高
RETLW 0
;###################################################
TABLE ;显示转换
ADDWF PCL
RETLW H'F3' ;0
RETLW H'90' ;1
RETLW H'C7' ;2
RETLW H'D5' ;3
RETLW H'B4' ;4
RETLW H'75' ;5
RETLW H'77' ;6
RETLW H'D0' ;7
RETLW H'F7' ;8
RETLW H'F5' ;9
;-----------------------主程序开始-----------------------------------
START
CLRF PORTA
CLRF PORTB
CLRF PORTC
BSF STATUS,5
MOVLW B'11001011'
MOVWF TRISA ;定义端口A
MOVLW B'100'
MOVWF ADCON1 ;定义A/D端口
MOVLW B'00000000'
MOVWF TRISB ;定义端口B
MOVLW B'00000001'
MOVWF TRISC ;定义端口C
BCF STATUS,5
MOVLW 0
MOVWF PORTC
MOVLW H'20'
MOVWF FSR
NEXT
CLRF INDF
INCF FSR,1 ;指针加1
MOVLW H'3B'
SUBWF FSR,0
BTFSS STATUS,Z
GOTO NEXT
BSF BAOJ2,0
MOVLW D'140'
MOVWF R5
;###################################################
BAOJING
BTFSS BAOJ2,0
GOTO BUBAOJ ;去不报警处理
BTFSS BAOJ3,0
GOTO BUBAOJ05S ;停止报警0.5s
CALL FENGM
DECFSZ R5,1
GOTO BAOJING
MOVLW D'140'
MOVWF R5
BCF BAOJ3,0
BCF PORTA,2
GOTO BAOJING
BUBAOJ05S
CALL FENGM5
DECFSZ R5,1
GOTO BAOJING
MOVLW D'140'
MOVWF R5
BSF BAOJ3,0
GOTO BAOJING
BUBAOJ
BCF PORTA,2
BSF BAOJ3,0
RETLW 0
NOP
NOP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -