www.pudn.com > shibiema.rar > shibiema.ASM
;*************************************** ;*****************程序DOUBLE带定时器,综合PIC16C74*********************** ;========================================================================== ; ; Register Definitions,double//new ; ;========================================================================== W EQU H'0000' F EQU H'0001' ;----- Register Files------------------------------------------------------ SCL EQU 4 SDA EQU 3 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 GIE EQU .7 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BIT EQU 20H BUF1 EQU 21H BUF2 EQU 22H BUF EQU 23H ZUF 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 LAG_FA EQU 48H ;~~~~~~~ TIAN EQU 49H ; 天数寄存器 HOUR EQU 4AH ; 小时寄存器, MINUTE EQU 4BH SECOND EQU 4CH MS50 EQU 4DH MS EQU 4EH ;4FH不要用>>>>><<<<D5 ;************************************* Z1 MOVLW .32 MOVWF BIT BCF STATUS,0 C1 NOP BCF RD,5 NOP NOP BTFSC BUF2,7 BSF RD,0 BTFSS BUF2,7 BCF RD,0 RLF BUF3,1 RLF BUF4,1 ;BUF3、BUF4,BUF1、BUF2 RLF BUF1,1 ; 高 , 低 , 高 ,低 RLF BUF2,1 BSF RD,5 NOP NOP DECFSZ BIT,1 GOTO C1 RETLW 0 ;**************************************** ;MAX2,MIN2 CLK->D2 ;************************************* Z2 MOVLW .32 MOVWF BIT BCF STATUS,0 C2 NOP BCF RD,2 ;BUF3、BUF4,BUF1、BUF2 NOP NOP BTFSC BUF2,7 BSF RD,0 BTFSS BUF2,7 BCF RD,0 RLF BUF3,1 RLF BUF4,1 ;BUF3、BUF4,BUF1、BUF2 RLF BUF1,1 ; 高 , 低 , 高 ,低 RLF BUF2,1 NOP BSF RD,2 NOP NOP DECFSZ BIT,1 GOTO C2 RETLW 0 ;************************************* ;SHI1 CLK-->D6 ;************************************* Z3SHI1 MOVLW .16 MOVWF BIT BCF STATUS,0 C3 NOP BCF RD,6 NOP NOP BTFSC BUF2,7 BSF RD,0 ;BUF1是高位,BUF2是低位. BTFSS BUF2,7 BCF RD,0 NOP NOP RLF BUF1,1 RLF BUF2,1 BSF RD,6 NOP NOP DECFSZ BIT,1 GOTO C3 RETLW 0 ;************************************* ; SHI2 CLK->E2 ;************************************* Z3SHI2 MOVLW .16 MOVWF BIT BCF STATUS,0 C32 NOP BCF RE,2 NOP NOP BTFSC BUF2,7 BSF RD,0 BTFSS BUF2,7 BCF RD,0 NOP NOP RLF BUF1,1 RLF BUF2,1 BSF RE,2 NOP NOP DECFSZ BIT,1 GOTO C32 RETLW 0 ;**************************************** ; SHUI WEN AND YALI CLK-->D7 ;************************************* Z4 MOVLW .32 MOVWF BIT BCF STATUS,0 C4 NOP BCF RD,7 NOP NOP BTFSC BUF2,7 BSF RD,0 BTFSS BUF2,7 BCF RD,0 RLF BUF3,1 RLF BUF4,1 ;BUF3、BUF4,BUF1、BUF2 RLF BUF1,1 ; 高 , 低 , 高 ,低 RLF BUF2,1 NOP BSF RD,7 NOP DECFSZ BIT,1 GOTO C4 RETLW 0 ;**************************************** ; MAX1 AND MIN1,MAX1 SHAN ;**************************************** SHAN1 ;BSF LAG,0 MOVLW 5 MOVWF DAT1 AN1 CALL DELAY200MS ;______________________________ MOVF ZUF,0 ;ZUF 不变,BUF SHAN MOVWF MUF CALL BCD ;______________________________ MOVF BUF1,0 MOVWF BUF3 MOVF BUF2,0 ; XIA限 SHANG限 MOVWF BUF4 ;BUF3、BUF4,BUF1、BUF2 ;______________________________ ; 高 , 低 , 高 ,低 ; ZUF BUF MOVLW 00H ; 闪 MOVWF BUF1 MOVLW 00H MOVWF BUF2 ;______________________________ CALL Z1 ;开始显示 ;______________________________ CALL JIAN_T MOVF FSR,0 ;闪动中有键按下,+,-两键. XORLW .6 BTFSC STATUS,2 CALL JIA1 XORLW .7 BTFSC STATUS,2 CALL JIAN1 CALL DELAY200MS ;______________________________ MOVF ZUF,0 ;ZUF AND BUF 还原 MOVWF MUF CALL BCD ;______________________________ MOVF BUF1,0 MOVWF BUF3 MOVF BUF2,0 MOVWF BUF4 ;______________________________ ;BUF3、BUF4,BUF1、BUF2 MOVF BUF,0 MOVWF MUF CALL BCD ;______________________________ CALL Z1 ;______________________________ DECFSZ DAT1 GOTO AN1 RETLW 0 ;**************************************** ;MAX1 AND MIN1,MIN1 SHAN MIN-MAX ;**************************************** SHAN2 ;BCF LAG,0 ; XIA限 SHANG限 MOVLW 5 ;BUF3、 BUF4, BUF1、BUF2 MOVWF DAT1 ; 高 , 低 , 高 ,低 ; ZUF BUF AN2 ; 闪 CALL DELAY200MS ;______________________________ MOVF BUF,0 ;BUF 不变, ZUF 闪 MOVWF MUF CALL BCD ;转化后BUF1 AND BUF2确定了 MOVLW 00H MOVWF BUF3 MOVLW 00H ;ZUF清0 MOVWF BUF4 ;______________________________ CALL Z1 ;显示 ;______________________________ ;BUF3、BUF4,BUF1、BUF2 CALL JIAN_T MOVF FSR,0 ;闪动中有键按下,+,-两键. XORLW .6 BTFSC STATUS,2 CALL JIA1 XORLW .7 BTFSC STATUS,2 CALL JIAN1 CALL DELAY200MS ;______________________________ MOVF ZUF,0 ;ZUF AND BUF 还原 MOVWF MUF CALL BCD ;______________________________ MOVF BUF1,0 MOVWF BUF3 MOVF BUF2,0 MOVWF BUF4 ;______________________________ MOVF BUF,0 MOVWF MUF CALL BCD ;______________________________ CALL Z1 ;______________________________ DECFSZ DAT1 GOTO AN2 RETLW 0 ;**************************************** ;MAX2 AND MIN2,MAX2 SHAN MIN-MAX ;**************************************** SHAN3 ;BSF LAG2,0 MOVLW 5 MOVWF DAT1 AN3 CALL DELAY200MS ;______________________________ MOVF BMIN,0 ;BMIN 不变,BMAX SHAN MOVWF MUF CALL BCD ;______________________________ MOVF BUF1,0 MOVWF BUF3 MOVF BUF2,0 MOVWF BUF4 ;______________________________ ;BUF3、BUF4,BUF1、BUF2 MOVLW 00H MOVWF BUF1 MOVLW 00H MOVWF BUF2 ;______________________________ CALL Z2 ;______________________________ CALL JIAN_T MOVF FSR,0 ;闪动中有键按下,+,-两键. XORLW .9 BTFSC STATUS,2 CALL JIA2 XORLW .10 BTFSC STATUS,2 CALL JIAN2 CALL DELAY200MS ;______________________________ MOVF BMIN,0 ;ZUF AND BUF 还原 MOVWF MUF CALL BCD ;______________________________ MOVF BUF1,0 MOVWF BUF3 MOVF BUF2,0 MOVWF BUF4 ;______________________________ MOVF BMAX,0 MOVWF MUF CALL BCD ;______________________________ CALL Z2 ;______________________________ DECFSZ DAT1 GOTO AN3 RETLW 0 ;**************************************** ;MAX2 AND MIN2,MIN2 SHAN MIN-MAX ;**************************************** SHAN4 ;BCF LAG2,0 MOVLW 5 MOVWF DAT1 AN4 CALL DELAY200MS ;______________________________ MOVF BMAX,0 ;BMAX 不变,BMIN SHAN MOVWF MUF CALL BCD ;转化后BUF1 AND BUF2确定了 MOVLW 00H MOVWF BUF3 MOVLW 00H MOVWF BUF4 ;______________________________ CALL Z2 ;显示 ;______________________________ ;BUF3、BUF4,BUF1、BUF2 CALL JIAN_T MOVF FSR,0 ;闪动中有键按下 XORLW .9 BTFSC STATUS,2 CALL JIA2 XORLW .10 BTFSC STATUS,2 CALL JIAN2 CALL DELAY200MS ;______________________________ MOVF BMIN,0 ;ZUF AND BUF 还原 MOVWF MUF CALL BCD ;______________________________ MOVF BUF1,0 MOVWF BUF3 MOVF BUF2,0 MOVWF BUF4 ;______________________________ MOVF BMAX,0 MOVWF MUF CALL BCD ;______________________________ CALL Z2 ;______________________________ DECFSZ DAT1 GOTO AN4 RETLW 0 ;**************************************** ; A/D ;**************************************** ADCAI NOP NOP NOP NOP CLRF 2EH CLRF 2FH MOVLW .11 MOVWF CNT1 TAOYUANYA CALL DEL1MS ;CALL TESTKEY BSF ADCON0, 2 ;设定A/D转换模块的状态 ADWAITYA BTFSC ADCON0, 2 GOTO ADWAITYA MOVF ADRES,0 CALL CHENGJI MOVF SHANGL,W ADDWF 2EH,F BTFSC STATUS,0 INCF 2FH DECFSZ CNT1 GOTO TAOYUANYA CALL CHU5 MOVF SHANGL,W MOVWF ADRES RETLW 0 ;**************************************** ; 初始化子程序 ;**************************************** INITIAL BSF STATUS,5 MOVLW B'11111111' MOVWF TRISB MOVLW B'00000000' MOVWF TRISC MOVLW B'00000000' MOVWF TRISD BANKSEL ADCON1 MOVLW B'010' MOVWF ADCON1 MOVLW B'010' BSF STATUS,5 MOVWF TRISE BCF STATUS,5 MOVLW B'11111111' BSF STATUS,5 MOVWF TRISA BCF STATUS,5 RETURN ;**************************************** ;**************************************** DELAY200MS MOVLW 0F0H MOVWF CASE1 Y2 MOVLW 9FH MOVWF CASE2 Y1 DECFSZ CASE2 GOTO Y1 DECFSZ CASE1 GOTO Y2 RETLW 0 DEL1MS MOVLW 01H MOVWF CASE1 D2 MOVLW 0FFH MOVWF CASE2 D1 DECFSZ CASE2 GOTO D1 DECFSZ CASE1 GOTO D2 RETLW 0 DEL100MS MOVLW 0FH MOVWF CASE1 LS2 MOVLW 0FFH MOVWF CASE2 LS1 DECFSZ CASE2 GOTO LS1 DECFSZ CASE1 GOTO LS2 RETURN ;**************************************** ;采集并显示温度和压力,温度和压力从一个口发出 ;**************************************** CAIWHOLE DECFSZ ADCNT,1 RETURN TCAI MOVLW .15 MOVWF ADCNT CAI_WEN_YA MOVLW B'01001001' MOVWF ADCON0 ;三 ,A1口、设置时钟源8TOSC,,启动A/D转换模块 MOVLW .150 MOVWF CHUNG CALL ADCAI MOVF SHANGL,0 MOVWF MUF MOVWF WENBUF ;为后面温度比较用 CALL BCD ;______________________ ;______________________ ;BUF3、BUF4,BUF1、BUF2 MOVF BUF1,0 ; 温度 , 压力 MOVWF BUF3 ;______________________ MOVF BUF2,0 ;温度显示 MOVWF BUF4 MOVLW B'01000001' MOVWF ADCON0 ;三、A0口 ,设置时钟源8TOSC,,启动A/D转换模块 MOVLW .140 MOVWF CHUNG CALL ADCAI MOVF SHANGL,W ;================================ SUBLW .10 SKPC GOTO DAYU10 MOVLW .0 GOTO XIXIXI DAYU10 MOVF SHANGL,W ;================================ XIXIXI MOVWF MUF CALL BCD CALL Z4 ;压力显示 CALL DEL1MS CALL DEL1MS RETURN ;**************************************** ; 采集并显示湿度2 ;**************************************** XIAN_SHI2 MOVLW B'01010001' MOVWF ADCON0 ;三、A2口,设置时钟源8TOSC,,启动A/D转换模块 MOVLW .99 MOVWF CHUNG CALL ADCAI MOVF SHANGL,0 MOVWF MUF MOVWF SHIBUF2 CALL BCD CALL Z3SHI2 RETURN ;湿度2显示 ;**************************************** ; 采集并显示湿度1 ;**************************************** XIAN_SHI1 MOVLW B'01011001' MOVWF ADCON0 ;三、A3口,设置时钟源8TOSC,,启动A/D转换模块 MOVLW .99 MOVWF CHUNG CALL ADCAI MOVF SHANGL,0 MOVWF MUF MOVWF SHIBUF CALL BCD CALL Z3SHI1 ;湿度1显示 RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; 调温子程序,检测FBIAO ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TIAOWEN_ZI BSF LED NOP NOP NOP MOVLW .40 SUBWF WENBUF,W BTFSC STATUS,0 GOTO RBOFF MOVLW .30 SUBWF WENBUF,W BTFSC STATUS,0 GOTO BACK1 RBON NOP BSF JIARE NOP NOP GOTO BACK1 RBOFF NOP BCF JIARE NOP GOTO BACK1 BACK1 RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; 键翻译子程序 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TRANSLATE MOVLW 70H MOVWF FSR XUN_LOOP1 MOVF 0,0 XORWF VALUE,0 BTFSC STATUS,2 GOTO XUN_LOOP2 INCF FSR,1 ;________________ ;________________ MOVLW 7FH ;鉴于此处是从70H处放键值码,所以作了改动,原为BTFSS FSR,4一条指令 XORWF FSR ,W ;________________ BTFSS STATUS,Z ;________________ GOTO XUN_LOOP1 MOVLW .12 ;可能多键同时按下,因为12未用,所以返回一个未用键 MOVWF FSR RETURN XUN_LOOP2 BCF FSR,6 BCF FSR,5 BCF FSR,4 RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; 上下限1显示 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SHANGXIA_DIS1 ;上下限1显示 MOVF ZUF,W MOVWF MUF CALL BCD MOVF BUF1,0 MOVWF BUF3 ;SHANGXIA_DIS1 AND SHANGXIA_DIS1发送的脉冲口不同 MOVF BUF2,0 MOVWF BUF4 MOVF BUF,W MOVWF MUF CALL BCD CALL Z1 RETURN ;_________________________ SHANGXIA_DIS2 MOVF BMIN,W ;SHANGXIA_DIS1 AND SHANGXIA_DIS2发送的脉冲口不同 MOVWF MUF CALL BCD ;上下限2显示 MOVF BUF1,0 MOVWF BUF3 MOVF BUF2,0 MOVWF BUF4 MOVF BMAX,W MOVWF MUF CALL BCD CALL Z2 RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;检测水位, 水位子程序, 缺水,不工作,并且置位FBIAO位! ;_______________________________________________ ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% T_SHUIWEI BTFSC SHUIWUI GOTO SJIAN CALL DEL100MS BTFSC SHUIWUI GOTO SJIAN GOTO QUESHUI ;缺水,不工作, SJIAN BTFSC FBIAO,0 GOTO QUESHUI RETURN ;_________________________ QUESHUI ;缺水,停 BSF FBIAO,0 ;置缺水标志位 NOP NOP BCF JIARE NOP NOP NOP BSF POLICE NOP NOP NOP BCF PENWU NOP NOP ;~~~~~~~~~~~~~~~~~~ BTFSS FANGYA,0 GOTO KUQI_SHUI1 ;~~~~~~~~~~~~~~~~~~ ;========================== ;CALL SHUNXU_CLOSE1 CALL FA1_FA2 ;========================== KUQI_SHUI1 BCF FA1 NOP NOP BCF FA2 NOP NOP BCF T1LED ;change NOP NOP BCF T2LED ;change NOP NOP ;CLRF FANGYA RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; 调温判断子程序,也检测FBIAO ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TIAOWENPAN BTFSC FBIAO,0 GOTO QUE_SHUI CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO TIAOWEN_NO CALL DEL100MS CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO TIAOWEN_NO CALL TRANSLATE MOVF FSR,0 XORLW 04H ; 4 TO TIAOWEN BTFSS STATUS,2 GOTO TIAOWEN_NO GOTO TIAOWEN_YES TIAOWEN_YES ;__________ MOVLW .1 ADDWF TWEN_F ;__________ TIAOWEN_L CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 ;等待键放! GOTO TIAOWEN_NO ;键放! CALL TRANSLATE MOVF FSR,0 XORLW 04H ; 4 TO TIAOWEN BTFSC STATUS,2 GOTO TIAOWEN_L ;等待键放! GOTO TIAOWEN_NO ;键放! TIAOWEN_NO BTFSC TWEN_F,0 GOTO TIAOWEN1 ;______________________________ BCF LED NOP NOP NOP BCF JIARE ;no tiaowen!关加热器 NOP NOP NOP RETURN ;______________________________ TIAOWEN1 CALL TIAOWEN_ZI ;调用调温子程序. RETURN QUE_SHUI RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; 区1,2开或关判断子程序 自动状态下 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% QU12_ZI BTFSC FBIAO,0 ;水位检测 RETURN CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO QU1_NO ;ZI DONG CALL DEL100MS CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO QU1_NO CALL TRANSLATE MOVF FSR,0 XORLW .2 ; 2 TO TONGDAO 1 BTFSS STATUS,2 GOTO QU1_NO GOTO QU1_YES QU1_YES ;_________ MOVLW .1 ADDWF T1_F ;_________ QU1_L CALL KEYSCAN COMF VALUE,0 ;ZI DONG BTFSC STATUS,2 ;等待键放! GOTO QU1_NO ;键放! CALL TRANSLATE MOVF FSR,0 XORLW .2 ; 2 TO QU1 BTFSC STATUS,2 GOTO QU1_L ;等待键放! GOTO QU1_NO ;键放! QU1_NO BTFSS T1_F,0 GOTO QU1_KAI GOTO QU1_GUAN ;______________________________________ QU1_KAI BSF LAG_KAIGUAN,1 ;======================= ;BCF LAG_FA,1 ;一定不能要,因为区开的时候不代表阀门是否开?? ;======================= BSF T1LED NOP NOP NOP CALL XIAN_SHI1 ;湿度1采集,BCD转化,显示 CALL SHANGXIA_DIS1 ;上下限1显示 CALL DEL1MS CALL DEL1MS CALL QU1PAN ;子程序中检测了水位/ GOTO QU2 ;ZI DONG QU1_GUAN BCF LAG_KAIGUAN,1 ;======================================= ;CALL SHUNXU_CLOSE1 BSF LAG_FA,1 ;____________________________ BTFSC LAG_FA,2 GOTO GG1 ;======================================== BCF T1LED ;关掉灯 NOP NOP BCF FA1 NOP NOP GG1 CLRF BUF1 CLRF BUF2 ;关掉湿度显示 ;ZI DONG CALL Z3SHI1 CLRF BUF1 CLRF BUF2 CLRF BUF3 ;关掉上下限1显示 CLRF BUF4 CALL Z1 ;BCF T1LED ;change NOP NOP BCF FLAG_PENWU,0 GOTO QU2 ;______________________________________ QU2 CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO QU2_NO CALL DEL100MS ;ZI DONG CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO QU2_NO CALL TRANSLATE MOVF FSR,0 XORLW .3 ; 3 TO TONGDAO 2 BTFSS STATUS,2 GOTO QU2_NO GOTO QU2_YES QU2_YES ;_________ MOVLW .1 ADDWF T2_F ;_________ QU2_L CALL KEYSCAN COMF VALUE,0 ;ZI DONG BTFSC STATUS,2 ;等待键放! GOTO QU2_NO ;键放! CALL TRANSLATE MOVF FSR,0 XORLW .3 ; 3 TO QU2 BTFSC STATUS,2 GOTO QU2_L ;等待键放! GOTO QU2_NO ;键放! QU2_NO BTFSS T2_F,0 GOTO QU2_KAI GOTO QU2_GUAN ;_____________________ QU2_KAI BSF LAG_KAIGUAN,2 ;======================== ;BCF LAG_FA,2 ;一定不能要,因为区开的时候不代表阀门是否开?? ;======================== BSF T2LED ;ZI DONG NOP NOP CALL XIAN_SHI2 ;湿度2采集,BCD转化,显示 CALL SHANGXIA_DIS2 ;上下限2显示 CALL DEL1MS CALL DEL1MS CALL QU2PAN ;子程序中检测了水位/ CALL BANG_PAN RETURN QU2_GUAN BCF LAG_KAIGUAN,2 ;======================================= ;CALL SHUNXU_CLOSE2 BSF LAG_FA,2 ;____________________________ BTFSC LAG_FA,1 GOTO GG22 ;======================================== BCF T2LED NOP nop BCF FA2 NOP NOP ;ZI DONG GG22 CLRF BUF1 CLRF BUF2 ;关掉湿度显示 CALL Z3SHI2 CLRF BUF1 CLRF BUF2 CLRF BUF3 ;关掉上下限显示 CLRF BUF4 CALL Z2 NOP NOP BCF FLAG_PENWU,1 CALL BANG_PAN ;_____________________ RETURN ;=========================================================================== ; 子程序 ;=========================================================================== BANG_PAN MOVF LAG_KAIGUAN,F BTFSS STATUS,2 GOTO I00 BCF PENWU NOP NOP ;~~~~~~~~~~~~~~~~~~ BTFSS FANGYA,0 GOTO JJJ1 ;======================= CALL FA1_FA2 ;======================= ;~~~~~~~~~~~~~~~~~~ JJJ1 BCF T1LED ;跳到此处是人工强制关区所致,需关区电源 NOP NOP BCF T2LED NOP NOP GOTO KUQI1 I00 MOVF FLAG_PENWU,F BTFSS STATUS,2 RETURN BCF PENWU NOP NOP ;~~~~~~~~~~~~~~~~~~ BTFSS FANGYA,0 GOTO KUQI1 ;======================= CALL FA1_FA2 ;======================= ;~~~~~~~~~~~~~~~~~~ KUQI1 BCF FA1 NOP NOP BCF FA2 NOP NOP NOP ;CLRF LAG_FA CLRF FANGYA RETURN ;======================================= ;======================================= ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; 区1,2开或关判断子程序 手动状态下 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% QU12_SHOU BTFSC FBIAO,0 ;水位检测 RETURN CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO QU1_NO8 CALL DEL100MS CALL KEYSCAN ;SHOU_DONG COMF VALUE,0 BTFSC STATUS,2 GOTO QU1_NO8 CALL TRANSLATE MOVF FSR,0 XORLW .2 ; 2 TO TONGDAO 1 BTFSS STATUS,2 GOTO QU1_NO8 GOTO QU1_YES8 QU1_YES8 ;_________ MOVLW .1 ADDWF T1_F ;_________ QU1_L8 CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 ;等待键放! GOTO QU1_NO8 ;键放! CALL TRANSLATE MOVF FSR,0 XORLW .2 ; 2 TO QU1 BTFSC STATUS,2 GOTO QU1_L8 ;等待键放! GOTO QU1_NO8 ;键放! ;SHOU_DONG QU1_NO8 BTFSS T1_F,0 GOTO QU1_KAI8 GOTO QU1_GUAN8 ;______________________________________ QU1_KAI8 BSF LAG_KAIGUAN,1 ;======================================= BCF LAG_FA,1 ;要,手动状态下,区开的情况下,阀门一定是开的,在从手动向自动跳时有用 ;======================================= BSF T1LED NOP CALL XIAN_SHI1 ;湿度1采集,BCD转化,显示 CALL SHANGXIA_DIS1 ;上下限1显示 ;CALL QU1PAN ;子程序中检测了水位/ CALL DEL1MS CALL DEL1MS BSF PENWU NOP NOP ;SHOU_DONG BSF FANGYA,0 BSF FA1 NOP NOP ;BSF T1LED NOP NOP BSF FLAG_PENWU,0 ;重要,不可删 GOTO QU28 QU1_GUAN8 BCF LAG_KAIGUAN,1 ;======================================= ;CALL SHUNXU_CLOSE1 BSF LAG_FA,1 ;____________________________ BTFSC LAG_FA,2 GOTO GO1 ;======================================== BCF T1LED ;关掉灯 NOP nop BCF FA1 NOP NOP ;SHOU_DONG GO1 CLRF BUF1 CLRF BUF2 ;关掉湿度显示 CALL Z3SHI1 CLRF BUF1 CLRF BUF2 CLRF BUF3 ;关掉上下限1显示 CLRF BUF4 CALL Z1 ;BCF T1LED NOP NOP BCF FLAG_PENWU,0 GOTO QU28 ;______________________________________ QU28 CALL KEYSCAN COMF VALUE,0 ;SHOU_DONG BTFSC STATUS,2 GOTO QU2_NO8 CALL DEL100MS CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO QU2_NO8 CALL TRANSLATE MOVF FSR,0 XORLW .3 ; 3 TO TONGDAO 2 BTFSS STATUS,2 GOTO QU2_NO8 GOTO QU2_YES8 QU2_YES8 ;_________ MOVLW .1 ADDWF T2_F ;_________ QU2_L8 CALL KEYSCAN COMF VALUE,0 ;SHOU_DONG BTFSC STATUS,2 ;等待键放! GOTO QU2_NO8 ;键放! CALL TRANSLATE MOVF FSR,0 XORLW .3 ; 3 TO QU2 BTFSC STATUS,2 GOTO QU2_L8 ;等待键放! GOTO QU2_NO8 ;键放! QU2_NO8 BTFSS T2_F,0 GOTO QU2_KAI8 GOTO QU2_GUAN8 ;_____________________ QU2_KAI8 BSF LAG_KAIGUAN,2 ;======================================= BCF LAG_FA,2 ;要,手动状态下,区开的情况下,阀门一定是开的,在从手动向自动跳时有用 ;======================================= BSF T2LED NOP NOP CALL XIAN_SHI2 ;湿度2采集,BCD转化,显示 CALL SHANGXIA_DIS2 ;上下限2显示 ;CALL QU2PAN ;子程序中检测了水位/ CALL DEL1MS CALL DEL1MS BSF PENWU NOP NOP BSF FANGYA,0 ;SHOU_DONG BSF FA2 NOP NOP ;BSF T2LED NOP NOP BSF FLAG_PENWU,1 RETURN QU2_GUAN8 BCF LAG_KAIGUAN,2 ;======================================= ;CALL SHUNXU_CLOSE2 BSF LAG_FA,2 ;____________________________ BTFSC LAG_FA,1 GOTO GO2 ;======================================== BCF T2LED NOP NOP BCF FA2 ;SHOU_DONG NOP NOP GO2 CLRF BUF1 CLRF BUF2 ;关掉湿度显示 CALL Z3SHI2 CLRF BUF1 CLRF BUF2 CLRF BUF3 ;关掉上下限显示 CLRF BUF4 CALL Z2 NOP NOP BCF FLAG_PENWU,1 ;SHOU_DONG CALL BANG_PAN ;_____________________;; RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FA1_FA2 SIYANG01 MOVLW .9 MOVWF JISU YAN2S1 CALL DELAY200MS CALL DELAY200MS CALL CAI_WEN_YA CALL DELAY200MS CALL DELAY200MS DECFSZ JISU,F GOTO YAN2S1 ;CLRF LAG_FA ;不能在在这清,不然会影响!!!也就是在放压时也不能清,别的时候保持原状态 RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLEAR_1 CLRF BUF1 CLRF BUF2 CLRF BUF3 CLRF BUF4 CALL Z1 ;QING 上限,清空!灭. CALL Z2 ;QING 下限,清空!灭. CALL Z3SHI1 ;清所有七段显示码,清空!灭. CALL Z3SHI2 ;清湿度2,灭. CALL Z4 ;清空水温和压力,灭. CLRF RC CLRF RD CLRF RE ;____所有输出为低 RETURN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; 程序开始 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% START ;—————————————————————————— ;bsf STATUS,5 ;MOVLW B'00000011' ;MOVWF OPTION_REG ;16预分频,16次TMR0加1 BCF STATUS,5 CLRF INTCON BCF INTCON,TOIE BCF INTCON,GIE BCF INTCON,TOIF ;MOVLW 00H ;MOVWF TMR0 ;—————————————————————————— CLRF LAG_KAIGUAN CLRF FANGYA CLRF SIJI CLRF LAG CLRF LAG2 CLRF FBIAO CLRF SZDF CLRF TWEN_F CLRF FLAG_PENWU CLRF T1_F CLRF T2_F CLRF LAG_FA BSF LAG_FA,1 BSF LAG_FA,2 MOVLW .1 MOVWF ADCNT CLRF MS CLRF MS+1 CLRF MS50 CLRF SECOND ;CLRF MINUTE ;—————————————————————————— BCF STATUS,5 MOVLW B'11111111' ;全为按键接口! BSF STATUS,5 MOVWF TRISB BCF STATUS,5 ;—————————————————————————— NOP NOP MOVLW B'00000000' BSF STATUS,5 MOVWF TRISC ;BCF STATUS,5 CLRF RC ;—————————————————————————— MOVLW B'00000000' BSF STATUS,5 MOVWF TRISD BCF STATUS,5 CLRF RD ;—————————————————————————— NOP BANKSEL ADCON1 MOVLW B'010' MOVWF ADCON1 ;A口全为模拟口,E口全为数字口 MOVLW B'010' BSF STATUS,5 MOVWF TRISE BCF STATUS,5 ;—————————————————————————— MOVLW B'11111111' BSF STATUS,5 MOVWF TRISA BCF STATUS,5 ;—————————————————————————— MOVLW 77H MOVWF 70H MOVLW 0B7H MOVWF 71H MOVLW 0D7H MOVWF 72H MOVLW 0E7H MOVWF 73H MOVLW 7BH MOVWF 74H MOVLW 0BBH MOVWF 75H MOVLW 0DBH MOVWF 76H MOVLW 0EBH MOVWF 77H MOVLW 7DH MOVWF 78H MOVLW 0BDH MOVWF 79H MOVLW 0DDH MOVWF 7AH MOVLW 0EDH MOVWF 7BH MOVLW 7EH MOVWF 7CH MOVLW 0BEH MOVWF 7DH MOVLW 0DEH MOVWF 7EH MOVLW 0EEH MOVWF 7FH CALL ROMR_TIME ;开机定时器开始运行.把EEPROM中的天数和小时积存器调出。 ;—————————————————————————— DIANYUAN CALL CLEAR_1 CLRF FBIAO ;CLER 缺水标志位.为加水重新启动做准备@@@@%^&*()~~~~~~~~~~~~ ;—————————————————————————— ;下面等待启动键!电源键.AND 启动识别码!!! ;—————————————————————————— ;========================================= ; 动识别码!!! ;========================================= CALL SHIBIEMA_R MOVLW .79 BANKSEL SHIBIEMA XORWF SHIBIEMA,W SKPZ GOTO $ ;======================================== CHECK MOVLW .180 ;本程序设置20天 XORWF TIAN,W ;MOVLW .5 ;本程序设置2MINUTE ;XORWF MINUTE,W SKPNZ BSF SIJI,0 ;—————————————————————————— BTFSS SIJI,0 GOTO SI_NO BCF INTCON,TOIE ;定时器停止运行(实际停止中断,时间积存器停止自加) BCF INTCON,GIE CALL SERVE GOTO $ ;进入死循环 ;—————————————————————————— SI_NO CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO CHECK ;等待启动键! CALL DEL100MS CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO CHECK CALL TRANSLATE MOVF FSR,0 XORLW 00H ;0 TO POWER BTFSS STATUS,2 GOTO CHECK ;——————— DENG_0 CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 ;等待键放! GOTO FANG_0 CALL TRANSLATE MOVF FSR,0 XORLW 00H ;0 TO POWER BTFSC STATUS,2 GOTO DENG_0 GOTO FANG_0 ;——————— FANG_0 BSF POWER_LED NOP NOP NOP ;—————————————————————————— CALL ROMR ;读ROM数据. ;—————————————————————————— MOVF BUF,W MOVWF BUF_B MOVF ZUF,W MOVWF ZUF_B MOVF BMAX,W MOVWF BMAX_B MOVF BMIN,W MOVWF BMIN_B MOVLW .35 MOVWF YANSHI YAN CALL DELAY200MS DECFSZ YANSHI,1 GOTO YAN ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;_________________________ ; S/Z TEST??? ;_________________________ ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ZIDONG MOVLW .180 ;本程序设置20天 XORWF TIAN,W ;MOVLW .5 ;本程序设置2MINUTE ;XORWF MINUTE,W SKPNZ BSF SIJI,0 ;—————————————————————————— BTFSS SIJI,0 GOTO WORK_1 BCF INTCON,TOIE ;定时器停止运行(实际停止中断,时间积存器停止自加) BCF INTCON,GIE CALL CLEAR_1 CALL SERVE GOTO $ ;进入死循环 ;—————————————————————————— WORK_1 ;_________________________ ;电源按键检测,由自动状态-->关机 ;_________________________ CALL INITIAL ;—————————————————————————— MOVLW .12 MOVWF SHIJIAN XUN_01 CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO XIUCLOUD ;无键按下 CALL DEL100MS CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO XIUCLOUD ;无键按下 CALL TRANSLATE MOVF FSR,0 XORLW 00H ;0 TO POWER BTFSS STATUS,2 GOTO XIUCLOUD ;不是电源键按下 CALL DELAY200MS DECFSZ SHIJIAN,1 GOTO XUN_01 DENG_0A ;CALL KEYSCAN ;COMF VALUE,0 ;BTFSC STATUS,2 ;等待键放! ;GOTO FANG_0A ;CALL TRANSLATE ;MOVF FSR,0 ;XORLW 00H ;0 TO POWER ;BTFSC STATUS,2 ;GOTO DENG_0A ;GOTO FANG_0A FANG_0A CALL CLEAR_1 MOVLW .16 MOVWF SHIJIAN FANG_0AA CALL DELAY200MS DECFSZ SHIJIAN,1 GOTO FANG_0AA GOTO DIANYUAN ;_________________________ XIUCLOUD CALL SERVE ;查询ZUF和BUF有无变化, ;_________________________ CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO SZD_NO CALL DEL100MS CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 ;检测手自动 GOTO SZD_NO CALL TRANSLATE MOVF FSR,0 XORLW 01H ; 1 TO SZDONG BTFSS STATUS,2 GOTO SZD_NO GOTO SZD_YES SZD_YES ;___________________ MOVLW .1 ADDWF SZDF ;___________________ SZD_L CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 ;等待键放! GOTO SZD_NO ;键放! CALL TRANSLATE MOVF FSR,0 XORLW 01H ; 1 TO SZDONG BTFSC STATUS,2 GOTO SZD_L ;等待键放! GOTO SZD_NO ;键放! SZD_NO BTFSC SZDF,0 GOTO SHOUDONG GOTO ZIDONG0 ;_________________________ ;下面进入自动状态! ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;首先检测是否缺水? ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ZIDONG0 bsf SZLED CALL TESTKEY ;按键扫描 CALL T_SHUIWEI ;首先检测是否缺水?子程序中停.置FBIAO ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CALL TIAOWENPAN ;子程序中检测了缺水标志位FBIAO ;*************************************** CALL QU12_ZI ;1区和2区的判断>, 检测了缺水标志位FBIAO CALL CAIWHOLE ;采集并且显示水温和压力 GOTO ZIDONG ;*************************************** ;##################################&&&&&&&&&&&$$$$$$$$$@@@@@@@@@@@@@@@!!!!!!!!!!!!! ;##################################&&&&&&&&&&&$$$$$$$$$@@@@@@@@@@@@@@@!!!!!!!!!!!!! ;--------------------------手动状态----------- ;##################################&&&&&&&&&&&$$$$$$$$$@@@@@@@@@@@@@@@!!!!!!!!!!!!! SHOUDONG MOVLW .180 ;本程序设置20天 XORWF TIAN,W ;MOVLW .5 ;本程序设置2MINUTE ;XORWF MINUTE,W SKPNZ BSF SIJI,0 ;—————————————————————————— BTFSS SIJI,0 GOTO WORK_2 BCF INTCON,TOIE ;定时器停止运行(实际停止中断,时间积存器停止自加) BCF INTCON,GIE CALL CLEAR_1 CALL SERVE GOTO $ ;进入死循环 WORK_2 ;_________________________ ;电源按键检测 ;_________________________ CALL INITIAL MOVLW .12 MOVWF SHIJIAN ;—————————————————————————— XUN_02 CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO SHOWCLOUD CALL DEL100MS CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO SHOWCLOUD CALL TRANSLATE MOVF FSR,0 XORLW 00H ;0 TO POWER BTFSS STATUS,2 GOTO SHOWCLOUD CALL DELAY200MS DECFSZ SHIJIAN,1 GOTO XUN_02 DENG_0B ;CALL KEYSCAN ;COMF VALUE,0 ;BTFSC STATUS,2 ;等待键放! ;GOTO FANG_0B ;CALL TRANSLATE ;MOVF FSR,0 ;XORLW 00H ;0 TO POWER ;BTFSC STATUS,2 ;GOTO DENG_0B ;GOTO FANG_0B FANG_0B CALL CLEAR_1 MOVLW .16 MOVWF SHIJIAN FANG_0BB CALL DELAY200MS DECFSZ SHIJIAN,1 GOTO FANG_0BB GOTO DIANYUAN ;_________________________ SHOWCLOUD CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 GOTO SZD_NO2 CALL DEL100MS CALL KEYSCAN ;检测手自动 COMF VALUE,0 BTFSC STATUS,2 GOTO SZD_NO2 CALL TRANSLATE MOVF FSR,0 XORLW 01H ; 1 TO SZDONG BTFSS STATUS,2 GOTO SZD_NO2 GOTO SZD_YES2 SZD_YES2 ;____________ MOVLW .1 ADDWF SZDF ;____________ SZD_L2 CALL KEYSCAN COMF VALUE,0 BTFSC STATUS,2 ;等待键放! GOTO SZD_NO2 ;键放! CALL TRANSLATE MOVF FSR,0 XORLW 01H ; 1 TO SZDONG BTFSC STATUS,2 GOTO SZD_L2 ;等待键放! GOTO SZD_NO2 ;键放! SZD_NO2 BTFSC SZDF,0 GOTO SHOUDONG0 GOTO BEGINZI ;_________________________ ;%%%%%%%%%%%%%%%%%%%% ;由手动向自动跳时要与下限进行判断 ;%%%%%%%%%%%%%%%%%%%% BEGINZI CALL STOZ GOTO ZIDONG ;%%%%%%%%%%%%%%%%%%%% SHOUDONG0 ;_________________________ bcf SZLED CALL SERVE ;THIS TWO 同时有或同时删掉 CALL TESTKEY ;按键扫描 ;_________________________ CALL T_SHUIWEI ;首先检测是否缺水?子程序中停.置FBIAO CALL TIAOWENPAN ;子程序中检测了缺水标志位FBIAO CALL CAIWHOLE ;采集并且显示水温和压力 CALL QU12_SHOU ;检测了缺水标志位FBIAO GOTO SHOUDONG ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ;SHOU TO ZI ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STOZ bsf SZLED NOP MOVLW B'01011001' MOVWF ADCON0 ;三、A3口,设置时钟源8TOSC,,启动A/D转换模块 MOVLW .99 MOVWF CHUNG CALL ADCAI ;在最后一个把CNTFLAG的0位置1!!!! MOVF SHANGL,0 MOVWF MUF MOVWF SHIBUF MOVF BUF,W ;ZUF与BUF进行比较, SUBWF ZUF,W BTFSC STATUS,0 GOTO ZUFLARGV GOTO BUFLARGV ;STOZ====== ZUFLARGV MOVF BUF,W SUBWF SHIBUF,W BTFSC STATUS,0 GOTO GUANDIAO GOTO BYE1 BUFLARGV MOVF ZUF,W SUBWF SHIBUF,W BTFSC STATUS,0 GOTO GUANDIAO GOTO BYE1 GUANDIAO ;========================= ;CALL SHUNXU_CLOSE1 ;========================= BSF LAG_FA,1 ;____________________________ BTFSC LAG_FA,2 ;判断2区有无关掉 GOTO ZZZZ ;____________________________ BCF FA1 ;STOZ====== NOP NOP ZZZZ NOP NOP BCF FLAG_PENWU,0 ;************* BYE1 MOVLW B'01010001' MOVWF ADCON0 ;三、A2口,设置时钟源8TOSC,,启动A/D转换模块 MOVLW .99 MOVWF CHUNG CALL ADCAI MOVF SHANGL,0 MOVWF MUF MOVWF SHIBUF2 MOVF BMAX,W ;BMAX与BMIN进行比较, SUBWF BMIN,W BTFSC STATUS,0 GOTO ZUFLARGV2 GOTO BUFLARGV2 ZUFLARGV2 MOVF BMAX,W ;STOZ====== SUBWF SHIBUF2,W BTFSC STATUS,0 GOTO GUANDIAO2 GOTO BYE2 BUFLARGV2 MOVF BMIN,W SUBWF SHIBUF2,W BTFSC STATUS,0 GOTO GUANDIAO2 GOTO BYE2 GUANDIAO2 ;========================= ;CALL SHUNXU_CLOSE2 ;========================= BSF LAG_FA,2 ;____________________________ BTFSC LAG_FA,1 GOTO CCCC ;____________________________ BCF FA2 CCCC NOP NOP NOP BCF FLAG_PENWU,1 BYE2 CALL BANG_PAN RETURN ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; 湿度1比较检测!!!! ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& QU1PAN BTFSC FBIAO,0 GOTO BACKSHI1 MOVF SHIBUF,W MOVWF BIJIAO MOVF BUF,W ;ZUF与BUF进行比较, SUBWF ZUF,W BTFSC STATUS,2 GOTO ZUFEQUAL BTFSC STATUS,0 GOTO ZUFLARG GOTO BUFLARG ZUFEQUAL MOVF SHIBUF,0 MOVWF BIJIAO ; 湿度1比较检测!!!! MOVF ZUF,W SUBWF BIJIAO,W BTFSC STATUS,2 GOTO EQUAL BTFSC STATUS,0 GOTO LARG GOTO SMALL ZUFLARG MOVF SHIBUF,0 ; 湿度1比较检测!!!! MOVWF BIJIAO MOVF ZUF,W SUBWF BIJIAO,W BTFSC STATUS,2 GOTO EQUAL BTFSC STATUS,0 GOTO LARG MOVF BIJIAO,W SUBWF BUF,W BTFSC STATUS,2 GOTO SMALL BTFSC STATUS,0 GOTO SMALL GOTO BACKSHI1_BUDING ;当处于上下限之间时,必须建立标志位,见BACKSHI1_BUDING BUFLARG MOVF SHIBUF,0 MOVWF BIJIAO ; 湿度1比较检测!!!! MOVF BUF,W SUBWF BIJIAO,W BTFSC STATUS,2 GOTO EQUAL BTFSC STATUS,0 GOTO LARG MOVF BIJIAO,W SUBWF ZUF,W BTFSC STATUS,2 GOTO SMALL BTFSC STATUS,0 GOTO SMALL GOTO BACKSHI1_BUDING ;当处于上下限之间时,必须建立标志位,见BACKSHI1_BUDING ; 湿度1比较检测!!!! LARG EQUAL ;CALL SHUNXU_CLOSE1 ;=================================== BSF LAG_FA,1 ;____________________________ BTFSC LAG_FA,2 GOTO VV ;=================================== BCF FA1 NOP NOP VV ;????????????????????????? ;BTFSS LAG_KAIGUAN,2 ;GOTO SSS ;BCF FA1 ;NOP ;NOP ;????????????????????????? SSS BCF FLAG_PENWU,0 ; 湿度1比较检测!!!! GOTO BACKSHI1 SMALL ;===================================== ;一区开的情况下 BCF LAG_FA,1 ;===================================== BSF FLAG_PENWU,0 NOP NOP BSF FA1 NOP NOP ;BSF T1LED ;change NOP ; 湿度1比较检测!!!! NOP BSF PENWU NOP NOP BSF FANGYA,0 GOTO BACKSHI1 BACKSHI1_BUDING BACKSHI1 RETURN ;______________________________________ ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;湿度2比较检测!!!! ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& QU2PAN BTFSC FBIAO,0 GOTO BACKSHI2 MOVF SHIBUF2,W MOVWF BIJIAO MOVF BMAX,W ;BMAX与BMIN进行比较, SUBWF BMIN,W BTFSC STATUS,2 GOTO ZUFEQUAL1 BTFSC STATUS,0 GOTO ZUFLARG1 GOTO BUFLARG1 ZUFEQUAL1 MOVF SHIBUF2,0 MOVWF BIJIAO MOVF BMIN,W SUBWF BIJIAO,W BTFSC STATUS,2 GOTO EQUAL1 BTFSC STATUS,0 GOTO LARG1 GOTO SMALL1 ZUFLARG1 MOVF SHIBUF2,0 MOVWF BIJIAO MOVF BMIN,W SUBWF BIJIAO,W BTFSC STATUS,2 GOTO EQUAL1 BTFSC STATUS,0 GOTO LARG1 MOVF BIJIAO,W SUBWF BMAX,W BTFSC STATUS,2 GOTO SMALL1 BTFSC STATUS,0 GOTO SMALL1 GOTO BACKSHI2_BUDING BUFLARG1 MOVF SHIBUF2,0 MOVWF BIJIAO MOVF BMAX,W SUBWF BIJIAO,W BTFSC STATUS,2 GOTO EQUAL1 BTFSC STATUS,0 GOTO LARG1 MOVF BIJIAO,W SUBWF BMIN,W BTFSC STATUS,2 GOTO SMALL1 BTFSC STATUS,0 GOTO SMALL1 GOTO BACKSHI2_BUDING EQUAL1 LARG1 ;CALL SHUNXU_CLOSE2 ;=================================== BSF LAG_FA,2 ;____________________________ BTFSC LAG_FA,1 GOTO VVVV ;=================================== BCF FA2 NOP NOP VVVV ;????????????????????????? ;BTFSS LAG_KAIGUAN,1 ;GOTO UUU ;BCF FA1 ;NOP ;NOP ;????????????????????????? UUU BCF FLAG_PENWU,1 NOP NOP GOTO BACKSHI2 SMALL1 ;=================================== BCF LAG_FA,2 ;=================================== BSF FLAG_PENWU,1 NOP NOP BSF FA2 NOP NOP ;BSF T2LED NOP NOP BSF PENWU NOP NOP BSF FANGYA,0 GOTO BACKSHI2 BACKSHI2_BUDING BACKSHI2 RETURN ;===================================== ;一区关的情况下检测2区有无关闭,然后做出判断 ;===================================== ;SHUNXU_CLOSE1 ;=============================== ;BTFSS LAG_FA,2 ;GOTO OPEN_2 ;BCF LAG_FA,7 ;2 XIAN CLOSE ;RETURN ;OPEN_2 ; BSF LAG_FA,7 ;2 HOU CLOSE ;RETURN ;====================================================== ;===================================== ;2区关的情况下检测1区有无关闭,然后做出判断 ;===================================== ;SHUNXU_CLOSE2 ;=============================== ;BTFSS LAG_FA,1 ;GOTO OPEN_1 ;BSF LAG_FA,7 ;2 HOU CLOSE ;RETURN ;OPEN_1 ;BCF LAG_FA,7 ;2 XIAN CLOSE ;RETURN ;##################################&&&&&&&&&&&$$$$$$$$$@@@@@@@@@@@@@@@!!!!!!!!!!!!! CHENGJI MOVLW .51 SUBWF ADRES,1 BTFSS STATUS,0 CLRF ADRES CLRF H_B CLRF L_B MOVLW 8 MOVWF BIT MOVF CHUNG,W ;MOVLW .99 BCF STATUS,0 CLOOP RRF ADRES BTFSC STATUS,0 ADDWF H_B RRF H_B RRF L_B DECFSZ BIT GOTO CLOOP CHU MOVLW 00H MOVWF CHUH MOVLW .204 MOVWF CHUL CHUZI CLRF SHANGH CLRF SHANGL CALL DIVYIWEI CLRF YUH CLRF YUL DIVLOOP BCF STATUS,0 RLF P1L RLF P1H RLF YUL RLF YUH MOVF CHUH,W SUBWF YUH ,W BTFSS STATUS,2 GOTO ASP MOVF CHUL,W SUBWF YUL,W ASP BTFSS STATUS,0 GOTO PUP MOVF CHUL,W SUBWF YUL BTFSS STATUS,0 DECF YUH MOVF CHUH,W SUBWF YUH BSF STATUS,0 PUP RLF L_B RLF H_B DECFSZ BIT GOTO DIVLOOP MOVF H_B,W MOVWF SHANGH MOVF L_B,W MOVWF SHANGL RETLW 0 DIVYIWEI MOVLW .16 MOVWF BIT MOVF H_B,W MOVWF P1H MOVF L_B,W MOVWF P1L CLRF H_B CLRF L_B RETLW 0 CHU5 MOVLW 00H MOVWF CHUH MOVLW .11 MOVWF CHUL MOVF 2FH,W MOVWF H_B MOVF 2EH,W MOVWF L_B CALL CHUZI RETURN ;##########$$$$$$$$$$$$$@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%% WRBYTES CLRF FLAG MOVWF FSR ;源数据地址送F4 MOVLW 0A0H MOVWF TXBUF ;从机器地址送TXBUF CALL BSTART ;发送开始条件 CALL TX ;发送从机器地址 MOVF ADDR,W ;发送要写入的24L01的起始地址 MOVWF TXBUF CALL TX WRLOOP MOVF 0,W MOVWF TXBUF ;把主机的数据先放到TXBUF中去 CALL TX ;把一个字节数据写到24L01 INCF FSR,1 DECFSZ NUMBER, 1 ;已写入N个字节 GOTO WRLOOP CALL BSTOP RETLW 0 ;********************************** RDBYTES MOVWF FSR ;目标数据地址送FSR MOVLW 0A0H MOVWF TXBUF ;从设备地址送TXBUF CALL BSTART ;发送开始条件 CALL TX ;发送从机器地址 MOVF ADDR,W ;发送要读入数据的起始地址 MOVWF TXBUF CALL TX CALL BSTART ;发送开始命令 MOVLW 0A1H MOVWF TXBUF CALL TX ;发送读控制信号 RDLOOP CALL RX MOVF RXBUF,W ;从2401中读出一字节给RXBUF MOVWF 0 ;再送给主机的寄存器 INCF FSR,1 DECFSZ NUMBER ,1 ;已读完N个字节 GOTO LOWACK ;否,发出应答信号 BSF STATUS,RP0 MOVLW B'00000000' MOVWF TRISD BCF STATUS,RP0 NOP BSF RD,SDA BCF RD,SCL NOP BSF RD,SCL CALL BSTOP RETLW 0 LOWACK BSF STATUS,RP0 MOVLW B'00000000' MOVWF TRISD BCF STATUS,RP0 NOP BCF RD,SDA ;SDA输出低电瓶,发出应答信号 NOP BSF RD,SCL NOP BCF RD,SCL GOTO RDLOOP ;读下一个字节 ;*************开始********************* BSTART BSF STATUS,RP0 MOVLW B'00000000' MOVWF TRISD BCF STATUS,RP0 NOP NOP NOP NOP NOP BSF RD,SDA ; BSF RD,SCL ;同为高电平 NOP NOP NOP NOP BCF RD,SDA ;在SCL=1时产生下降沿 NOP NOP NOP NOP BCF RD,SCL RETLW 0 ;************* 写一个字节数据 ********************* TX MOVLW 08H MOVWF CNT ;一字节8 TXLP BCF FLAG,0 BTFSC TXBUF,7 BSF FLAG,0 BSF STATUS,RP0 MOVLW B'00000000' MOVWF TRISD BCF STATUS,RP0 NOP BTFSS TXBUF,7 ;从第七位开始送数据,从高到低. GOTO TX0 BSF RD,SDA GOTO TX1 TX0 BCF RD,SDA ;根据缓冲器的第7位去写RB,SDA TX1 NOP BCF RD,SCL NOP NOP NOP NOP NOP BSF RD,SCL ;SCL产生一上升沿,发送一位数据 NOP NOP BCF RD,SCL RLF TXBUF,1 DECFSZ CNT ,1 ;发送8次???一个字节是否发送完?? GOTO TXLP ;否,发送下一位. BSF STATUS,RP0 MOVLW B'00001000' ;RB7变输入态. MOVWF TRISD BCF STATUS,RP0 NOP ACK NOP BCF RD,SCL NOP NOP NOP BSF RD,SCL NOP NOP BTFSC RD,SDA ;检测是否受到从机发来响应信号. GOTO ACK BCF RD,SCL RETLW 0 ;**************结束******************** BSTOP BSF STATUS,RP0 MOVLW B'00000000'; MOVWF TRISD BCF STATUS,RP0 NOP BCF RD,SDA BSF RD,SCL NOP NOP NOP BSF RD,SDA ;SDA产生上升沿,操作结束. NOP NOP NOP NOP NOP BCF RD,SCL NOP RETLW 0 ;**************读一个字节数据******************** RX MOVLW 08H MOVWF CNT ;共8位. CLRF RXBUF BSF STATUS,RP0 MOVLW B'00001000' MOVWF TRISD BCF STATUS,RP0 NOP RXLP BSF RD,SCL ;**&&&&&&&&& BCF STATUS,0 NOP NOP NOP NOP NOP BTFSC RD,SDA BSF STATUS,0 ;否,1 to C ,是,C中仍为0 RLF RXBUF,1 ;C移入RXBUF. BCF RD,SCL DECFSZ CNT,1 GOTO RXLP ;一个字节未完,继续. RETLW 0 ;********************************** ROMW MOVF BUF,W MOVWF BUFFER1 MOVF ZUF,W MOVWF BUFFER1+1 MOVF BMAX,W MOVWF BUFFER1+2 MOVF BMIN,W MOVWF BUFFER1+3 MOVLW 4 ;将BUFFER1开始的四字节数据写入24C01的10H-13H MOVWF NUMBER ;buffer1为40H,BUFFER+3为43H MOVLW 10H ;ROM中的地址 ;MOVLW 22H MOVWF ADDR MOVLW BUFFER1 CALL WRBYTES RETLW 0 ;************************************* ROMR MOVLW 4 ;将24C01的10H-13H存放的数据读入BUFFER1开始四字节中 MOVWF NUMBER MOVLW 10H ;MOVLW 22H MOVWF ADDR MOVLW BUFFER1 CALL RDBYTES MOVF BUFFER1,W MOVWF BUF MOVF BUFFER1+1,W MOVWF ZUF MOVF BUFFER1+2,W MOVWF BMAX MOVF BUFFER1+3,W MOVWF BMIN RETLW 0 ;&&&&&$$$$$$$$$$$$$$$$$$$ SERVE MOVF BUF,W SUBWF BUF_B,0 BTFSS STATUS,2 GOTO FUBUF MOVF ZUF,W SUBWF ZUF_B,0 BTFSS STATUS,2 GOTO FUZUF MOVF BMAX,W SUBWF BMAX_B,0 BTFSS STATUS,2 GOTO XIE1 MOVF BMIN,W SUBWF BMIN_B,0 BTFSS STATUS,2 GOTO XIE2 MOVF HOUR,W SUBWF HOUR_BUF,0 BTFSS STATUS,2 GOTO XIE_HOUR MOVF TIAN,W SUBWF TIAN_BUF,0 BTFSS STATUS,2 GOTO XIE_TIAN ;MOVF MINUTE,W ;分钟不保存 ;SUBWF MINUTE_BUF,0 ;BTFSS STATUS,2 ;GOTO XIE_MINUTE RETLW 0 FUBUF MOVF BUF,W MOVWF BUF_B CALL ROMW RETLW 0 FUZUF MOVF ZUF,W MOVWF ZUF_B CALL ROMW RETLW 0 XIE1 MOVF BMAX,W MOVWF BMAX_B CALL ROMW RETLW 0 XIE2 MOVF BMIN,W MOVWF BMIN_B CALL ROMW RETLW 0 XIE_HOUR MOVF HOUR,W MOVWF HOUR_BUF CALL ROMW_TIME RETLW 0 XIE_TIAN MOVF TIAN,W MOVWF TIAN_BUF CALL ROMW_TIME RETLW 0 ;XIE_MINUTE ;MOVF MINUTE,W ;MOVWF MINUTE_BUF ;CALL ROMW_TIME ;RETLW 0 ;_________________________________ ROMW_TIME MOVLW 2 ;分钟不保存;将TIAN开始的2字节数据写入24C01的20H-21H MOVWF NUMBER ; MOVLW 25H ;ROM中的地址 MOVWF ADDR MOVLW TIAN CALL WRBYTES RETLW 0 ;_________________________________ ROMR_TIME MOVLW 2 ;将24C01的20H-21H存放的数据读入TIAN开始2字节中 MOVWF NUMBER MOVLW 25H MOVWF ADDR MOVLW TIAN CALL RDBYTES MOVF TIAN,W MOVWF TIAN_BUF MOVF HOUR,W MOVWF HOUR_BUF ;MOVF MINUTE,W ;MOVWF MINUTE_BUF RETLW 0 ;================================== SHIBIEMA_R MOVLW 1 ;将24C01的50H存放的数据读入BUFFER1开始1字节中 MOVWF NUMBER MOVLW 50H MOVWF ADDR MOVLW BUFFER1 CALL RDBYTES MOVF BUFFER1,W BANKSEL SHIBIEMA MOVWF SHIBIEMA RETLW 0 ;_________________________________ FILL (NOP),YUAN-$ ORG 0FFEH YUAN PAGESEL ZIDONG GOTO ZIDONG ;********************************** END