📄 clean.asm
字号:
;☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
;◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
;^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^^○^
;○○●●●◎◎◇◇◆◆◆◆□□□§§§§№№■■■■△△▲▲※※→←←←↑↑↑↓↓〓〓#&@\^^ ^○^
;==========================================================================
;
; Register Definitions ,CLEAN。。。。。。CLEAR
;
;==========================================================================
W EQU H'0000'
F EQU H'0001'
;----- Register Files------------------------------------------------------
Z EQU .2
TMR0 EQU 1H
PCL EQU 2H
STATUS EQU 3H
FSR EQU 4H
RA EQU 5H
RP0 EQU 5H
RB EQU 06H
RC EQU 07H
RD EQU 08H
RE EQU 09H
ADCON0 EQU 1FH
ADCON1 EQU 9FH
ADRES EQU 1EH
INTCON EQU 0BH
TRISA EQU 85H
TRISB EQU 86H
TRISC EQU 87H
TRISD EQU 88H
TRISE EQU 89H
OPTION_REG EQU 81H
TOIF EQU .2
TOIE EQU .5
INTF EQU .1
INTE EQU .4
GIE EQU .7
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BIT EQU 20H
BUF1 EQU 21H
BUF2 EQU 22H
BUF EQU 23H
SUF EQU 24H
CNT1 EQU 25H
CNT2 EQU 26H
R0 EQU 27H
R1 EQU 28H
COUNT8 EQU 29H
TEMP EQU 2AH
;BIJIAO EQU 2BH
MUF EQU 2CH
SIJI EQU 2DH
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
H_B EQU 30H
L_B EQU 31H
CHUH EQU 32H
CHUL EQU 33H
SHANGH EQU 34H
SHANGL EQU 35H
YUH EQU 36H
YUL EQU 37H
P1H EQU 38H
P1L EQU 39H
NUMBER EQU 3AH ;一次操作的字节数。
TXBUF EQU 3BH ;发送数据缓冲器
RXBUF EQU 3CH ;接受数据缓冲器
CNT EQU 3DH ;循环次数记数器
FLAG EQU 3EH
ADDR EQU 3FH ; 24C01首地址
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BUFFER1 EQU 40H ; 40H~43H, 共4个空白区
MINUTE_BUF EQU 44H ; 44H~47H, 共6个空白区
SHIJIAN EQU 45H
YANSHI EQU 46H
ADCNT EQU 47H
OPEN_F EQU 48H
;~~~~~~~
TIAN EQU 49H ; 天数寄存器
HOUR EQU 4AH ; 小时寄存器,
MINUTE EQU 4BH
SECOND EQU 4CH
MS50 EQU 4DH
MS EQU 4EH
;4FH不要用>>>>><<<<<EQU 4FH
F_BAOCHI EQU 50H
;~~~~~~~
TIAN_BUF EQU 51H
HOUR_BUF EQU 52H
W_TEMP EQU 53H
STATUS_TEMP EQU 54H
FSR_TEMP EQU 55H
BUFLL EQU 56H
CNT_MINUTE EQU 57H
;LAG EQU 58H
;DAT1 EQU 59H
CNT_DIS EQU 5AH
F_P_S EQU 5BH
MING_F EQU 5CH
CASE1 EQU 5DH
CASE2 EQU 5EH
TMP0 EQU 5FH
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CUF EQU 60H
CHUNG EQU 61H
BUFL EQU 62H
BUFL_B EQU 63H
CP1 EQU 64H
;CP2 EQU 65H
JUN_F EQU 66H
FENG_F EQU 67H
BUFP EQU 68H
SHIBUF2 EQU 69H
BUFS EQU 6AH
BUFP_B EQU 6BH
BUFS_B EQU 6CH
VALUE EQU 6DH
BUF3 EQU 6EH
BUF4 EQU 6FH
;==========================================================================
;
; Configuration Bits
;
;==========================================================================
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_CP_ALL EQU H'3FEF'
_CP_OFF EQU H'3FFF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'
__CONFIG _CP_ALL & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC
;==========================================================================
#DEFINE TRISX TRISB ;IIC通信用
;==========================================================================
#DEFINE YA_GAN RA,0
#DEFINE FUYA_GAN RA,1
#DEFINE SONG_GAN RA,2
#DEFINE PAI_GAN RA,3
;DEFINE MEN_SHANG RA,5
;DEFINE MEN_XIA RE,0
;#DEFINE CURRENT RB,0
;#DEFINE NC RB,1
#DEFINE FENGJI RB,2
#DEFINE SDA RB,3
#DEFINE SCL RB,4
#DEFINE ZHAOMING RB,5
#DEFINE MIEJUN RB,6
#DEFINE POWER RB,7
#DEFINE POLICE1 RC,0
#DEFINE POLICE2 RC,1
#DEFINE KA_ABOVE RC,2
#DEFINE KA_BLOW RC,3
#DEFINE AB RC,4
#DEFINE SCK RC,5
#DEFINE TIAOSU_SONG RC,6
#DEFINE TIAOSU_PAI RC,7
#DEFINE MEN_XIA RE,0
#DEFINE MEN_UP RE,1
#DEFINE MEN_DOWN RE,2
;---------------------------------------------------
WAIT MACRO TIME
;延迟TIME us
;变量TIME必须是5us的整数倍.
MOVLW (TIME/5)-1 ;1us
MOVWF TMP0 ;1us
CALL WAIT5U ;2us
ENDM
;---------------------------------------------------
;*************************************
ORG 0000H
NOP
NOP
GOTO START
;*************************************
ORG 0004H
MOVWF W_TEMP
MOVF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
MOVF FSR,W
MOVWF FSR_TEMP
;**************CURRENT TEST******
BTFSS INTCON,INTF
GOTO TIME_T
BTFSS INTCON,INTE
GOTO TIME_T
BCF INTCON,INTF
;***********************
BTFSC FENG_F,0 ;先判断风机开关状态?
GOTO FENG_KAI_QQQ;如风机开则不判断OPEN_F标志位,在风机按键关的情况下判断判断OPEN_F标志位.
;风机关的情况有两种,一种从开到关,一种是关状态。
BTFSC OPEN_F,0 ;判断风机是否从开机跳入关机???
GOTO PAI ;从开机跳入关机,则先关掉送风电机,也就是不给其触发脉冲.
;***********************
FENG_KAI_QQQ
DECFSZ BUFS,0
GOTO XUNSU1
BCF TIAOSU_SONG; 最快>>>>>>
NOP
NOP
NOP
NOP
GOTO PAI
XUNSU1
MOVLW .8
SUBWF BUFS,W
BTFSS STATUS,0
GOTO $+3
MOVLW .8
MOVWF BUFS
;------------------
MOVFW BUFS
MOVWF CUF
WAIT .1000 ;大小决定速度,CUF越大,电机越慢。
DECFSZ CUF
GOTO $-2
;------------------
BCF TIAOSU_SONG
NOP
NOP
NOP
NOP
;_______________
PAI
DECFSZ BUFP,0
GOTO XUNSU2
BCF TIAOSU_PAI
NOP
NOP
NOP
NOP
GOTO TIME_T
XUNSU2
MOVLW .8
SUBWF BUFP,W
BTFSS STATUS,0
GOTO $+3
MOVLW .8
MOVWF BUFP
;------------------
MOVFW BUFP
MOVWF CUF
WAIT .1000 ;大小决定速度 1MS
DECFSZ CUF
GOTO $-2
;------------------
BCF TIAOSU_PAI
NOP
NOP
NOP
NOP
;*************
TIME_T
BTFSS INTCON,TOIF
GOTO INT_EXIT
BTFSS INTCON,TOIE
GOTO INT_EXIT
;~~~~~~~~~
BCF INTCON ,TOIF ;P199
MOVLW 10H
ADDWF MS+1,F
;~~~~~~~~~
MOVLW 0B0H
ADDWF MS,F
MOVLW 3CH
SKPNC
MOVLW 3DH
ADDWF MS+1,F
SKPNC
GOTO _MSTIMEOUT
MOVLW 50H
ADDWF MS,F
MOVLW 0C3H
SKPNC
MOVLW 0C4H
ADDWF MS+1,F
GOTO _CLOCKEXIT
_MSTIMEOUT
INCF MS50,F
MOVLW .20
XORWF MS50,W
SKPZ
GOTO _CLOCKEXIT
CLRF MS50
INCF SECOND,F
MOVLW .60
XORWF SECOND,W
SKPZ
GOTO _CLOCKEXIT
CLRF SECOND
INCF MINUTE,F
MOVLW .60
SUBWF MINUTE,W
SKPNZ
GOTO GOD1
SKPNC
GOTO GOD1
GOTO _CLOCKEXIT
GOD1
CLRF MINUTE
INCF HOUR,F
MOVLW .24
SUBWF HOUR,W
BTFSC STATUS,2
GOTO NA1
BTFSC STATUS,0
GOTO NA1
GOTO _CLOCKEXIT
;SKPZ
;GOTO _CLOCKEXIT ;??????????????????????有的地方丢了.
NA1
CLRF HOUR
INCF TIAN,F
;~~~~~~~~~
_CLOCKEXIT
INT_EXIT
CLRF STATUS
MOVF FSR_TEMP,W
MOVWF FSR
MOVF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F ;ZHIS TWO DO NOT DICHANGE STATUS !!
SWAPF W_TEMP,W
WAIT .600 ;600US
BSF TIAOSU_SONG;拉高
NOP
NOP
BSF TIAOSU_PAI;拉高
NOP
NOP
RETFIE
;****************************************
TABLE
ADDWF PCL,F
RETLW 0FCH ;0
RETLW 60H ;1
RETLW 0DAH ;2
RETLW 0F2H ;3
RETLW 66H ;4
RETLW 0B6H ;5
RETLW 0BEH ;6
RETLW 0E0H ;7
RETLW 0FEH ;8
RETLW 0F6H ;9
RETLW 0FFH ;10
;---------------------------------------------------
WAIT5U
NOP ;1us
NOP ;1us
DECFSZ TMP0,F
GOTO WAIT5U
RETLW 0
;---------------------------------------------------
;****************************************
BCD ;BCD码转换模块
BCF STATUS,0
MOVLW 08H
MOVWF COUNT8
CLRF R0
CLRF R1
MOVF MUF,W
MOVWF BUF2
LOOPBCD2
RLF BUF2
RLF R1
RLF R0
DECFSZ COUNT8
GOTO ADJDECZ2
;——————————————————————————————
MOVF R1,W
MOVWF BUF1
MOVWF BUF2
MOVLW 0F0H
ANDWF BUF1,1
SWAPF BUF1,W
CALL TABLE
MOVWF BUF1
MOVLW 0FH
ANDWF BUF2,W
CALL TABLE
MOVWF BUF2
RETLW 0
ADJDECZ2
MOVLW R1
MOVWF FSR
CALL ADJBCDZ2
MOVLW R0
MOVWF FSR
CALL ADJBCDZ2
GOTO LOOPBCD2
ADJBCDZ2
MOVLW 3
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,3
MOVWF 0
MOVLW 30H
ADDWF 0,W
MOVWF TEMP
BTFSC TEMP,7
MOVWF 0
RETLW 0
;=======================
; 9-*UF
;=======================
SUB_9
MOVLW .9
MOVWF SUF
MOVFW MUF
SUBWF SUF,0
MOVWF MUF
RETURN
;**************ANJIAN ZONG ZI**************
; 检测设置等按键子程序,一级子程序
;***************ZI*************************
TESTKEY
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2
RETURN
CALL DEL100MS
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2
RETURN
CALL TRANSLATE
movf FSR,W ;排风加速
xorlw .4
skpnz
goto PAI_JIA
movf FSR,W ;排风减速
xorlw .5
skpnz
goto PAI_JIAN
movf FSR,W ;送风加速
xorlw .6
skpnz
goto SONG_JIA
movf FSR,W ;送风减速
xorlw .7
skpnz
goto SONG_JIAN
movf FSR,W ;延时加
xorlw .8
skpnz
goto YANSHI_JIA
movf FSR,W ;延时减
xorlw .9
skpnz
goto YANSHI_JIAN
movf FSR,W ;门升
xorlw .10
skpnz
goto DOOR_SHENG
movf FSR,W ;门减
xorlw .11
skpnz
goto DOOR_JIANG
movf FSR,W ;静
xorlw .12
skpnz
goto QUITE
return
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PAI_JIA
MOVLW .8
SUBWF BUFP,W
BTFSC STATUS,2
GOTO EQUAL_PAI_1
BTFSC STATUS,0
GOTO LARG_PAI_1
;==============
BTFSC F_BAOCHI,0 ;检测是否在显示延时的状态下,按下排风加键,如是,则第一次不改变速度,只显示调速值
GOTO BAOCHIA
INCF BUFP
;==============
BAOCHIA
BCF F_BAOCHI,0
MOVFW BUFP
MOVWF MUF
CALL SUB_9
CALL BCD
CALL Z1
EQUAL_PAI_1
LARG_PAI_1
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO PAI_JIA_NO ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .4
BTFSC STATUS,2
GOTO LARG_PAI_1 ;等待键放!
GOTO PAI_JIA_NO ;键放!
PAI_JIA_NO
MOVLW .200
MOVWF CNT_DIS
BSF F_P_S,0
RETURN
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PAI_JIAN
MOVLW .1
SUBWF BUFP,W
BTFSC STATUS,2
GOTO EQUAL_PAI_2
BTFSS STATUS,0
GOTO SMALL_PAI_2
;==============
BTFSC F_BAOCHI,0
GOTO BAOCHIB
DECF BUFP
;==============
BAOCHIB
BCF F_BAOCHI,0
MOVFW BUFP
MOVWF MUF
CALL SUB_9
CALL BCD
CALL Z1
EQUAL_PAI_2
SMALL_PAI_2
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO PAI_JIAN_NO ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .5
BTFSC STATUS,2
GOTO SMALL_PAI_2 ;等待键放!
GOTO PAI_JIAN_NO ;键放!
PAI_JIAN_NO
MOVLW .200
MOVWF CNT_DIS
BSF F_P_S,0
RETURN
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SONG_JIA
MOVLW .8
SUBWF BUFS,W
BTFSC STATUS,2
GOTO EQUAL_SONG_1
BTFSC STATUS,0
GOTO LARG_SONG_1
;==============
BTFSC F_BAOCHI,0 ;检测是否在显示延时的状态下,按下送风加键,如是,则第一次不改变速度,只显示调速值
GOTO BAOCHIC
INCF BUFS
;==============
BAOCHIC
BCF F_BAOCHI,0
MOVFW BUFS
MOVWF MUF
CALL SUB_9
CALL BCD
CALL Z1
EQUAL_SONG_1
LARG_SONG_1
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO SONG_JIA_NO ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .6
BTFSC STATUS,2
GOTO LARG_SONG_1 ;等待键放!
GOTO SONG_JIA_NO ;键放!
SONG_JIA_NO
MOVLW .200
MOVWF CNT_DIS
BCF F_P_S,0
RETURN
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SONG_JIAN
MOVLW .1
SUBWF BUFS,W
BTFSC STATUS,2
GOTO EQUAL_SONG_2
BTFSS STATUS,0
GOTO SMALL_SONG_2
;==============
BTFSC F_BAOCHI,0 ;检测是否在显示延时的状态下,按下送风JIAN键,如是,则第一次不改变速度,只显示调速值
GOTO BAOCHID
DECF BUFS ;
;==============
BAOCHID
BCF F_BAOCHI,0
MOVFW BUFS
MOVWF MUF
CALL SUB_9
CALL BCD
CALL Z1
EQUAL_SONG_2
SMALL_SONG_2
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO SONG_JIAN_NO ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .7
BTFSC STATUS,2
GOTO SMALL_SONG_2 ;等待键放!
GOTO SONG_JIAN_NO ;键放!
SONG_JIAN_NO
MOVLW .200
MOVWF CNT_DIS
BCF F_P_S,0
RETURN
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
YANSHI_JIA
MOVLW .100
SUBWF BUFL,W
BTFSC STATUS,2
GOTO EQUAL_YANSHI_1
BTFSC STATUS,0
GOTO LARG_YANSHI_1
INCF BUFL
MOVFW BUFL
MOVWF BUFLL
MOVWF MUF
CALL BCD
CALL Z1
EQUAL_YANSHI_1
LARG_YANSHI_1
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO YANSHI_JIA_NO ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .8
BTFSC STATUS,2
GOTO LARG_YANSHI_1 ;等待键放!
GOTO YANSHI_JIA_NO ;键放!
YANSHI_JIA_NO
RETURN
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~
YANSHI_JIAN
MOVLW .1
SUBWF BUFL,W
BTFSC STATUS,2
GOTO EQUAL_YANSHI_2
BTFSS STATUS,0
GOTO SMALL_YANSHI_2
DECF BUFL
MOVFW BUFL
MOVWF BUFLL
MOVWF MUF
CALL BCD
CALL Z1
EQUAL_YANSHI_2
SMALL_YANSHI_2
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO YANSHI_JIAN_NO ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .9
BTFSC STATUS,2
GOTO SMALL_YANSHI_2 ;等待键放!
GOTO YANSHI_JIAN_NO ;键放!
YANSHI_JIAN_NO
RETURN
;^^^^^^^^^^^^^^^^^^
DOOR_SHENG ;从A5口采集,同时检测报警信号.
MOVLW B'01100001'
MOVWF ADCON0 ;三 ,A5口、设置时钟源8TOSC,,启动A/D转换模块
CALL ADCAI
MOVLW .153 ;以3V为比较对象,低于3认为低电瓶,
SUBWF ADRES,W ;输入低电瓶有效!!
SKPC
GOTO BAOJING_D ;ADRES<153
BSF MEN_UP ;ADRES>153
NOP
NOP
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO KEYD_NO ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .10
BTFSC STATUS,2
GOTO DOOR_SHENG ;等待键放!
GOTO KEYD_NO ;键放!
BAOJING_D
BSF KA_ABOVE ;报警
NOP
NOP
KEYD_NO
BCF MEN_UP
NOP
NOP
RETURN
;^^^^^^^^^^^^^^^^^^
DOOR_JIANG
BTFSS MEN_XIA ;先检测有无碰到行程开关???
GOTO BAOJING_D_W
BSF MEN_DOWN
NOP
NOP
CALL KEYSCAN
COMF VALUE,0
BTFSC STATUS,2 ;等待键放!
GOTO KEYD_NO_W ;键放!
CALL TRANSLATE
MOVF FSR,0
XORLW .11
BTFSC STATUS,2
GOTO DOOR_SHENG ;等待键放!
GOTO KEYD_NO_W ;键放!
BAOJING_D_W
BSF KA_BLOW ;报警
NOP
NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -