SE – uC: PIC16F84A – Práctica #1

Descripción del Programa

Programa que suma dos números de 16 bits.

Para realizar este programa en un uC de 8-bits es necesario utilizar dos registros para cada variable y sumar el acarreo al resultado final.

Diagrama de Flujo

Código Fuente

;--------------------------------------------------------------
;	Descripcion del programa: 
;		Programa que suma 2 Numeros de 16 bits
;	Por:
		Omar Gurrola
;	Fecha:	Miercoles 11/10/06
;	Hora:	11:00 AM
;--------------------------------------------------------------
;	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
		OPR1_H		;OPERADOR 1 Parte Alta
		OPR1_L		;OPERADOR 1 Parte Baja
		OPR2_H		;OPERADOR 2 Parte Alta
		OPR2_L		;OPERADOR 2 Parte Baja
		RES_A		;Acarreo
		RES_H		;RESULTADO  Parte Alta
		RES_L		;RESULTADO  Parte Baja
	ENDC
;--------------------------------------------------------------
;	Vectores de Interrupcion

	ORG	0			;Ensamblar en la Dir 0
	GOTO	PROGRAMA	
	ORG 5			;Ensamblar en la Dir 5
;--------------------------------------------------------------
;	PROGRAMA
;--------------------------------------------------------------
PROGRAMA
	BCF	STATUS,C		;STATUS.C = 0
	MOVF	OPR1_L,W	;W = OPR1_L
	ADDWF	OPR2_L,W	;W = W + OPR2_L = OPR1_L + OPR2_L
	MOVWF	RES_L		;RES_L = W

	BTFSS	STATUS,C	;STATUS.C = 1?
	GOTO	FALSO
	GOTO	VERDADERO
FALSO
	CLRW				;NO,	W = 0
	GOTO	SIG
VERDADERO
	MOVLW	1			;SI,	W = 1
SIG
	ADDWF	OPR1_H,W	;W = W + OPR1_H
	MOVWF	RES_H		;RES_H = W
	MOVF	STATUS,W	;W = STATUS
	ANDLW	0x1			;W = W & 0x01
	MOVWF	RES_A		;RES_A = W
	MOVF	RES_H,W		;W = RES_H
	ADDWF	OPR2_H,W	;W = W + OPR2_H = OPR1_H + OPR2_H
	MOVWF	RES_H		;RES_H = W

	GOTO PROGRAMA		;VUELVE A EMPEZAR
	END					;Fin del programa

Galería

Leave a comment