⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 aqua.asm

📁 DS1302应用,PDF
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	movlw   58h
	call    LCDSTR
	movlw   40h
	call    LCDSETADR
	movlw   81h                             ;debut
	call    LCDSTR2
	movlw   L_BLEUE
	call    REGLE
	movlw   01h                             ;clear display
	call    LCDCMD                          ;
	movlw   58h
	call    LCDSTR
	movlw   40h
	call    LCDSETADR
	movlw   87h                             ;fin
	call    LCDSTR2
	movlw   L_BLEUE + 2
	call    REGLE
	return
reacteur
	movlw   REACTEUR
	call    REGLE2
	return
reacteur2
	movlw   REACTEUR2
	call    REGLE2
	return
remplissage
	movlw   REMPLISSAGE
	call    REGLE2
	return
brassage
	movlw   12h
	call    MENU
	movlw   12h                             ;Pompe1
	subwf   DONNEE,W
	btfss   STATUS,Z
	goto    t_pompe2
	movlw   POMPE1
	goto    reglage_pompe
t_pompe2
	movlw   13h                             ;Pompe2
	subwf   DONNEE,W
	btfss   STATUS,Z
	goto    t_pompe3
	movlw   POMPE2
	goto    reglage_pompe
t_pompe3
	movlw   14h                             ;Pompe3
	subwf   DONNEE,W
	btfss   STATUS,Z
	goto    t_pompe4
	movlw   POMPE3
	goto    reglage_pompe
t_pompe4
	movlw   15h                             ;Pompe4
	subwf   DONNEE,W
	btfss   STATUS,Z
	return
	movlw   POMPE4
reglage_pompe
	call    REGLE_POMPE
	goto    brassage
heure_rempliss
	movlw   01h                             ;clear display
	call    LCDCMD                          ;
	movlw   0E6h
	call    LCDSTR
	movlw   40h
	call    LCDSETADR
	movlw   81h                             ;debut
	call    LCDSTR2
	movlw   H_REMPLISS
	call    REGLE
	movlw   01h                             ;clear display
	call    LCDCMD                          ;
	movlw   48h
	call    LCDSTR
	movlw   40h
	call    LCDSETADR
	movlw   87h                             ;fin
	call    LCDSTR2
	movlw   H_REMPLISS + 2
	call    REGLE
	return
regle_temperature
	movlw   01h                             ;clear display
	call    LCDCMD                          ;
	movlw   0B1h
	call    LCDSTR
	movlw   " "
	call    LCDCHAR
	movlw   ":"
	call    LCDCHAR
	movlw   TEMP_VISEE + 2
	call    LIS_EEPROM2
	movlw   4Ch
	call    LCDSETADR
	movlw   0DFh                            ;"?
	call    LCDCHAR
	movlw   "C"
	call    LCDCHAR
att_regle_temp
	clrwdt
	movlw   4Ah
	call    LCDSETADR
	movf    DONNEE,W
	call    LCDDEC
	btfsc   PB,2
	goto    fin_regle_temp
	btfss   PB,1
	goto    att_regle_temp
	call    RELACHE
	incf    DONNEE
	movlw   d'30'
	subwf   DONNEE,W
	btfss   STATUS,Z
	goto    att_regle_temp
	movlw   d'15'
	movwf   DONNEE
	goto    att_regle_temp
fin_regle_temp
	movlw   TEMP_VISEE + 2
	call    ECRISEEPROM
	decf    DONNEE
	movlw   TEMP_VISEE
	call    ECRISEEPROM
	movlw   HYSTERESIS
	movwf   DONNEE
	movlw   TEMP_VISEE + 3
	call    ECRISEEPROM
	movlw   HYSTERESIS
	sublw   d'10'
	movwf   DONNEE
	movlw   TEMP_VISEE + 1
	call    ECRISEEPROM
	return
reset
	movlw   01h                             ;clear display
	call    LCDCMD                          ;
	movlw   69h
	call    LCDSTR2
	movlw   4Dh
	call    OUINON
	btfss   DONNEE,0
	return
	movlw   01h                             ;clear display
	call    LCDCMD                          ;
reset_fin
	goto    reset_fin

;============== 调整EEPROM地址 ==============
REGLE
	movwf   TEMP4
	movlw   4Bh
	call    LCDSETADR
	movf    TEMP4,W
	call    LISEEPROM
	movf    DONNEE,W
	call    LCDHEX
	movlw   ":"
	call    LCDCHAR
	incf    TEMP4,W
	call    LISEEPROM
	movf    DONNEE,W
	call    LCDHEX
	movf    TEMP4,W
	call    LISEEPROM
attente_regle
	clrwdt
	btfsc   PB,1
	goto    incremente_heure
	btfsc   PB,2
	goto    fin_heure
	goto    attente_regle
incremente_heure
	call    RELACHE
	movlw   24h
	call    INCREMENTE
	movlw   4Bh
	call    LCDSETADR
	movf    DONNEE,W
	call    LCDHEX
	goto    attente_regle
fin_heure
	call    RELACHE
	movf    TEMP4,W
	call    ECRISEEPROM
	incf    TEMP4,W
	call    LISEEPROM
attente_regle2
	clrwdt
	btfsc   PB,1
	goto    incremente_min
	btfsc   PB,2
	goto    fin_regle
	goto    attente_regle2
incremente_min
	call    RELACHE
	movlw   60h
	call    INCREMENTE
	movlw   4Eh
	call    LCDSETADR
	movf    DONNEE,W
	call    LCDHEX
	goto    attente_regle2
fin_regle
	call    RELACHE
	incf    TEMP4,W
	call    ECRISEEPROM
	return

;============== 中断 ==============
INT
	movwf   W_TEMP
	swapf   STATUS,W
	clrf    STATUS
	movwf   STATUS_TEMP

	btfsc   INTCON,T0IF
	goto    Timer0
	goto    fin_int
Timer0
	bcf     STATUS,RP0
	bcf     STATUS,RP1
	movf    PB,F
	btfsc   STATUS,Z                        ;Aucun bouton appuy?
	goto    test_boutons
	decfsz  CPT_TIMER
	goto    fin_timer0
test_boutons                                    ;non : on teste
	swapf   PORTB,W
	andlw   07h
	xorlw   07h
	movwf   PB
	btfsc   STATUS,Z                        ;un changement ?
	goto    fin_timer0
	movlw   TEMPS_REBOND
	movwf   CPT_TIMER
fin_timer0
	bcf     INTCON,T0IF
fin_int
	swapf   STATUS_TEMP,W
	movwf   STATUS
	swapf   W_TEMP
	swapf   W_TEMP,W
;****************** restauration de W, STATUS *******************************
	bsf     INTCON,GIE
	retfie

;===================== LIS_I2C =====================
LIS_I2C
	movlw   H_REMPLISS
	call    TEST_HEURE
	movwf   TEMP4
	movlw   b'01000011'
	call    PCF8574
	movf    TEMP4,F
	btfsc   STATUS,Z
	goto    pas_remplissage          
	btfss   DONNEE,BAC_HAUT
	goto    arret_remplissage
	btfsc   FLAGS,2                  
	goto    test_osmo                
	clrf    M_REAC
	clrf    H_REAC
	clrf    M_REMP                   
	bsf     REMPREAC,0               
	bcf     REMPREAC,2
	bsf     FLAGS,2                  
	bsf     SORTIES1,1
	call    ECRIS_I2C1
	goto    test_osmo
arret_remplissage
	bcf     FLAGS,2                  
	bcf     SORTIES1,1
test_osmo
	btfsc   DONNEE,RES_BAS
	bsf     SORTIES1,2               
	btfss   DONNEE,RES_HAUT
	bcf     SORTIES1,2               
	call    ECRIS_I2C1
	return
pas_remplissage
	bcf     FLAGS,2
	goto    test_osmo

;=====================================
LIS_HEURE
	movlw   b'10000101'              
	call    DS1302
	movf    DONNEE,W
	movwf   HEURES
	movlw   b'10000011'             ;minutes
	call    DS1302
	movf    DONNEE,W
	movwf   MINUTES
	return

;=====================================
AFF_HEURE
	movlw   06h                     
	movwf   TEMP5
	movlw   0Bh
	call    LCDSETADR
essai_heure
	decf    TEMP5
	btfsc   STATUS,Z
	return                           
	movlw   b'10000101'             
	call    DS1302
	movf    HEURES,W
	subwf   DONNEE,W
	btfss   STATUS,C
	goto    heure_erreur             
affichage_heure
	movf    DONNEE,W
	movwf   HEURES
	call    LCDHEX
	movlw   ":"
	call    LCDCHAR
essai_minute
	decf    TEMP5
	btfsc   STATUS,Z
	return                         
	movlw   b'10000011'             ;minutes
	call    DS1302
	movf    MINUTES,W
	subwf   DONNEE,W
	btfss   STATUS,C
	goto    minute_erreur            
affichage_minute
	movf    DONNEE,W
	movwf   MINUTES
	call    LCDHEX
	return
heure_erreur
	movf    HEURES,W
	btfsc   STATUS,Z                 
	goto    affichage_heure        
	goto    essai_heure              
minute_erreur
	movf    MINUTES,W
	btfsc   STATUS,Z               
	goto    affichage_minute          
	goto    essai_minute            

;=====================================
ECRIS_I2C0
	movlw   d'05'                    
	movwf   CPT
ecris_I2C0
	comf    SORTIES, W
	movwf   DONNEE
	movlw   b'01000000'              
	call    PCF8574
	movlw   b'01000001'              
	call    PCF8574
	comf    SORTIES, W
	subwf   DONNEE, W
	btfsc   STATUS, Z                
	goto    ecriture_OK             
	decfsz  CPT
	goto    ecris_I2C0
	bcf     FLAGS,7
	retlw   0FFh                     
ecriture_OK
	bcf     FLAGS,7
	retlw   0

;=====================================
TEST_HEURE
	movwf   TEMP1
	call    LIS_EEPROM2
	movf    HEURES,W
	bcf     STATUS,Z
	bcf     STATUS,C
	subwf   DONNEE,W
	btfsc   STATUS,Z
	goto    test_minutes
	btfsc   STATUS,C
	retlw   0
test_heures
	incf    TEMP1
	incf    TEMP1
	movf    TEMP1,W
	call    LIS_EEPROM2
	movf    HEURES,W
	bcf     STATUS,Z
	bcf     STATUS,C
	subwf   DONNEE,W
	btfsc   STATUS,Z
	goto    test_minutes2
	btfss   STATUS,C
	retlw   0
	retlw   0FFh
test_minutes
	incf    TEMP1,W
	call    LIS_EEPROM2
	movf    MINUTES,W
	bcf     STATUS,Z
	bcf     STATUS,C
	subwf   DONNEE,W
	btfsc   STATUS,Z
	goto    test_heures
	btfsc   STATUS,C
	retlw   0
	goto    test_heures
test_minutes2
	incf    TEMP1,W
	call    LIS_EEPROM2
	movf    MINUTES,W
	bcf     STATUS,C
	subwf   DONNEE,W
	btfsc   STATUS,Z
	retlw   0
	btfss   STATUS,C
	retlw   0
	retlw   0FFh

;=====================================
REGLE2
	movwf   TEMP4
	movlw   01h                     ;clear display
	call    LCDCMD                  ;
	movlw   8Bh                      
	call    LCDSTR2
	movlw   0Ah
	call    LCDSETADR
	movf    TEMP4,W
	sublw   REACTEUR
	movlw   9Ah                     ;min.
	btfsc   STATUS,Z
	movlw   52h                      
	call    LCDSTR2
	movf    TEMP4,W
	call    LISEEPROM
att_regle
	clrwdt
	movlw   07h
	call    LCDSETADR
	movf    DONNEE,W
	call    LCDHEX
	movlw   0A0h
	btfsc   PB,2
	goto    fin_regle1
	btfss   PB,1
	goto    att_regle
	call    RELACHE
	movlw   0A0h
	call    INCREMENTE
	goto    att_regle
fin_regle1
	call    RELACHE
	movf    TEMP4,W
	call    ECRISEEPROM
	movlw   40h
	call    LCDSETADR
	movlw   92h                      
	call    LCDSTR2
	movlw   4Bh
	call    LCDSETADR
	movf    TEMP4,W
	sublw   REMPLISSAGE
	movlw   9Fh                     ;sec.
	btfss   STATUS,Z
	movlw   9Ah                     ;min.
	call    LCDSTR2
	incf    TEMP4,W
	call    LISEEPROM
att_regle2
	clrwdt
	movlw   48h
	call    LCDSETADR
	movf    DONNEE,W
	call    LCDHEX
	movlw   0A0h
	btfsc   PB,2
	goto    fin_regle2
	btfss   PB,1
	goto    att_regle2
	call    RELACHE
	movlw   0A0h
	call    INCREMENTE
	goto    att_regle2
fin_regle2
	call    RELACHE
	incf    TEMP4,W
	call    ECRISEEPROM
	return

;=====================================
LIS_EEPROM
	movlw   20h
	movwf   FSR
	bsf     STATUS,IRP               
	movlw   40h
	movwf   TEMP4
	clrf    ADRESSE
boucle_lecture
	movf    ADRESSE,W
	call    LISEEPROM
	movf    DONNEE,W
	movwf   INDF
	incf    ADRESSE
	incf    FSR
	decfsz  TEMP4
	goto    boucle_lecture
	return

;=====================================
LIS_EEPROM2
	addlw   20h
	movwf   FSR
	bsf     STATUS,IRP
	movf    INDF,W
	movwf   DONNEE
	return

;=====================================
REGLE_POMPE
	movwf   ADRESSE
	call    LISEEPROM
	movlw   01h                     ;clear display
	call    LCDCMD                  ;
	movlw   04h
	call    LCDSETADR
	movlw   08h
	call    BOUCLE_POMPE
	incf    ADRESSE,W
	call    LISEEPROM
	movlw   04h
	call    BOUCLE_POMPE
	movlw   44h
	call    LCDSETADR
	movlw   04h
	call    BOUCLE_POMPE
	incf    ADRESSE
	incf    ADRESSE,W
	decf    ADRESSE
	call    LISEEPROM
	movlw   08h
	call    BOUCLE_POMPE
	movf    ADRESSE,W
	call    LISEEPROM
	clrf    TEMP4
	movlw   04h
	movwf   TEMP5
	clrf    MENUPOS
	clrf    FINRETRO
attente_pompe
	clrwdt
	clrw
	call    LCDSETADR
	movf    FINRETRO,W
	call    LCDDEC
	btfsc   PB,0
	return
	btfsc   PB,2
	goto    suivant
	btfss   PB,1
	goto    attente_pompe
	call    RELACHE
	movlw   01h
	xorwf   DONNEE
	movf    TEMP5,W
	call    LCDSETADR
	movlw   "1"
	btfss   DONNEE,0
	movlw   "0"
	call    LCDCHAR
	goto    attente_pompe
suivant
	call    RELACHE
	incf    FINRETRO
	incf    TEMP5                    
	movlw   10h                     
	subwf   TEMP5,W
	btfss   STATUS,Z
	goto    pompe_suivant
	movlw   44h
	movwf   TEMP5
pompe_suivant
	bcf     STATUS,C
	rrf     DONNEE
	btfsc   STATUS,C
	bsf     DONNEE,7
	incf    TEMP4
	movlw   08h
	subwf   TEMP4,W
	btfss   STATUS,Z
	goto    attente_pompe
	movf    ADRESSE,W
	call    ECRISEEPROM
	incf    MENUPOS
	movlw   03h
	subwf   MENUPOS,W
	btfsc   STATUS,Z
	return
	clrf    TEMP4
	incf    ADRESSE
	movf    ADRESSE,W
	call    LISEEPROM
	goto    attente_pompe

;=====================================
BOUCLE_POMPE
	movwf   TEMP4
boucle_pompe
	movlw   "1"
	btfss   DONNEE,0
	movlw   "0"
	call    LCDCHAR
	rrf     DONNEE
	decfsz  TEMP4
	goto    boucle_pompe
	return

;=====================================
ECRIS_I2C1
	movlw   d'05'                    
	movwf   CPT
ecris_I2C1
	comf    SORTIES1, W
	iorlw   0F8h                     
	movwf   DONNEE
	movlw   b'01000010'              
	call    PCF8574
	movlw   b'01000011'             
	call    PCF8574
	movlw   07h                      
	andwf   DONNEE
	comf    SORTIES1, W
	andlw   07h
	subwf   DONNEE, W
	btfsc   STATUS, Z                
	retlw   0                     
	decfsz  CPT
	goto    ecris_I2C1
	retlw   0FFh                     

;===============================
REMPLISS_S
	btfss   REMPREAC,0                       
	return                                   
	movlw   REMPLISSAGE + 1
	call    LIS_EEPROM2
	movf    DONNEE,W
	subwf   SECONDES,W
	btfss   STATUS,Z                         
	return                                   
	bcf     REMPREAC,0
	bcf     SORTIES1,1
	call    ECRIS_I2C1
	return

;==================================
REMPLISS_M
	movlw   0A0h
	movwf   MAX
	movf    M_REMP,W
	movwf   DONNEE
	call    INCREMENTE
	movf    DONNEE,W
	movwf   M_REMP
	movlw   REMPLISSAGE
	call    LIS_EEPROM2
	movf    DONNEE,W
	subwf   M_REMP,W
	btfss   STATUS,Z                         
	return                                   
	clrf    M_REMP
	bsf     REMPREAC,0
	bsf     SORTIES1,1
	call    ECRIS_I2C1
	return

;=========================================
REACT_REMP
	movlw   0A0h                             
	movwf   MAX
	movf    M_REAC,W
	movwf   DONNEE
	call    INCREMENTE
	movf    DONNEE,W
	movwf   M_REAC                           
	btfsc   REMPREAC,2                       
	goto    reac_arret_remp                 
	movlw   REACTEUR2 + 1
	call    LIS_EEPROM2
	call    INCREMENTE
	movf    M_REAC,W
	subwf   DONNEE,W
	btfss   STATUS,Z                         
	goto    marche_reac_remp                 
	bcf     SORTIES1,0
	call    ECRIS_I2C1
	bsf     REMPREAC,2
	return
marche_reac_remp
	bsf     SORTIES1,0
	call    ECRIS_I2C1
	return
reac_arret_remp
	movlw   REACTEUR2
	call    LIS_EEPROM2
	call    INCREMENTE
	movf    DONNEE,W
	subwf   M_REAC,W
	btfss   STATUS,Z                         
	return                                 
	bcf     REMPREAC,2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -