TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Mauro75 en 26 de Julio de 2009, 00:35:15
-
Hola a todos queria pedir si me pueden decir como agarrar y restar un numero que esta en un espacio de memoria por otro que esta en otro espacio
Por ejemplo:
;ETIQUETAS
MEMORIA1 equ 0x0c
MEMORIA2 equ 0x1c
RESULTADO equ 0x0e
pul1 equ 0
org 0
BSF STATUS,5
movlw b'00000001'
movwf trisb
movlw b'00000'
movwf trisa
bcf status,5
volver
clrf MEMORIA1
clrf MEMORIA2
movlw 05
movwf MEMORIA1
pregunta
btfss portb,0
goto pregunta
movlw 04
movwf MEMORIA2
;lugar donde quiero agregar la operacion
goto volver
end
Lo que yo quiero hacer es al numero de MEMORIA1 restarlo por el numero que esta en MEMORIA2 y si es 0 que el programa siga. Por favor saquenme la duda y desde ya les agradesco
-
Seria de la siguiente manera:
movlw 0x04
subwf Memoria1,0 ;
btfss STATUS,Z ;
goto .... ; No es 0.-
..... ; Si es 0.-
como ves no es necesario utilizar MEMORIA2.
Saludos!
-
Muchas gracias lo probe y anduvo sin problemas
-
Hola sigo haciendo el teclado y la ayuda que me dieron el otro dia me sirvio mucho pero ahora tengo otro problema la contraseña es de 4 nnumeros, al primer numero lo toma sin ningun problema y lo guarda pero cuando inserto el segundo numero el programa lo lee pero no lo guarda. Por lo tanto de la manera que esta construido el programa, va a mandar error porque piensa de que el numero no es el solicitado.
;-------ETIQUETAS--------
;-------COLUMNAS---------
h equ 03
i equ 04
j equ 05
;-----FILAS--------------
m equ 00
n equ 01
o equ 02
;-----MEMORIAS-----------
primernumero equ 0x0c
segundonumero equ 0x0d
tercernumero equ 0x0e
cuartonumero equ 0x0f
temporal equ 0x12
pricorrecto equ 0x1c
segcorrecto equ 0x1d
tercorrecto equ 0x1e
cuacorrecto equ 0x1f
;----CONFIGURACION-------
org 0
bsf status,5
movlw b'01111'
movwf trisa
movlw b'00000111'
movwf trisb
movlw 09
movwf primernumero ;GUARDO PRIMER NUMERO EN LA MEMORIA
movlw 02
movwf segundonumero ;GUARDO SEGUNDO NUMERO EN LA MEMORIA
movlw 06
movwf tercernumero ;GUARDO TERCER NUMERO EN LA MEMORIA
movlw 04
movwf cuartonumero ;GUARDO CUARTO NUMERO EN LA MEMORIA
bcf status,5
;-------PROGRAMA------------
;---------BUSQUEDA DEL TECLADO-------
volver
clrf portb
;---COLUMNA H------- PRUEBO CONVINACIONES CON H
bsf portb,h
btfss portb,m
goto sig0
goto compruebo1
sig0
btfss portb,n
goto sig1
goto compruebo4
sig1
btfss portb,o
goto sig2
goto compruebo7
;------COLUMNA I---- PRUEBO CONVINACIONES CON I
sig2
bcf portb,h
bsf portb,i
btfss portb,m
goto sig3
goto compruebo2
sig3
btfss portb,n
goto sig4
goto compruebo5
sig4
btfss portb,o
goto sig5
goto compruebo8
;------COLUMNA J------- PRUEBO CONVINACIONES CON J
sig5
bcf portb,i
bsf portb,j
btfss portb,m
goto sig6
goto compruebo3
sig6
btfss portb,n
goto sig7
goto compruebo6
sig7
btfss portb,o
goto sig8
goto compruebo9
sig8
bcf portb,j
goto volver
;
;
;;--------COMPRUEBO LAS TECLAS PRESIONADAS-----
compruebo1
movlw 01
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo2
movlw 02
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo3
movlw 03
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo4
movlw 04
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo5
movlw 05
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo6
movlw 06
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo7
movlw 07
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo8
movlw 08
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
compruebo9
movlw 09
movwf temporal
subwf primernumero,0
btfss status,z
goto error
goto correcto
goto volver
;-------ERRORES----------
error
subwf segundonumero,0
btfss status,z
goto error2
goto correcto2
goto volver
error2
bsf portb,7
subwf tercernumero,0
btfss status,z
goto error3
goto correcto3
goto volver
error3
bsf portb,7
subwf cuartonumero,0
btfss status,z
goto error4
goto correcto4
goto volver
error4
bsf portb,7
goto volver
;------CORRECTOS--------
correcto
movlw 09
movwf pricorrecto
bsf portb,6
goto volver
correcto2
movlw 02
movwf segcorrecto
bsf portb,6
goto volver
correcto3
movlw 06
movwf tercorrecto
bsf portb,6
goto volver
correcto4
movlw 04
movwf cuacorrecto
bsf porta,4
goto volverPor favor si me pueden ayudar les agradeceria
-
Saludos
Mauro75 con que micro está programando para poder ayudarte
Un saludos desde Pereira - Colombia
-
Estoy programando un 16f84a
-
Saludos
Mauro75 yo te recomendaria que en vez de hacer esto haz primero esto para el banco 1bsf status,5
bcf status,6
bsf status,5 ; banco 1
Lo segundo
movlw b'01111'
movwf trisa
movlw b'00000111'
movwf trisb
movlw 09
movwf primernumero ;GUARDO PRIMER NUMERO EN LA MEMORIA
movlw 02
movwf segundonumero ;GUARDO SEGUNDO NUMERO EN LA MEMORIA
movlw 06
movwf tercernumero ;GUARDO TERCER NUMERO EN LA MEMORIA
movlw 04
movwf cuartonumero ;GUARDO CUARTO NUMERO EN LA MEMORIA
Acá veo un error y es el siguiente los registros primernumero........ cuartonumero estan el banco 0 y no en el banco 1 así que primero cambiate de banco así
movlw b'01111'
movwf trisa
movlw b'00000111'
movwf trisb
bcf status,5 ; banco 0
movlw 09
movwf primernumero ;GUARDO PRIMER NUMERO EN LA MEMORIA
movlw 02
movwf segundonumero ;GUARDO SEGUNDO NUMERO EN LA MEMORIA
movlw 06
movwf tercernumero ;GUARDO TERCER NUMERO EN LA MEMORIA
movlw 04
movwf cuartonumero ;GUARDO CUARTO NUMERO EN LA MEMORIA
Yo creo que ese es el errro prueba y me comentas
Un saludo desde Pereira - Colombia
-
El tema me parece que esta aca
subwf segundonumero,0
btfss status,z
goto error2
goto correcto2
goto volver
error2
bsf portb,7
subwf tercernumero,0
btfss status,z
goto error3
goto correcto3
goto volver
Para comparar los numeros ingresados con otro que no sea el primero hago eso pero me parece que esta mal porque parece que siempre lo resta por 9 que es el primer numero que se guarda
-
Saludos
Mauro75 tu estas recibiendo los datos por un teclado matricial.
Un saludo desde Pereira - Colombia
-
si pero yo hice que por cada tecla se guarde el numero que corresponda.
-
Saludos
Mauro75 listo, espera yo busco un ejemplo que tengo por acá y te comento
Un saludo desde Pereira - Colombia
-
Bueno si me lo podrias enviar te agradesco
-
Saludos
Mauro75 mira tienes varios problemas en tu código, el primero no estas multiplexando bien el teclado, no veo por ningun lado la rutina de tiempo que multiplexa al teclado, haces el barrido pero es muy rapido y entonces el microcontrolador no lo detecta,
El problema del banco es otro ya que los registros están en banco cero y tu estas en el banco 1, nunca se van a cargar con los valores que tu quires.
Acá te pongo un ejemplo de un teclado matricial analiza como se hace el barrido, mira que el valor presionado se muestra en la parte inferior del puerto B, además por cada tecla oprimida hay una rutina de asignación y también hay una rutina de multiplexación lla cual utiliza como tiempo la rutina RETARDO.
Si alguna cosa me comentas. la simulación esta con un PIC16F877 en el proteus version 7.0.
Un saludo desde Pereira - Colombia