Programa multiplicador PIC16F628A

Hola soy demasiado nuevo en esto de los microcontroladores, llevo esta materia y me quiero meter mas de fondo en ella.

El profesor pido un programa que multiplique 4 bits y salgan en 4 leds pero que se ponga primero 4 bits se toque un push y guarde esto luego se pongan los otros 4 bits (todo esto con dips) y ya lo multiplique debe ser en ensablador y usando el pic16f628a

llevo esto del codigo es lo que he leido en foros y leido un poco aun no se bien como programar y no se si si este bien mi codigo claro aun no llego a la parte dificil que es la suma sucesiva para multiplicar pero necesito asesoramiento.


Hasta ahora tengo entendido que segun lo que puse checa que valores tienen los dips y los manda a encender o apagar, lo de guardar el dato creo esta mal se que lo debe guardar en un registro pero no se bien si sea esa la instruccion y lo de la suma sucesiva lo he estado leyendo un poco por ahi.

creo que todo esto es mas facil en basic no?

lei un poco esto para lo del push que no cree rebotes http://www.circuitoselectronicos.org/2011/03/leer-botones-e-interruptores-con.html pero aun no se bien como es eso de llamar a rutinas o surutinas



; Programa de Multiplicador

list p=16f628a ; Declaracion del procesador
#include <p16f628a.inc> ;
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

;============== Configuración de puertos =================

ORG 0x00
GOTO inicio
ORG 0x05

Inicio:
CMCON = %00000111 " Pines PortA a Digital (No comparator)
TRISA = %00011111 " Los pines 0 a 4 del PORTA a Entrada
TRISB = %00000000 " Todos los pines del PORTB a Salida
;========================Desarrollo==============

CHECA_DEEPS
BTFSC PORTA,0
CALL APAGAR_LED1
CALL ENCENDER_LED1
BTFSC PORTA,1
CALL APAGAR_LED2
CALL ENCENDER_LED2
BTFSC PORTA,2
CALL APAGAR_LED3
CALL ENCENDER_LED3
BTFSC PORTA,3
CALL APAGAR_LED4
CALL ENCENDER_LED4
BTFSC PORTA,4
NOP
GOTO GUARDAR_DATO

APAGAR_LED1
BCF PORTB,0 ; pone a 1 RB0
GOTO INICIO ; va a inicio
ENCENDER_LED1
BSF PORTB,0 ;Pone a 1 RB0
GOTO INICIO
APAGAR_LED2
BCF PORTB,1 ; pone a 1 RB0
GOTO INICIO ; va a inicio
ENCENDER_LED2
BSF PORTB,1 ;Pone a 1 RB0
GOTO INICIO
APAGAR_LED3
BCF PORTB,2 ; pone a 1 RB0
GOTO INICIO ; va a inicio
ENCENDER_LED3
BSF PORTB,2 ;Pone a 1 RB0
GOTO INICIO
APAGAR_LED4
BCF PORTB,3 ; pone a 1 RB0
GOTO INICIO ; va a inicio
ENCENDER_LED4
BSF PORTB,3 ;Pone a 1 RB0
GOTO INICIO

GUARDAR_DATO
MOVLW TRISA
 
hola, yo también soy nuevo en esto y no se mucho pero podría decirte un par de cosas, el label de "INICIO" podría estar antes del CHECA_DEEPS (por cierto nose para que sirve esa funcion),no es necesario que lo pongas tan arriba
-ademas las lineas:
ORG 0x00
GOTO inicio
ORG 0x05
creo que no son necesarias porque no estas usando interrupciones
-y corrige la parte de "pone a 1 RB0" por que algunas veces corresponde RB1, RB2,ETC

eso es todo lo que puedo decirte ya que no entiendo la lógica que usaste para tu programa y aun me falta practica
 
hola, yo también soy nuevo en esto y no se mucho pero podría decirte un par de cosas, el label de "INICIO" podría estar antes del CHECA_DEEPS (por cierto nose para que sirve esa funcion),no es necesario que lo pongas tan arriba
-ademas las lineas:
ORG 0x00
GOTO inicio
ORG 0x05
creo que no son necesarias porque no estas usando interrupciones
-y corrige la parte de "pone a 1 RB0" por que algunas veces corresponde RB1, RB2,ETC

eso es todo lo que puedo decirte ya que no entiendo la lógica que usaste para tu programa y aun me falta practica



mm lo
ORG 0x00
GOTO inicio
ORG 0x05
no se bien que onda creo que era para inicializar en donde debe empezar a leer el programa


mm y si lo de pone a 1 RB0 es que copie y pegue pero bueno son comentarios no se si tu me podrias pasar algunos proyectos tuyos para ver como programaste
 
Atrás
Arriba