📄 ad.asm
字号:
MOVWF LSD
INCF MSD,1
GOTO OVER
OVER1
MOVF LSD,0
MOVWF LSD1
RETLW 0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
EEPSTART ;EEPROM启动
BSF PORTC,2
BSF PORTC,3
BSF STATUS,5
MOVLW B'00000011'
MOVWF TRISC
BCF STATUS,5
NOP
NOP
NOP
NOP
NOP
BCF PORTC,2
NOP
NOP
NOP
NOP
NOP
NOP
BCF PORTC,3
NOP
NOP
NOP
NOP
RETLW 0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
EEPSTOP ;EEPROM停止
BCF PORTC,3
BCF PORTC,2
BSF STATUS,5
MOVLW B'00000011'
MOVWF TRISC
BCF STATUS,5
NOP
NOP
NOP
NOP
BSF PORTC,3
NOP
NOP
NOP
NOP
BSF PORTC,2
NOP
NOP
NOP
NOP
BCF PORTC,3
NOP
NOP
RETLW 0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
EEPOUT ;送8位数据
MOVLW D'8'
MOVWF EEPCNT
BSF STATUS,5
MOVLW B'00000011'
MOVWF TRISC
BCF STATUS,5
OUTLOOP
BCF PORTC,3
NOP
NOP
NOP
BTFSS EEPDATA,7
GOTO PULL_DOWN_SDAT
BSF PORTC,2
GOTO OUT_NEXT_BIT
PULL_DOWN_SDAT
BCF PORTC,2
OUT_NEXT_BIT
RLF EEPDATA,1
NOP
NOP
BSF PORTC,3
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ EEPCNT,1
GOTO OUTLOOP
BCF PORTC,3
BSF STATUS,5
MOVLW B'00000111'
MOVWF TRISC
BCF STATUS,5
NOP
NOP
BSF PORTC,3
NOP
NOP
NOP
NOP
NOP
NOP
WAIT_ACK
BTFSC PORTC,2
GOTO WAIT_ACK
BCF PORTC,3
NOP
NOP
NOP
NOP
NOP
NOP
RETLW 0
;###############################################################
EEPIN ;收8位数据
MOVLW D'8'
MOVWF EEPCNT
CLRF EEPDATA
BSF STATUS,5
MOVLW B'00000111'
MOVWF TRISC
BCF STATUS,5
BCF STATUS,0
INLOOP
RLF EEPDATA,1
BCF PORTC,3
NOP
NOP
NOP
NOP
NOP
BSF PORTC,3
NOP
NOP
NOP
BTFSS PORTC,2
GOTO REC_DOWN_SDAT
BSF EEPDATA,0
GOTO IN_NEXT_BIT
REC_DOWN_SDAT
BCF EEPDATA,0
IN_NEXT_BIT
NOP
NOP
NOP
BCF PORTC,3
NOP
NOP
NOP
DECFSZ EEPCNT,1
GOTO INLOOP
NOP
NOP
NOP
RETLW 0
;####################################################################
ADSHW ;AD水位检测
CLRF ADRES
BSF STATUS,RP0 ;重新定义模拟口
MOVLW B'100'
MOVWF ADCON1
BCF STATUS,RP0
MOVLW B'10011001' ;32分频,选中RA3
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
;222222222222222222222222222222222222222222@@@@@@
ADDWF SHUIWEI1,1
BTFSC STATUS,C
INCF SHUIWEI2 ;保存进位值
DECFSZ SHUIWEI3,1
RETLW 0 ;不到4次,不做处理
MOVLW D'4'
MOVWF SHUIWEI3 ;4次求平均值
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BCF STATUS,C
RRF SHUIWEI2,1
RRF SHUIWEI1,1 ;右移一次
NOP
BCF STATUS,C
RRF SHUIWEI2,1
RRF SHUIWEI1,1 ;右移二次
NOP
MOVF SHUIWEI1,0
MOVWF SHUIWEI ;确认AD值
CLRF SHUIWEI1
CLRF SHUIWEI2
RETLW 0
;###########################################
READ_EEPROM
MOVLW H'A0'
MOVWF EEPDATA
CALL EEPSTART
CALL EEPOUT ;选定EEPROM
MOVF 00H
MOVWF EEPDATA
CALL EEPOUT ;要读的地址
MOVLW H'A1' ;读00地址数据
MOVWF EEPDATA
CALL EEPSTART
CALL EEPOUT ;发读指令
CALL EEPIN ;接收数据
MOVF EEPDATA,0
MOVWF ZDSS1 ;保存00地址数据
NOP
MOVLW H'A1' ;读01地址数据
MOVWF EEPDATA
CALL EEPSTART
CALL EEPOUT ;发读指令
CALL EEPIN ;接收数据
MOVF EEPDATA,0
MOVWF ZDGS1 ;保存01地址数据
CALL EEPSTOP ;EEPROM停止
RETLW 0
;-----------------------主程序开始-----------------------------------
START
CLRF PORTA
CLRF PORTB
CLRF PORTC
BSF STATUS,5
MOVLW B'00011011'
MOVWF TRISA ;定义端口A
MOVLW B'100'
MOVWF ADCON1 ;定义A/D端口
MOVLW B'00000000'
MOVWF TRISB ;定义端口B
MOVLW B'00000011'
MOVWF TRISC ;定义端口C
BCF STATUS,5
MOVLW H'F0'
MOVWF PORTC
MOVLW H'20'
MOVWF FSR
NEXT
CLRF INDF
INCF FSR,1 ;指针加1
MOVLW H'46'
SUBWF FSR,0
BTFSS STATUS,Z
GOTO NEXT
CLRF JDYS44
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!读eeprom值
CALL READ_EEPROM
NOP
MOVLW D'4' ;4次求平均数重新负值
MOVWF SHUIWEI3
MOVLW D'3'
MOVWF ANJSC
MOVLW D'17'
MOVWF JDYS
MOVLW D'200'
MOVWF JDYS1
MOVWF JDYS2
MOVWF JDYS3
MOVWF JDYS4
MOVLW D'10'
MOVWF JDYS11
MOVWF JDYS22
MOVWF JDYS33
MOVWF JDYS44
MOVLW D'210'
MOVWF SHUIWEI
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
MAIN
CALL ANJIAN ;设置按键处理
CALL SHUIWCL1 ;进水水位处理
CALL SHUIWCL2 ;关水水位处理
CALL SHOUDSS ;手动上水
CALL SWZS ;调用水位指示
CALL ZHSHD
CALL TINGJI
CALL SDSWXS
GOTO MAIN
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ANJIAN
BTFSS PORTA,4
GOTO ANJIAN1 ;设置按键处理
BTFSS PORTC,0
GOTO ANJIAN2 ;上水开按键处理
BTFSS PORTC,1
GOTO ANJIAN3 ;上水关按键处理
CLRF CHULI
RETLW 0
ANJIAN1
BTFSC CHULI,0
RETLW 0
BTFSC PORTA,4
RETLW 0
CALL TIME5MS
BTFSC PORTA,4
RETLW 0
DECFSZ ANJSC,1
RETLW 0
MOVLW D'3'
MOVWF ANJSC
BSF CHULI,0
INCF SHEZHI,1
BSF ZHISHI,1 ;点亮设置指示灯
MOVLW D'4'
SUBWF SHEZHI,0
BTFSC STATUS,C
GOTO ANJIAN11
MOVLW D'1'
SUBWF SHEZHI,0
BTFSC STATUS,Z
GOTO XIANSSJ ;显示进水设置
MOVLW D'2'
SUBWF SHEZHI,0
BTFSC STATUS,Z
GOTO XIANSSG ;显示关水设置
MOVLW D'3'
SUBWF SHEZHI,0
BTFSC STATUS,Z
GOTO XIANSSAD
RETLW 0
XIANSSJ
BSF ZHISHI,3
BCF ZHISHI,7
RETLW 0
XIANSSG
BSF ZHISHI,7
BCF ZHISHI,3
RETLW 0
XIANSSAD
BSF ZHISHI,7
BSF ZHISHI,3
RETLW 0
ANJIAN11
CLRF SHEZHI
BCF ZHISHI,7
BCF ZHISHI,3
BCF ZHISHI,1
RETLW 0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ANJIAN2
BTFSC CHULI,0
RETLW 0
BTFSC PORTC,0
RETLW 0
CALL TIME5MS
BTFSC PORTC,0
RETLW 0
DECFSZ ANJSC,1
RETLW 0
MOVLW D'3'
MOVWF ANJSC
BSF CHULI,0
MOVLW D'1' ;设置键未按下时设定自动上水不处理
SUBWF SHEZHI,0
BTFSS STATUS,Z
RETLW 0
BSF ZHISHI,3 ;点亮上水设置指示
MOVLW D'7'
SUBWF ZDSS1,0
BTFSC STATUS,C
CLRF ZDSS1 ;ZDSS1大于7 就清零
BSF STATUS,C
RLF ZDSS1,1 ;1为20%,3为50%,7位80%
MOVLW H'A0' ;写EEPROM
MOVWF EEPDATA
CALL EEPSTART ;EEPROM启动
CALL EEPOUT
MOVLW 0 ;选择要写的地址00
MOVWF EEPDATA
CALL EEPOUT
MOVF ZDSS1,0 ;送要写的数据
MOVWF ZDSS
MOVF ZDSS,0
MOVWF EEPDATA
CALL EEPOUT
CALL EEPSTOP ;EEPROM停止
RETLW 0
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ANJIAN3
BTFSC CHULI,0
RETLW 0
BTFSC PORTC,1
RETLW 0
CALL TIME5MS
BTFSC PORTC,1
RETLW 0
DECFSZ ANJSC,1
RETLW 0
MOVLW D'3'
MOVWF ANJSC
BSF CHULI,0
MOVLW D'2' ;设置键未按下时设定自动关水不处理
SUBWF SHEZHI,0
BTFSS STATUS,Z
RETLW 0
BSF ZHISHI,7 ;点亮关水设置指示
MOVLW D'7'
SUBWF ZDGS1,0
BTFSC STATUS,C
CLRF ZDGS1
BSF STATUS,C
RLF ZDGS1,1 ;1为50%,3为80%,7位100%
MOVLW H'A0' ;写EEPROM
MOVWF EEPDATA
CALL EEPSTART ;EEPROM启动
CALL EEPOUT
MOVLW D'1' ;选择要写的地址01
MOVWF EEPDATA
CALL EEPOUT
MOVF ZDGS1,0 ;送要写的数据
MOVWF ZDGS
MOVF ZDGS,0
MOVWF EEPDATA
CALL EEPOUT
CALL EEPSTOP ;EEPROM停止
RETLW 0
;##################################################
SHUIWCL1 ;自动进水处理
DECFSZ JDYS,1
RETLW 0
MOVLW D'17'
MOVWF JDYS
BSF PORTA,5
CALL TIME2MS
CALL ADSHW ;调用水位子程序
CALL TIME2MS
BCF PORTA,5
BTFSC SHOUDBZ,0
RETLW 0
MOVF SHEZHI,0 ;在设置按下时泵不处理
BTFSS STATUS,Z
RETLW 0
MOVLW D'1'
SUBWF ZDSS1,0
BTFSC STATUS,Z
GOTO ERSHIS ;设定上水水位为20%
MOVLW D'3'
SUBWF ZDSS1,0
BTFSC STATUS,Z
GOTO WUSHIS ;设定上水水位为50%
MOVLW D'7'
SUBWF ZDSS1,0
BTFSC STATUS,Z
GOTO BASHIS ;设定上水水位为80%
RETLW 0
ERSHIS
MOVLW D'60'
SUBWF SHUIWEI,0
BTFSC STATUS,C
RETLW 0
BSF PORTA,2 ;低于20%要上水
BSF ZHISHI,0 ;点亮上水指示
BSF SHANGSBZ,0 ;置上水标志
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -