;********************************************************************* ; TITRE * ;********************************************************************* ; Description * ;********************************************************************* ;Auteur : Charles Combes ;Date : ;Derniere mise a jour : * ;********************************************************************* ;Etape de realisation ;********************************************************************* include ; Pour le 18f452 ;Program Configuration Register 1H __CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H ;Program Configuration Register 2L __CONFIG _CONFIG2L, _BOR_OFF_2L & _BORV_20_2L & _PWRT_ON_2L ;Program Configuration Register 2H __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H ;Program Configuration Register 3H __CONFIG _CONFIG3H, _CCP2MX_ON_3H ;Program Configuration Register 4L __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L ;Program Configuration Register 5L __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L ;Program Configuration Register 5H __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H ;Program Configuration Register 6L __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L ;Program Configuration Register 6H __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H ;Program Configuration Register 7L __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L ERRORLEVEL -302 ;********************************************************************* ; MACRO * ;********************************************************************* ;Avec le 18f452 : pas besoin de selectionner les banks ;********************************************************************* ; DEFINES * ;********************************************************************* ;#DEFINE LEDIR PORTA, 3 ;********************************************************************* ; ASSIGNATIONS * ;********************************************************************* ESSAI_PORT EQU PORTB ;********************************************************************* ; Variables * ;********************************************************************* CBLOCK 0x0020 ;Variables générales BSR_TEMP, W_TEMP, STATUS_TEMP ; Sauvegarde des registres BSR_TEMP2, W_TEMP2, STATUS_TEMP2 ; Sauvegarde des registres cmpt1, cmpt2 ; Compteur du "tempo" ENDC ;********************************************************************* ; Demarrage * ;********************************************************************* org 0x0000 goto Init ;********************************************************************* ; Interruptions * ;********************************************************************* org 0x0008 bra Interrupt org 0x0018 bra Interrupt_Low ;********************************************************************* ; PROGRAMME PRINCIPAL * ;********************************************************************* Start: goto Start ;********************************************************************* ; Initialisation * ;********************************************************************* Init: ;Init I/O clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE clrf LATA clrf LATB clrf LATC clrf LATD clrf LATE clrf TRISA clrf TRISB clrf TRISC clrf TRISD clrf TRISE ; Interruptions clrf INTCON bsf RCON,IPEN ; Enable priority interrupts. ; Timer 0 bsf INTCON2, TMR0IP ; High priority bsf INTCON, TMR0IE bcf INTCON, TMR0IF bsf INTCON,GIEH ; Set the global interrupt enable bits bsf INTCON,GIEL ; " goto Start ;********************************************************************* ; Interruption * ;********************************************************************* Interrupt: call SAVE_REG call RAP_REG retfie Interrupt_Low: call SAVE_REG_LOW call RAP_REG_LOW retfie ;********************************************************************* ; SUB-ROUTINES * ;********************************************************************* ; SOUS-PROGRAMME DE SAUVEGARDE SAVE_REG: MOVWF W_TEMP ; W_TEMP is in virtual bank MOVFF STATUS, STATUS_TEMP ; STATUS_TEMP located anywhere MOVFF BSR, BSR_TEMP ; BSR located anywhere RETURN ;SOUS-PROGRAMME DE RESTITUTION RAP_REG: MOVFF BSR_TEMP, BSR ; Restore BSR MOVF W_TEMP, W ; Restore WREG MOVFF STATUS_TEMP,STATUS ; Restore STATUS RETURN ; SOUS-PROGRAMME DE SAUVEGARDE POUR INTERRUPTION BASSE PRIORITE SAVE_REG_LOW: MOVWF W_TEMP2 ; W_TEMP is in virtual bank MOVFF STATUS, STATUS_TEMP2 ; STATUS_TEMP located anywhere MOVFF BSR, BSR_TEMP2 ; BSR located anywhere RETURN ;SOUS-PROGRAMME DE RESTITUTION POUR INTERRUPTION BASSE PRIORITE RAP_REG_LOW: MOVFF BSR_TEMP2, BSR ; Restore BSR MOVF W_TEMP2, W ; Restore WREG MOVFF STATUS_TEMP2,STATUS ; Restore STATUS RETURN tempo: clrf cmpt2 ; effacer compteur2 boucle2 clrf cmpt1 ; effacer compteur1 boucle1 decfsz cmpt1 , f ; décrémenter compteur1 goto boucle1 ; si pas 0, boucler decfsz cmpt2 , f ; si 0, décrémenter compteur 2 goto boucle2 ; si cmpt2 pas 0, recommencer boucle1 return ; retour de la sous-routine END ;Fin du Programme