; "Circuit de test : clignotant à LED" ; (C) Fabrice Sincère, novembre 2007 ; IUT Nancy-Brabois ; Version 1.00 ; Microcontrôleur PIC 16F876A ; Microchip MPLAB IDE ; Langage : assembleur List p=16F876A ; processeur utilisé #include __config _RC_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _WRT_OFF & _CPD_OFF & _CP_OFF ;bits de configuration : ;oscillateur RC ;watchdog timer OFF ;power up timer ON ;brown out detect ON ;low voltage program OFF ;flash program write protection off ;data EE read protect OFF ;code protect OFF ;xxxxxx ; Macro ;xxxxxx bank1 macro ; passage en banque 1 bsf STATUS,RP0 endm bank0 macro ; passage en banque 0 bcf STATUS,RP0 endm ;xxxxxxxxxxxxxxxxxxxx ; Démarrage sur reset ;xxxxxxxxxxxxxxxxxxxx org 0x0000 goto initialisation ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; Routine d'interruption ; 1 source d'interruption : TMR0 en mode timer ; Toutes les 256*1 = 256 cycles (prescaler 1:1) ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx org 0x0004 ; vecteur d'interruption comf PORTA , f ; on inverse le niveau logique de la sortie RA1 ; => inversion de l'état de la LED bcf INTCON,TMR0IF ; on efface le drapeau TMR0IF retfie ; retour d'interruption ;xxxxxxxxxxxxxxx ; Initialisation ;xxxxxxxxxxxxxxx initialisation bank1 bcf OPTION_REG , T0CS ; bit 5 (T0CS) = 0 : TMR0 en mode timer ; (OPTION_REG) = (11011111) ; prescaler 1:1 movlw B'00000110' movwf ADCON1 ; la broche RA1 est configurée commme entrée/sortie numérique bcf TRISA , 1 ; bit 1 du port A (RA1) = 0 : configuration en sortie (commande de la LED) ; (TRISA) = (11111101) bank0 movlw B'10100000' movwf INTCON ; bit 7 (GIE) = 1 : autorisation globale des interruptions ; bit 5 (TMR0IE) = 1 : autorisation de l'interruption TMR0 ; bit 2 (TMR0IF)= 0 : on efface le drapeau de l'interruption TMR0 ;xxxxxxxxxxxxxxxxxxxxx ; Programme principal ;xxxxxxxxxxxxxxxxxxxxx debut_programme ; on attend le débordement de TMR0 (0xFF -> 0x00) ; ce qui génère une interruption goto debut_programme END