; ******************************************************************** ; TITRE : Param_Std_v1_0.inc ; VERSION : PARAM11.INC simple toilettage présentation ; ******************************************************************** CBLOCK 0x040 ; début de la zone variables w_temp : 1 ; Sauvegarde du registre W status_temp : 1 ; Sauvegarde du registre STATUS ENDC ;********************************************************************* ; MACROS BANK0 macro bcf STATUS , RP0 ; passer dans la "banque" 0 endm BANK1 macro bsf STATUS , RP0 ; passer dans la "banque" 1 endm ;********************************************************************* ; INITIALISATION EEPROM org 0x2100 DE 0x03 ; type de programme DE 0x04 ; version spécifique "standard Pictrain" ;********************************************************************** ; DEMARRAGE SUR RESET org 0x000 ; Adresse de départ après reset goto init ; Adresse 0: initialiser ;********************************************************************** ; ROUTINES INTERRUPTION ; Sauvegarder registres org 0x004 ; adresse d'interruption movwf w_temp ; sauver registre W swapf STATUS,W ; swap status avec résultat dans W movwf status_temp ; sauver status swappé ; Interruption Timer 1 btfsc INTCON,PEIE ; tester si interrupt timer autorisée btfss PIR1,TMR1IF ; oui, tester si interrupt timer en cours goto Int_1 ; non sauter au test suivant call inttimer1 ; oui, traiter interrupt timer bcf PIR1,TMR1IF ; effacer flag interrupt timer goto restorereg ; Interruption Timer 0 Int_1 btfsc INTCON,T0IE ; tester si interrupt timer autorisée btfss INTCON,T0IF ; oui, tester si interrupt timer en cours goto restorereg ; non sauter au test suivant call inttimer0 ; oui, traiter interrupt timer bcf INTCON,T0IF ; effacer flag interrupt timer ; Restaurer registres restorereg swapf status_temp,W ; swap ancien status, résultat dans W movwf STATUS ; restaurer status swapf w_temp,F ; Inversion L et H de l'ancien W sans modifier Z swapf w_temp,W ; Réinversion de L et H dans W ; W restauré sans modifier status retfie ; return from interrupt ;********************************************************************* ; PROGRAMME PRINCIPAL ; initialisation mémoire et oscillateur ;********************************************************************* init ; Initialisation OSC bsf STATUS,RP0 ; set file register bank to 1 call 3FFh ; retrieve factory calibration value movwf OSCCAL ; update register with factory cal value bcf STATUS,RP0 ; set file register bank to 0 ; Effacer RAM movlw 0x20 ; initialisation pointeur movwf FSR ; pointeur d'adressage indirect init1 clrf INDF ; effacer ram incf FSR,F ; pointer sur suivant btfss FSR,6 ; tester si fin zone atteinte (>=40) goto init1 ; non, boucler btfss FSR,5 ; tester si fin zone atteinte (>=60) goto init1 ; non, boucler ; INITIALISATION REGISTRES : ; a.REGISTRE OPTION OPTION_REG dans BANK1 BANK1 clrf OPTION_REG ; b.REGISTRE IOC (contrôle interruptions des I/O individuelles) clrf IOC ; c.REGISTRE PIE1 (contrôle interruptions périphériques) clrf PIE1 ; d.REGISTRE ANSEL (SELECTION ANALOGIQUE) clrf ANSEL clrf VRCON ; e.REGISTRE CMCON (COMPARATEURS) dans BANK 0 BANK0 movlw b'00000111' ; comparateur OFF (GIO libre) movwf CMCON ; F.REGISTRE T1COM timer 1 clrf T1CON ; fin des initialisations, suite dans le programme principal