; Gestion des LEDs de la carte programmateur de PIC
;
; MEMOIRE PROGRAMME UTILISEE 28%
; MEMOIRE RAM UTILISEE       20%
;
W		EQU	H'000'
F		EQU	H'001'
C		EQU	H'000'
Z		EQU	H'002'
TMR0		EQU	H'001'
STATUS		EQU	H'003'
OSCCAL		EQU	H'005'
GPIO		EQU	H'006'
TEMPO1		EQU	H'007'
BASETEMPS	EQU	H'008'
MEMO		EQU	H'009'
MODE		EQU	H'00A'
ENTREESORTIE	EQU	H'00B'
; Déclarations
; ------------
; 
		__CONFIG	H'0FEA'
;
; 		  pin 8 - masse
;  demandevpp	  pin 7 - GP0
;  ledmode	  pin 6 - GP1
;  ledhorloge	  pin 5 - GP2
;  switchmode	  pin 4 - GP3
;  signalhorloge  pin 3 - GP4
;  sortievpp	  pin 2 - GP5
; 		  pin 1 - +5v
; 
; 
; 
; 
; Initialisation
; --------------
; 
		ORG	H'0000'
		MOVWF	OSCCAL
		MOVLW	H'C5'
; MESSAGE : Instruction réservée à 12C..
		OPTION
		MOVLW	H'19'
; MESSAGE : Instruction réservée à 12C..
		TRIS	GPIO
		CLRF	GPIO
		CLRF	TMR0
		CLRF	BASETEMPS
		CLRF	MODE
		CLRF	MEMO
		MOVLW	H'FF'
		MOVWF	TEMPO1
		BSF	MEMO,1
; 
;
; 
; temporisations
; --------------
; toutes les 0.0078125s
; soit basetemps,0 oscille à 64Hz
; 
BOUCLE		MOVLW	H'7A'
		SUBWF	TMR0,W
		BTFSS	STATUS,C
		GOTO	$+.8
		CLRF	TMR0
		BTFSS	MEMO,1
		GOTO	$+.4
		DECFSZ	TEMPO1,F
		GOTO	$+.2
		BCF	MEMO,1
		INCF	BASETEMPS,F
; 
; lecture des E/S 
; ---------------
		MOVF	GPIO,W
		MOVWF	ENTREESORTIE
; 
; 
; changement de mode
; ------------------
; 
; mode 0 = initialisation
		MOVF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.14
		BTFSC	MEMO,1
		GOTO	$+.12
		BTFSS	ENTREESORTIE,0
		GOTO	$+.8
		BTFSC	ENTREESORTIE,4
		GOTO	$+.6
		BTFSC	ENTREESORTIE,3
		GOTO	$+.4
		MOVLW	H'01'
		MOVWF	MODE
		GOTO	$+.3
		MOVLW	H'63'
		MOVWF	MODE
; 
; mode 1 = programmateur off
		MOVLW	H'01'
		SUBWF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.12
		BTFSS	ENTREESORTIE,3
		GOTO	$+.10
		BTFSS	ENTREESORTIE,0
		GOTO	$+.6
		BTFSC	ENTREESORTIE,4
		GOTO	$+.4
		MOVLW	H'02'
		MOVWF	MODE
		GOTO	$+.3
		MOVLW	H'63'
		MOVWF	MODE
; 
; mode 2 = programmateur on
		MOVLW	H'02'
		SUBWF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.12
		BTFSC	ENTREESORTIE,3
		GOTO	$+.10
		BTFSS	ENTREESORTIE,0
		GOTO	$+.6
		BTFSC	ENTREESORTIE,4
		GOTO	$+.4
		MOVLW	H'01'
		MOVWF	MODE
		GOTO	$+.3
		MOVLW	H'63'
		MOVWF	MODE
; 
; mode 99 = erreur
		MOVLW	H'63'
		SUBWF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.9
		BTFSS	ENTREESORTIE,0
		GOTO	$+.7
		BTFSC	ENTREESORTIE,4
		GOTO	$+.5
		BTFSC	ENTREESORTIE,3
		GOTO	$+.3
		MOVLW	H'01'
		MOVWF	MODE
;
; activation des sorties
; ----------------------
; 
; mode 0 = initialisation
; 
		MOVF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.4
; 	  sortievpp à zéro
		BCF	ENTREESORTIE,5
; 	  ledhorloge allumée fixe
		BSF	ENTREESORTIE,2
; 	  ledmode allumée fixe
		BSF	ENTREESORTIE,1
; 
; mode 1 = programmateur off
; 
		MOVLW	H'01'
		SUBWF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.4
; 	  sortievpp à zéro
		BCF	ENTREESORTIE,5
; 	  ledhorloge éteinte
		BCF	ENTREESORTIE,2
; 	  ledmode allumée fixe
		BSF	ENTREESORTIE,1
; 
; mode 2 = programmateur on
; 
		MOVLW	H'02'
		SUBWF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.31
; 	  sortievpp évolue comme /demandevpp
		BTFSC	ENTREESORTIE,0
		GOTO	$+.3
		BSF	ENTREESORTIE,5
		GOTO	$+.2
		BCF	ENTREESORTIE,5
; 	  ledmode clignote à 1Hz
		BTFSS	BASETEMPS,6
		GOTO	$+.3
		BSF	ENTREESORTIE,1
		GOTO	$+.2
		BCF	ENTREESORTIE,1
; 	  ledhorloge clignote à 4Hz
; 	  pendant 1s après front de signalhorloge
		BTFSC	MEMO,2
		GOTO	$+.7
		BTFSS	ENTREESORTIE,4
		GOTO	$+.5
		MOVLW	H'80'
		MOVWF	TEMPO1
		BSF	MEMO,1
		BSF	MEMO,2
		BTFSC	ENTREESORTIE,4
		GOTO	$+.2
		BCF	MEMO,2
		BTFSS	MEMO,1
		GOTO	$+.7
		BTFSS	BASETEMPS,4
		GOTO	$+.5
		BTFSS	BASETEMPS,3
		GOTO	$+.3
		BSF	ENTREESORTIE,2
		GOTO	$+.2
		BCF	ENTREESORTIE,2
; 
; mode 99 = erreur
; 
		MOVLW	H'63'
		SUBWF	MODE,W
		BTFSS	STATUS,Z
		GOTO	$+.9
; 	  sortievpp à zéro
		BCF	ENTREESORTIE,5
; 	  ledmode et ledhorloge clignotent
; 	  en alternance à 2Hz
		BTFSS	BASETEMPS,5
		GOTO	$+.4
		BSF	ENTREESORTIE,1
		BCF	ENTREESORTIE,2
		GOTO	$+.3
		BCF	ENTREESORTIE,1
		BSF	ENTREESORTIE,2
; 
; écriture des E/S
; ----------------
		MOVF	ENTREESORTIE,W
		MOVWF	GPIO
		GOTO	BOUCLE
; 
		END
