SE – uC: PIC16F84A – Práctica #1
Thursday - 16, February, 2012 (8:50 PM) Leave a comment
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