salut j'ai un problème de programmation du PIC 16f876 pour contrôle la charge et la décharge du batteri pour un système photovoltaïque pour ne pas endommage un cas de sure charge et décharge profonde
c'est pour ce la j'ai fais un programme qui a une entre analogique (RA0)
est (PORTB) pour affiche le nivaux du batteri et les PORTC (0,1) pour commende deux opticopleur or (des reli thermique )
le programme avec le qu'elle j'est le problème c'est
pour les seuil son 10v pour la décharge et 13v pour la cahrge
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
list p=16F876
#include <p16F876.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_ENABLE_ON & _DEBUG_OFF
; Pas de code protege, pas de watch hdog timer, delai de demarrage, horloge XT.
ORG 0x000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
main
CLRF PORTA ;mise à 0 le porta
CLRF PORTB ;mise à 0 le portb
CLRF PORTC ;mise à 0 le portc
BSF STATUS ,RP0 ; accé ou bank 1
BCF STATUS,RP1
BSF TRISA,0 ;les ports Ra0 sant des entré
MOVLW B'11111000' ;les 3ports B sant des sortie
MOVWF TRISB
MOVLW B'00111111' ;les ports7 et 6de C sant des sortie
MOVWF TRISC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW B'10001110'
MOVWF ADCON1 ;rao comme entré analogique
BCF STATUS,RP0
BCF STATUS,RP1 ; accé ou bank0 ;
MOVLW B'01000001'
MOVWF ADCON0 ;utilistion de oscilateur XT externe
;;;;;;;;;;;;;;;;;;;;;START;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START
BSF ADCON0,GO_DONE ;le registre go_done=1;démarrage de la covertision
WAIT BTFSC ADCON0,GO_DONE ;test si le contenu de bit go_done si égale à 0 ve dir que c'est la fin du convertision
GOTO WAIT ;retour à wait
CALL CONV ;appel de sous programme de covertision
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;
MOVLW d'886' ;la valeur numirique équivalent de 13V
SUBWF h'70',W
BTFSC STATUS,Z ;test si z=0(déffirent)
CALL testb
BTFSS STATUS,C
CALL on
CALL CHAR
;;;;;;;;;;;;;;;;;;;;;;;;;;test b;;;;;;;;;;;;;;;;;;;;;;;;;;;
testb
SUBWF h'71',W
BTFSS STATUS,C
CALL on
call CHAR
;;;;;;;;;;;;;;; ;;;;CONV;;;;;;;;;;;;;;;;;;;;;;
CONV
MOVF ADRESH,0 ;w=adresl
MOVWF h'70' ;chargé la case mémoir 20 avec le contenu de h'70'=w
BSF STATUS,RP1 ;accé ou bank 1
MOVF ADRESL,0
BSF STATUS,RP0
MOVWF h'71'
return
;;;;;;;;;;;;;;;;;;;;;;;;;;CHAR ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHAR
MOVLW B'00000001' ;les ports b sant des sortie
MOVWF PORTB
MOVLW B'00000001' ;les ports b sant des sortie
MOVWF PORTC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;on;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;
on
MOVLW d'580' ;la valeur numirique équivalent de 10V
SUBWF h'70',W
BTFSC STATUS,Z
CALL testz
BTFSS STATUS,C
CALL DECH
CALL moy
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;testz;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;
testz
SUBWF h'71',W
BTFSS STATUS,C
CALL DECH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;DECH;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;
DECH
MOVLW B'00000100' ;les ports b sant des sortie
MOVWF PORTB
MOVLW B'00000010' ;les ports b sant des sortie
MOVWF PORTC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;
moy
MOVLW B'00000010'
MOVWF PORTB
MOVLW B'00000011'
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;fin de programme;;;;;;
-----