SE – uC: PIC16F84A – Práctica #5

Requisitos del Programa

Realizar un programa que cuente de cero a quince, que decremente si un interruptor se encuentra presionado e incremente si no se encuentra presionado.

Planeación

Primero definiré los puertos de entrada y salida:

Entradas: PORTA.0

Salidas: PORTB

Para realizar este programa necesitamos un retraso entre cada “polling” del interruptor para poder visualizar el valor del contador en los LEDs, como en los requisitos no esta definido yo lo estableceré en un segundo.

Como el rango valido va de cero a quince debemos revisar el contador en cada ciclo, si hay un decremento de cero el valor del registro se va a 255 por lo que debemos cargarle quince nuevamente. En los ciclos de incrementos debemos revisar si llega a dieciséis, en este caso debemos cargarle cero nuevamente.

Diagrama de Flujo

Código Fuente

;--------------------------------------------------------------
;	NOMBRE DEL PROGRAMA:	PRACTICA #5
;			
;	DESCRIPCION:			Contador Modulo 15 (4 bits)
;							Que se incrementa o decrementa con un switch en RA0
;							RA0 = 0 Incrementa, RA0 = 1 Decrementa
;
;	POR:					Omar Gurrola
;
;	FECHA:					Miercoles 18/10/06
;--------------------------------------------------------------
;	Configuracion para el GRABADOR

	__CONFIG	_CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
	
;_CP_ON / _OFF		Proteccion del Codigo
;_PWRTE_ON / _OFF	Reset mediante Power-Up Timer
;_WDT_ON / _OFF		WatchDog
;_LP_OSC			Oscilador de bajo Consumo (35Khz a 200Khz)
;_XT_OSC			Oscilador de Cristal (100khz a 4Mhz
;_HS_OSC			Oscilador de Alta velocidad (4Mhz a 20Mhz)
;_RC_OSC			Oscilador Resistencia-Capacitor ()
;--------------------------------------------------------------
;	Definiciones y Declaracion del Micro
	LIST	P=16F84A		;Procesador utilizado
	INCLUDE	<P16F84A.INC>	;Definicion de algunos operandos
;--------------------------------------------------------------
;	Declaracion de Constantes, Variables y Base
	RADIX	HEX		;Base Hexadecimal
	
	#DEFINE	BANK_0	BCF	STATUS,RP0	;Ir al banco 0
	#DEFINE	BANK_1	BSF	STATUS,RP0	;Ir al Banco 1
	
	CBLOCK	0x0C
		Contador
		R_ContA
		R_ContB
		R_ContC
	ENDC
;--------------------------------------------------------------
;	Vectores de Interrupcion

	ORG	0			;Ensamblar en la Dir 0
	GOTO	PROGRAMA	
	ORG 5			;Ensamblar en la Dir 5
;--------------------------------------------------------------
;	PROGRAMA
;--------------------------------------------------------------
PROGRAMA	
	BANK_1
	MOVLW	0xFF	
	MOVWF	TRISA		;PORTA = Entradas
	CLRF	TRISB		;PORTB = Salidas
	BANK_0

BCONT
	CLRF	Contador	;Borramos el contador
INICIO
	MOVF	Contador,W	;W = Contador
	MOVWF	PORTB		;PORTB = W
	CALL	Retardo_1s	;Tardamos 1s
	BTFSC	PORTA,0		;PORTA,RA0 = 0
	GOTO	DEC			;NO ir a DEC
	INCF	Contador	;SI Contador++
	MOVLW	0x10		;W = 16
	SUBWF	Contador,W	;W = Contador - 16
	BTFSS	STATUS,Z	;Contador = 16
	GOTO	INICIO		;NO ir a INICIO
	GOTO	BCONT		;SI ir a BCONT
DEC
	DECF	Contador,F	;Contador--
	MOVLW	0xFF		;W = 0xFF
	SUBWF	Contador,W	;Contador - 0xFF
	BTFSS	STATUS,Z	;Contador = 0xFF
	GOTO	INICIO		;NO ir a INICIO
	MOVLW	0x0F		;W = 0x0F
	MOVWF	Contador	;Contador = W
	GOTO	INICIO		;ir a INICIO

Retardo_1s
	MOVLW	D'10'	
	MOVWF	R_ContC	
R1Decima_BucleExterno2	
	MOVLW	D'100'	
	MOVWF	R_ContB	
R1Decima_BucleExterno
	MOVLW	D'249'	
	MOVWF	R_ContA
R1Decima_BucleInterno
	NOP
	DECFSZ	R_ContA,F
	GOTO	R1Decima_BucleInterno
	DECFSZ	R_ContB,F
	GOTO	R1Decima_BucleExterno
	DECFSZ	R_ContC,F
	GOTO	R1Decima_BucleExterno2
	RETURN

	END					;Fin del programa

Galería

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: