Programació en mpasm 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.

#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
	cblock 0x20
Retard1				; Definim dues variables de comptatge
Retard2
Visualit			; Variable on guardem el que mostraran els LED
Rapid				; Variable que memoritza si anem ràpid o no
	endc
	org 0
Inici
	bsf	STATUS,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	b'01001000'	; IRCF = 100, rellotge a 1 MHz
	movwf	OSCCON
	bcf	STATUS,RP0	; Tria el banc 0
	clrf	Rapid		; No anem ràpid
	movlw	b'00001000'	; 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	STATUS,C	; 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	STATUS,C	; 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	b'00000001'	; Es prepara per invertir el bit 0
	xorwf	Rapid		; Canviem la velocitat
NoPremut
	movlw	b'01001000'	; IRCF = 100, rellotge a 1 MHz
	btfsc	Rapid,0		; Mira si hem d'anar ràpid
	movlw	b'01111000'	; IRCF = 111, rellotge a 8 MHz
	bsf	STATUS,RP0	; Tria el banc 1
	movwf	OSCCON
	bcf	STATUS,RP0	; Tria el banc 0
	goto	Bucle		; Repetim-ho...
	end

 

 

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