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
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