SE – uC: PIC16F84A – Práctica #3

Requisitos del Programa

Realizar un programa que compare dos valores de cuatro bits cada uno, obtenidos de un puerto y con tres LEDs en otro puerto de salida indique si A > B, A < B o A = B.

Planeación

Primero definiré los puertos de entrada y salida:

Entradas: PORTB | A=4b-MSB | B=4b-LSB |

Salidas: PORTA | 2b-A>B | 1b-A<B | 0b-A=B |

Para realizar la comparación tenemos que hacer una resta A – B y se utilizaran las banderas Z y DC del registro STATUS para verificar si A > B, A < B, A = B.

Diagrama de Flujo

Código Fuente

;--------------------------------------------------------------
;	NOMBRE DEL PROGRAMA:
;			Practica #3
;	DESCRIPCION: 
;			Programa que detecta si A=B,A<B,A>B, Utilizando Resta
;	POR:
;			Omar Gurrola
;	FECHA:	Viernes 13/10/06
;	HORA:	04:30 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

CBLOCK	0x0C		;Declaramos un bloque de variables desde 0x0C
	REGA
	REGB
ENDC
;--------------------------------------------------------------
;	Vectores de Interrupcion
	ORG	0			;Ensamblar en la Dir 0
	GOTO	PROGRAMA	
	ORG 5			;Ensamblar en la Dir 5
;--------------------------------------------------------------
;	PROGRAMA
;--------------------------------------------------------------
PROGRAMA
	BANK_1				;Nos vamos al banco1
	CLRF	TRISA		;A -> SALIDAS
	MOVLW	0xFF		
	MOVWF	TRISB		;B -> ENTRADAS
	BANK_0				;Nos vamos al banco0
CICLO
	MOVF	PORTB,W		;W=PORTB
	ANDLW	0x0F		;W = 0000 RB3 RB2 RB1 RB0
	MOVWF	REGB		;REGB = W
	MOVF	PORTB,W		;W = PORTB
	ANDLW	0xF0		;W = RB7 RB6 RB5 RB4 0000
	MOVWF	REGA		;REGA = W
	SWAPF	REGA,F		;REGA = 0000 RB7 RB6 RB5 RB4

	CLRF	PORTA		;PORTA = 0 TODAS APAGADAS
	
	MOVF	REGB,W		;W = REGB
	SUBWF	REGA,W		;W = REGA - REGB

	BTFSC	STATUS,Z	;Z = 0?
	GOTO	IGUALES		;SI NO IR A IGUALES
	BTFSC	STATUS,DC	;DC = 0?
	GOTO	A_MAYOR		;SI NO IR A A_MAYOR
	GOTO	A_MENOR		;SI SI IR A A_MENOR
IGUALES
	BSF		PORTA,2		;RB2 = 1 PRENDIDO
	GOTO 	FIN
A_MAYOR
	BSF		PORTA,0		;RB0 = 1 PRENDIDO
	GOTO	FIN
A_MENOR
	BSF		PORTA,1		;RB1 = 1 PRENDIDO
FIN	
	GOTO	CICLO
	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: