;÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ ; NOM: Param_Std_12F ; Date: 8/11/2007 ; Auteur: PSi ; paramétrage standard, ; peut être utilisé pour les PIC 12F629 et 12F675 ; ;÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ CBLOCK 0x040 ; début de la zone variables w_temp : 1 ; Sauvegarde du registre W status_temp : 1 ; Sauvegarde du registre STATUS ENDC ;********************************************************************* ; MACRO * ;********************************************************************* BANK0 macro bcf STATUS , RP0 ; passer banque0 endm BANK1 macro bsf STATUS , RP0 ; passer banque1 endm ;********************************************************************* ; INITIALISATION EEPROM * ;********************************************************************* org 0x2100 DE 0x03 ; type de programme DE 0x05 ; version spécifique standard Ptitrain ;********************************************************************** ; DEMARRAGE SUR RESET * ;********************************************************************** org 0x000 ; Adresse de départ après reset goto init ; Adresse 0: initialiser ;********************************************************************** ; ROUTINE 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 SP_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 SP_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 ;_________________________________________________ ;********************************************************************** ; PROGRAMME PRINCIPAL * ; initialisation registres * ;********************************************************************** ; registre option OPTION_REG dans BANK1 BANK1 clrf OPTION_REG ; REGISTRE IOC (contrôle interruptions des I/O individuelles) clrf IOC ; REGISTRE PIE1 (contrôle interruptions périphériques) clrf PIE1 ; REGISTRE ANSEL (SELECTION ANALOGIQUE) ifdef __12F675 ; si votre processeur est un 16F84... clrf ANSEL ; <<<<<-------------uniquement pour 675 endif clrf VRCON BANK0 ; REGISTRE CMCON (COMPARATEURS) movlw b'00000111' ; comparateur OFF (GIO libre) movwf CMCON ; REGISTRE T1COM timer 1 clrf T1CON ;____________________ fin des inirialisations, suite dans le programme principal