; ;;;;; Pour le 12F629, utilisez le préférence le fichier ;;;;; ____ ____ _ _ ;;;;; | _ \ __ _ _ __ __ _ _ __ ___ / ___| | |_ __| | ;;;;; | |_) |/ _` || '__|/ _` || '_ ` _ \ \___ \ | __|/ _` | ;;;;; | __/| (_| || | | (_| || | | | | | ___) || |_| (_| | ;;;;; |_| \__,_||_| \__,_||_| |_| |_|_____|____/ \__|\__,_| ;;;;; |_____| ;;;;; ____ ___ _ ;;;;; __ __|___ \ / _ \ (_) _ __ ___ ;;;;; \ \ / / __) | | | | | | || '_ \ / __| ;;;;; \ V / / __/ | |_| |_ | || | | || (__ ;;;;; _____\_/ |_____| _____\___/(_)|_||_| |_| \___| ;;;;; |_____| |_____| ;;;;; 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 0x04 ; 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 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 ;_________________________________________________ ;********************************************************************** ; 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 du 675 absent sur 629) ; clrf ANSEL 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