SE – uC: PIC16F84A – Práctica #6

Requisitos del Programa

Realizar un programa que realice un corrimiento de LEDs de 8-bits, si el interruptor se encuentra presionado el corrimiento será a la izquierda, de lo contrario será a la derecha.

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.

Este programa es muy sencillo de realizar, ya que solo debemos revisar si el botón esta presionado en cada ciclo y realizar el corrimiento a la derecha o izquierda según el estado del botón.

Diagrama de Flujo

Código Fuente

;--------------------------------------------------------------
;	NOMBRE DEL PROGRAMA:	PRACTICA #6
;			
;	DESCRIPCION:			Corrimiento de un Bit atravez de B
;							de der a izq y viceversa
;
;	POR						Omar Gurrola
;
;	FECHA:					Martes 17/10/06
;	HORA INICIO:			11:34 AM
;	HORA FIN:				12:40 PM
;--------------------------------------------------------------
;	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
RA0	EQU	0
RB0	EQU	0
	CBLOCK	0x0C
		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				;Ir al banco 1
	CLRF	TRISB		;TRISB = 0 = Salidas
	BSF		TRISA,RA0	;PORTA.RA0 = 1 = Entrada
	BANK_0				;Ir al banco 0
	BCF		STATUS,C	;C = 0
	CLRF	PORTB		;PORTB = 0
	BSF		PORTB,RB0	;PORTB = 0x01
CHECA
	CALL	Retardo_1s	;Wait 1s
	BTFSS	PORTA,RA0	;PORTA.RA0 = 1?
	GOTO	IZQ			;NO, GOTO IZQ
	RRF		PORTB,F		;SI, PORTB >> 1
	GOTO	CHECA		
IZQ	
	RLF		PORTB,F		;PORTB << 1
	GOTO	CHECA
	
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: