Programació en pic-as del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Exemple OR - Oscil·lador del rellotge

En aquest exemple hem configurat el rellotge a una velocitat d'1 MHz, més lenta del que és habitual. Per a aquesta velocidad es fa una rotació de LED amb pauses d'aproximadament 0,8 s. Per veure com funciona el canvi de velocitat, hem afegit que en prémer el polsador RA3 es passi a una velocitat vuit vegades més ràpida (freqüència de 8 MHz) i si es torna a prémer es repren la velocitat original.

PROCESSOR 16F690
#include <xc.inc>
config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF
config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
Retard1 EQU 0x20  ; Definim dues variables de comptatge
Retard2 EQU 0x21
Visualit EQU 0x22  ; Variable on guardem el que mostraran els LED
Rapid EQU 0x23  ; Variable que memoritza si anem ràpid o no
PSECT code, class=CODE, delta=2, abs
main:
  bsf RP0  ; Tria el banc 1
  movlw 0xFF  ; Posa l'acumulador a FFh (tot uns)
  movwf TRISA  ; Posa tots els bits del port A com a entrada
  clrf TRISC  ; Posa tots els bits del port C com a sortida
  movlw 01001000B  ; IRCF = 100, rellotge a 1 MHz
  movwf OSCCON
  bcf RP0  ; Tria el banc 0
  clrf Rapid  ; No anem ràpid
  movlw 00001000B  ; Activa el bit 3 al registre W
  movwf Visualit  ; Copia el valor de W a la variable Visualit
Bucle:
  movf Visualit,w  ; Copia la variable Visualit sobre el registre W
  movwf PORTC  ; Copia el valor de W al port C
Ret:
  decfsz Retard1,f  ; Decrementa la variable 1
                    ; si dona zero, no es fa la instrucció següent
  goto Ret  ; Salta, excepte si el resultat ha estat zero
  decfsz Retard2,f  ; Decrementa la variable 2
  goto Ret  ; Salta, excepte si el resultat ha estat zero
  bcf CARRY  ; posa a zero el bit d'arrossegament
  rrf Visualit,f  ; Fa rodar els bits cap a la dreta
                  ; el bit d'arrossegament entra per l'esquerra
                  ; i el bit de la dreta passa a l'arrossegament
  btfsc CARRY  ; Comprova si s'ha activat l'arrossegament
               ; Si no s'ha activat, salta una instrucció
  bsf Visualit,3  ; Si s'ha activat, torna a posar un 1
  btfsc PORTA,3  ; Mira si està premut el polsador RA3
  goto NoPremut  ; Si no ho està, no cal fer res
Espera:
  btfss PORTA,3  ; Mira si està premut el polsador RA3
  goto Espera  ; Si ho està, esperem que es deixi
  movlw 00000001B  ; Es prepara per invertir el bit 0
  xorwf Rapid  ; Canviem la velocitat
NoPremut:
  movlw 01001000B  ; IRCF = 100, rellotge a 1 MHz
  btfsc Rapid,0  ; Mira si hem d'anar ràpid
  movlw 01111000B  ; IRCF = 111, rellotge a 8 MHz
  bsf RP0  ; Tria el banc 1
  movwf OSCCON
  bcf RP0  ; Tria el banc 0
  goto Bucle  ; Repetim-ho...
END main

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.