; 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 bank0 macro ; Selection bank 0 bcf STATUS,RP0 bcf STATUS,RP1 endm bank1 macro ; Selection bank 1 bsf STATUS,RP0 bcf STATUS,RP1 endm bank2 macro ; Selection bank 2 bcf STATUS,RP0 bsf STATUS,RP1 endm bank3 macro ; Selection bank 3 bsf STATUS,RP1 bsf STATUS,RP0 endm dta equ .1 clk equ .2 cs equ .3 ;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 valeur : 1 compteur : 1 ENDC ;xxxxxxxxxxxxxxxxxxxx ; démarrage sur reset ;xxxxxxxxxxxxxxxxxxxx org 0x0000 goto initialisation ;xxxxxxxxxxxxxxx ; initialisation ;xxxxxxxxxxxxxxx initialisation bank1 movlw B'00000000' movwf OPTION_REG ; Activation des resistances de pullup sur B movlw B'11100000' movwf TRISA ; PORT RA<0-4> en sortie le reste en entree movlw B'11111111' movwf TRISB bcf TRISB,cs ; Ligne cs en sortie bcf TRISB,clk ; Ligne clk en sortie bsf TRISB,dta ; Ligne dta en entree bank0 movlw B'00000111' movwf CMCON ; Desactivation des comparateur clrf PORTA clrf PORTB movlw B'00000000' ; Pas d'interruptions movwf INTCON goto debut_programme ; Routine de lecture d'un octet ; La valeur est retournee dans les registres W et valeur lit_octet bsf PORTB,cs ; Mise a 1 de cs : Reinitialisation de l'ADC movlw .9 ; inclu le bit de start movwf compteur bcf PORTB,cs ; Mise a 0 de cs : Debut de conversion. nop ; Attente de la stabilisation doit etre > 250ns boucle_lecture bsf PORTB,clk ; Montee de l'horloge nop ; Tempo pour le front haut. Doit etre > 1us nop bcf PORTB,clk ; Descente de l'horloge le calcul fait office de tempo. Doit etre > 1us ; Ajout du bit dans le registre valeur bcf STATUS,C ; Mise a zero de la retenue btfsc PORTB,dta ; Si dta=1 bsf STATUS,C ; alors mise a 1 de la retenue rlf valeur,f ; Rotation vers la gauche avec la retenue decfsz compteur,f goto boucle_lecture ; Lecture du bit suivant movf valeur,W ; On charge la valeur dans le registre W. return ;xxxxxxxxxxxxxxxxxxxxx ; programme principal ;xxxxxxxxxxxxxxxxxxxxx debut_programme call lit_octet ; On ne garde que les 5 bits de poid fort pour l'affichage andlw B'11111000' movwf valeur rrf valeur,f rrf valeur,f rrf valeur,f ; Affichage de la valeur sur les leds movf valeur,W movwf PORTA goto debut_programme END