; PIC 16F628 ; Programme de test pour faire clignoter une LED List p=16F628 ; processeur utilisé #include __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _DATA_CP_OFF & _BODEN_OFF & _MCLRE_OFF ;bits de configuration : ;code protect OFF ;watchdog timer OFF ;power up timer ON ;oscillateur RC_CLKOUT ;low voltage program OFF ;data EE read protect OFF ;brown out detect OFF ;master clear enable OFF : Utiliser la broche comme I/O ;xxxxxx ; macro ;xxxxxx bank1 macro ; passage en banque 1 bsf STATUS,RP0 endm bank0 macro ; passage en banque 0 bcf STATUS,RP0 endm ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ; Initialisation de la mémoire EEPROM (facultatif) ; Cela met dans l'EEPROM le message : ; (C) Gilles Bernard (en code ASCII) ; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx org 0x2100 ; début de zone EEPROM du PIC 16F628 DE '(' DE 'C' DE ')' DE 'G' ,'i' ,'l','l','e','s',' ' DE 'B','e','r','n','a','r','d',' ' ;xxxxxxxxxxxxxxxxxxxxxxxxx ; déclaration de variables ;xxxxxxxxxxxxxxxxxxxxxxxxx CBLOCK 0x020 compteur_1 : 1 ; Pour la boucle de tempo compteur_2 : 1 ; Pour la boucle de tempo compteur_3 : 1 ; Pour la boucle de tempo vref : 1 etat_res:1 ENDC ;xxxxxxxxxxxxxxxxxxxx ; démarrage sur reset ;xxxxxxxxxxxxxxxxxxxx org 0x0000 goto initialisation ;xxxxxxxxxxxxxxx ; initialisation ;xxxxxxxxxxxxxxx initialisation bank1 movlw B'00000000' movwf OPTION_REG ; bit 7 = 0 : activer les resistances de pullup du port B movlw B'11110110' movwf TRISA ; PORT A en entree movlw B'11000000' movwf TRISB ; PORT B RB0,1,2,3,4 et 5en sortie movlw B'11100000' movwf VRCON ; Activation de vref bank0 movlw B'00000101' movwf CMCON ; Activation du comparateur 2 movlw B'00000000' movwf INTCON ; inactivation des interuptions clrf PORTA clrf PORTB clrf vref ; Initialisation de la valeur vref goto debut_programme ; Temporisation de W*250ms tempo movwf compteur_3 boucle3 ; Temp de 20ms movlw .250 movwf compteur_2 boucle2 ; Tempo 0.1ms movlw .250 movwf compteur_1 boucle1 ; La boucle dure 4 cycles nop decfsz compteur_1,f goto boucle1 decfsz compteur_2,f goto boucle2 decfsz compteur_3,f goto boucle3 return ;xxxxxxxxxxxxxxxxxxxxx ; programme principal ;xxxxxxxxxxxxxxxxxxxxx debut_programme incf vref,f ; Increment de vref, resultat dans vref movf vref,W ; Copie de vref dans le registre W sublw .16 ; Test si egal a 16 btfsc STATUS,Z clrf vref ; Si egal, remise a zero de la vref movf vref,W ; Relecture de vref iorwf etat_res,W movwf PORTB ; Ecriture de vref sur les LEDs du port B movf vref,W ; Relecture de vref iorlw B'11100000' ; On ajoute les bits 6 et 7 pour activer VREF et l'utiliser en sortie et 5 pour low scale bank1 movwf VRCON ; Activation de la vref bank0 movlw .2 call tempo ; Lecture du resultat du comparateur 2 btfsc CMCON,7 goto vrai goto faux vrai movlw B'00100000' movwf etat_res goto suite faux movlw B'00000000' movwf etat_res suite goto debut_programme END