SE – uC: PIC16F84A – Práctica #9

Requisitos del Programa

Realizar un programa que cuente los eventos externos generados por un interruptor utilizando el TMR0 y los muestre en dos dígitos de siete segmentos utilizando solamente el PORTB.

Planeación

Primero definiré los puertos de entrada y salida:

Entradas: PORTA [4]

Salidas: PORTA [1:0], PORTB

La cuenta será de cero a noventa y nueve, por lo que tenemos que resetear el contador al llegar a cien.

También debemos separar el número de la cuenta en código BCD, donde cada parte (unidades, decenas y centenas) tiene su propio código de ocho bits para mostrarlos en los dos dígitos de siete segmentos.

Para mostrar dos números diferentes en dos dígitos de siete segmentos utilizaremos la técnica de multiplexor, la cual consiste en activar uno u otro digito durante un tiempo para que la persona logre visualizar el valor, el pseudocódigo es el siguiente:

1- Apagar ambos dígitos

2- Cargar el valor de unidades en el PORTB

3- Activar el digito 0 y esperar X ms

4- Apagar el digito 0

5- Cargar el valor de decenas en el PORTB

6- Activar el digito 1 y esperar X ms

7- Apagar el digito 1

8- Regresar al paso 2

Se debe tener en consideración el rebote mecánico que genera el interruptor. Este problema se puede solucionar por hardware o software, en nuestro caso será por hardware debido a que no utilizaremos la técnica de “polling” para revisar el estado del interruptor por que utilizaremos el TMR0 como contador.

Para utilizar el TMR0 como contador tenemos que configurarlo en el registro OPTION_REG con los siguientes valores:

[7]/RBPU = 1 Resistencias de Pull-Up desactivadas.

[6]INTEDG=X No importa ya que no utilizaremos interrupciones.

[5]T0CS=1 Incrementar en la transición del pin RA4/T0CKI (TMR0 como contador).

[4]TOSE=0 Incrementar en la transición bajo-alto.

[3]PSA=1 Pre escala asignada al WDT.

[2:0]PS2:PS0=X No importa, ya que no se utilizara pre escala.

OPTION_REG = 0xA8

Diagrama de Flujo

Código Fuente

;--------------------------------------------------------------
;	NOMBRE DEL PROGRAMA: Practica #9
;		
;	DESCRIPCION: Contador de Eventos Externos
;
;	POR 			Omar Gurrola	
;
;	FECHA:			8/11/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
	#DEFINE DIG0	PORTA,0			;ACTIVADOR DEL DIG0
	#DEFINE DIG1	PORTA,1			;ACTIVADOR DEL DIG1
	#DEFINE SENSOR	PORTA,4			;ACTIVADOR DEL CONTADOR

	CBLOCK 0x0C	
		VAL_DIG0		;VALOR DEL DIGITO 0
		VAL_DIG1		;VALOR DEL DIGITO 1
	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	B'10101000'
	MOVWF	OPTION_REG
	CLRF	TRISB		;SALIDAS DIGITOS
	BCF		DIG0		;DIG0 = SALIDA
	BCF		DIG1		;DIG1 = SALIDA
	BANK_0

	BSF		DIG0
	BSF		DIG1
	CLRF	TMR0
CICLO
	MOVF	TMR0,W
	SUBLW	D'100'
	BTFSC	STATUS,Z
	CLRF	TMR0
	MOVF	TMR0,W
	CALL	CONVERTIR_BCD
	MOVF	UNIDADES,W
	CALL	CONVERTIR_7SEG
	MOVWF	PORTB
	BCF		DIG1
	CALL	Retardo_10ms
	BSF		DIG1
	MOVF	DECENAS,W
	CALL	CONVERTIR_7SEG
	MOVWF	PORTB
	BCF		DIG0
	CALL	Retardo_10ms
	BSF		DIG0		
	GOTO 	CICLO

CONVERTIR_7SEG
	ADDWF	PCL,F
	RETLW	0x3F
	RETLW	0x06
	RETLW	0x5B
	RETLW	0x4F
	RETLW	0x66
	RETLW	0x6D
	RETLW	0x7D
	RETLW	0x07
	RETLW	0x7F
	RETLW	0x67

	INCLUDE <BCD.INC>
	INCLUDE <RETARDOS.INC>

	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: