TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: pattylt en 27 de Diciembre de 2005, 14:18:00
-
Bueno mi problema esta en lo siguiente necesito hacer un programa donde este acoplado el lenguaje assembler con PBP, estoy tratando con la instruccion ASM ENDASM, pero solo realiza parte del codigo, creo q tengo problemas en los goto en asm....alguien tendra alguna informacion que me sea util??!!

P.D: el codigo en asm esta bueno.
-
Claro preciosa pero debes de poner tu codigo para darte una ayudadita y con mucho gusto
-
ok amigo este es el programa, como lo estoy colocando en el MicroCode!
ASM
CONTCL EQU 0X20
CONT EQU 0X21
eedig1 EQU 0X22
eedig2 EQU 0X23
eedig3 EQU 0X24
eedig4 EQU 0X25
LOOP2 EQU 0X26
dig_temp EQU 0X27
dig4 EQU 0X28
LOOP1 EQU 0X29
DIG2 EQU 0X2A
DIG3 EQU 0X2B
DIG1 EQU 0X2D
LOOP3 EQU 0X2E
inicio bsf 3,5
movlw 7
movwf adcon1
CLRF PORTD
MOVLW B"010000"
MOVWF PORTA
CLRF PORTE
CLRF PORTC
bcf Status,rp0
CLRF PORTA
CLRF PORTB
movlw .3
movwf contcl ;registro que cuenta los errores
lcd_inicio call p_lcd ;configuracion del LCD
call cls
movlw .100 ;como no posee RW se debe esperar un tiempo
movwf cont
dd nop
nop
nop
nop
nop
decfsz cont,1
b dd
call d_on_ci_off ;display on cursor off
call _2lineas ;doble linea
mensaje movlw "I" ;Mensaje por pantalla
call char ;de petición de clave
movlw "N"
call char
movlw "T"
call char
movlw "R"
call char
movlw "O"
call char
movlw "D"
call char
movlw "U"
call char
movlw "Z"
call char
movlw "C"
call char
movlw "A"
call char
movlw " "
call char
movlw "C"
call char
movlw "L"
call char
movlw "A"
call char
movlw "V"
call char
movlw "E"
call char ;TERMINA EL PRIMER MENSAJE
movlw 0xC6 ;segunda linea
call pos ;rutina de comando al LCD
movlw .4
movwf cont
clrf portb
movlw "1"
movwf eedig1
movlw "2"
movwf eedig2
movlw "3"
movwf eedig3
movlw "4"
movwf eedig4
;rutina de reconocimiento de clave
no_hay call initb ;configuracion del puerto B para teclado
call detec ;deteccion de tecla pulsada
movwf tecla
movlw 0xFF
subwf tecla,w
btfss status,z
goto no_hay
call codif
movwf tecla
call up_k
movf tecla,w
movwf dig_temp
lcd call P_LCD
call _2lineas
call d_on_ci_off
movlw b"00000110"
call mod
MOVF TECLA,W ;colocacion en el LCD de la tecla presionada
call char
decfsz cont,f
goto preg
movf dig_temp,w
movwf dig4
bsf 3,5
movlw b"10000111"
movwf option_reg
bcf 3,5
movlw .3
call _2_seg
goto comp
preg movlw .3
subwf cont,w
btfsc status,z
call uno
movlw .2
subwf cont,w
btfsc status,z
call dos
movlw .1
subwf cont,w
btfsc status,z
call tres
goto no_hay
uno movf dig_temp,w
movwf dig1
return
dos movf dig_temp,w
movwf dig2
return
tres movf dig_temp,w
movwf dig3
return
comp call p_lcd
call cls
movf eedig1,w
subwf dig1,w
btfss status,z
b clave_inc
movf eedig2,w
subwf dig2,w
btfss status,z
b clave_inc
movf eedig3,w
subwf dig3,w
btfss status,z
b clave_inc
movf eedig4,w
subwf dig4,w
btfss status,z
b clave_inc
goto bueno
infi b infi
clave_inc call p_lcd
call cls
decfsz contcl,1
b lcd_inicio
goto malo ;Cae aquí a la tercera vez
inft b inft
_10_ms movlw .100
movwf loop1
ss movlw .10
movwf loop2
ll nop
nop
nop
nop
nop
decfsz loop2,f
b ll
decfsz loop1,f
b ss
return
_2_seg movlw .200
movwf loop3
diez call _10_ms
decfsz loop3,f
b diez
return
malo BSF PORTA,1
GOTO MALO
BUENO BSF PORTA,2
GOTO BUENO
;=============================================
;=================librerias
;==========================lcd=============
cblock 0x40
var3
var4
endc
p_lcd bsf status,5
clrf portb
clrf portc
bcf status,5
return
cls movlw 0x01
call control
return
pos call control
return
mod call control
return
d_on_ci_off movlw b"00001100"
call control
return
funcion call control
return
control bcf portc,4
nop
movwf portb
nop
bcf portc,5
call del
bsf portc,5
nop
nop
return
char movwf portb
nop
bsf portc,4
nop
nop
bcf portc,5
nop
call del
bsf portc,5
nop
nop
return
del movlw d"8"
movwf var3
ciclo2 movlw d"8"
movwf var4
ciclo1 decfsz var4,f
goto ciclo1
decfsz var3,f
goto ciclo2
return
_2LINEAS movlw 0x38
call control
movlw 0xc
call control
return
;================================
;=====================================
;====================teclado=============
cblock 0x50
ptd
var1
var2
tecla
endc
initb clrf status
clrf portb
bsf status,rp0
movlw 0xf0
movwf portb
bcf status,rp0
return
;subrutina de deteccion de tecla presionada: regresa w=0 si no hay tecla presionada
; y w=0xff si hay alguna.
detec movlw 0xf0
movwf portb
btfss portb,7
goto rebo
btfss portb,6
goto rebo
btfss portb,5
goto rebo
btfss portb,4
goto rebo
retlw 0x0
rebo movlw d"100"
movwf var1
_b movlw d"40"
movwf var2
_a nop
nop
nop
nop
nop
decfsz var2,f
goto _a
decfsz var1,f
goto _b
btfss PORTB,7
retlw 0xff
btfss PORTB,6
retlw 0xff
btfss PORTB,5
retlw 0xff
btfss PORTB,4
retlw 0xff
retlw 0x0
;rutina para convetir en caracter ASCII
codif movlw 0xf7
movwf PORTB
btfss PORTB,7
retlw "1"
btfss PORTB,6
retlw "4"
btfss PORTB,5
retlw "7"
btfss PORTB,4
retlw "*"
movlw 0xfb
movwf PORTB
btfss PORTB,7
retlw "2"
btfss PORTB,6
retlw "5"
btfss PORTB,5
retlw "8"
btfss PORTB,4
retlw "0"
movlw 0xfd
movwf PORTB
btfss PORTB,7
retlw "3"
btfss PORTB,6
retlw "6"
btfss PORTB,5
retlw "9"
btfss PORTB,4
retlw "#"
retlw 0x00 ;falsa alarma ninguna tecla presionada
up_k movlw 0xf0
andwf PORTB,w
movwf ptd
movlw 0xf0
subwf ptd,w
btfss status,2
b up_k
return
end
ENDASM
INICIO:
HIGH PORTA.4
GOTO INICIO
END
==================================
-
Hola:
Perdon pero, cual es la idea de compilar todo un programa en ensamblador con PBP, porque no lo compilas con MPASM solamente...?
-
Escrito originalmente por LordLafebre
Hola:
Perdon pero, cual es la idea de compilar todo un programa en ensamblador con PBP, porque no lo compilas con MPASM solamente...?
Veras, ese no es el programa completo, sino una prueba para ver si se puede correr con los dos lenguajes.....la cosa está es que estoy haciendo un proyecto con una alarma antirrobo controlada por la pc, esa parte está en basic, pero la parte de la clave por teclado matricial por mas q intento no me da (en basic), por ello trato de incorporarle esa rutina en asm q estoy segura que si funciona porque esta probada y montada.....pero igualito nada de nada....El programa corre hasta "INTRODUZCA CLAVE" despues de ahi por mas que presiono los botones los numeros sale cuando ellos quieren y sin nungun orden
.......
-
Hola:
Pues era que empieces por alli... comentandonos eso, aqui en el foro hay algo hecho... en esl mismo foro de basic incluso... mira aqui:
http://miarroba.com/foros/ver.php?foroid=8826&temaid=4233849
o aqui:
http://miarroba.com/foros/ver.php?foroid=8826&temaid=4180638&pag=4
alli esta lo que necesitas....
SUERTE...!!!
-
Hola amiga, yo tengo un programa en PICbasicPro que lee el teclado matricial 4x3 y tambien dice "introduzca clave", si quieres das tu correo y te lo envio sin ningun problema.
Saludos
-
JAJA NO PUES PATYSITA COMO VA SER IRTE CAMINANDO SI TIENES CARRO SE VE QUE LA ROMPES CON EL ASEMBLER PERO SI NO ESTA EL MPLAB , POR ALLI AHI UN BUEN EJEMPLO DE LO QUE BUSCAS PERO CON UNA CERRADURA BUSCA ESTA EL CODIGO BIEN CHEVERE , ES EL MISMO PRINCIPIO PARA LA ALARMA CHAUUUU
-
Bueno mis amigos ya resolvi el problema todo el programa en BASIC....
la rutina del teclado +LCD a los q esten interesados se la puedo hacer llegar...
Gracias a todos los que me dieron una mano y me ayudaron en este proyecto
-
Hola:
Que bien que lo lograste...
Patty si estas dispuesta a colaborar con tu codigo porque mo lo pones aqui para que todos podamos verlo...
-
Como no querido Lord
;Programa para leer un teclado hexadecimal .4*3 y mostrarlo en LCD,
;ademas luego de tres intento fallido de la clave el sistema se bloquea
;y solo se pondra en funcionamiento al presionar por dos segundos la tecla (*),
;prendiendo un led que indica el desbloqueo!
adcon1=7
TECLA VAR BYTE
EE1 VAR BYTE
EE2 VAR BYTE
EE3 VAR BYTE
EE4 VAR BYTE
DIG1 VAR BYTE
DIG2 VAR BYTE
DIG3 VAR BYTE
DIG4 VAR BYTE
A VAR PORTB.0 ;nombres para los pines de las filas
B VAR PORTB.1
C VAR PORTB.2
D VAR PORTB.3
UNO VAR PORTB.4 ;nombres para los pines de las columnas
DOS VAR PORTB.5
TRES VAR PORTB.6
CUATRO VAR PORTB.7
N VAR BYTE
R VAR BYTE ;CONTADOR DE LAS CLAVES ERRONEAS
M VAR BYTE
define lcd_Dreg portd
define lcd_dbit 0
define lcd_rsreg portc
define lcd_rsbit 4
define lcd_ereg portc
define lcd_ebit 5
EE1 = 1 : EE2 = 2 : EE3 = 3 : EE4 = 4
R = 3 ;NUMERO DE INTENTOS
INICIO:
N = 0
lcdout $fe,1,"INTRODUZCA CLAVE:"
GOSUB BARRIDO
DIG1 = TECLA
PAUSE 90
N = 1
GOSUB BARRIDO
DIG2 = TECLA
PAUSE 90
N = 2
GOSUB BARRIDO
DIG3 = TECLA
PAUSE 90
N = 3
GOSUB BARRIDO
DIG4 = TECLA
PAUSE 500
IF DIG1 = EE1 THEN P2
GOTO FALSO
P2:
IF DIG2 = EE2 THEN P3
GOTO FALSO
P3:
IF DIG3 = EE3 THEN P4
GOTO FALSO
P4:
IF DIG4 = EE4 THEN BUENO
GOTO FALSO
FALSO:
HIGH PORTE.1
LCDOUT $FE,1, "CLAVE INCORRECTA"
PAUSE 700
LOW PORTE.1
R = R - 1
IF R = 0 THEN BLOQUEO
PAUSE 200
GOTO INICIO
BUENO: ;DESPUES DE AQUI PODEMOS HACER LO QUE
HIGH PORTE.0 ;QUERAMOS
LCDOUT $FE,1, "SISTEM ACTIVADO"
PAUSE 500
LOW PORTE.0
PAUSE 500
GOTO BUENO
BLOQUEO:
LCDOUT $FE,1, "SISTEM BLOQUEADO"
OTRO:
FOR M = 1 TO 2
LOW D : HIGH C : HIGH B : HIGH A ;SE DEBE PRESIONAR (*) PARA DESBLOQUEO
IF UNO = 0 THEN DESBLO ;POR DOS SEGUNDOS
PAUSE 1000
NEXT
GOTO OTRO
DESBLO:
HIGH PORTE.2 : PAUSE 700 : LOW PORTE.2
GOTO INICIO
BARRIDO:
HIGH A : HIGH B : HIGH C : HIGH D
LOW A
IF UNO = 0 THEN LCDOUT $FE,$C6+N, "1":TECLA = 1 :RETURN
IF DOS = 0 THEN LCDOUT $FE,$C6+N, "2":TECLA = 2 :RETURN
IF TRES = 0 THEN LCDOUT $FE,$C6+N, "3":TECLA = 3 :RETURN
HIGH A
LOW B
IF UNO = 0 THEN LCDOUT $FE,$C6+N,"4" :TECLA = 4 :RETURN
IF DOS = 0 THEN LCDOUT $FE,$C6+N,"5" :TECLA = 5 :RETURN
IF TRES = 0 THEN LCDOUT $FE,$C6+N,"6" :TECLA = 6 :RETURN
HIGH B
LOW C
IF UNO = 0 THEN LCDOUT $FE,$C6+N,"7" :TECLA = 7 :RETURN
IF DOS = 0 THEN LCDOUT $FE,$C6+N,"8" :TECLA = 8 :RETURN
IF TRES = 0 THEN LCDOUT $FE,$C6+N,"9" :TECLA = 9 :RETURN
HIGH C
LOW D
IF UNO = 0 THEN LCDOUT $FE,$C6+N,"*" :TECLA = 10:RETURN
IF DOS = 0 THEN LCDOUT $FE,$C6+N,"0" :TECLA = 0 :RETURN
IF TRES = 0 THEN LCDOUT $FE,$C6+N,"#" :TECLA = 11:RETURN
HIGH D
pause 10
GOTO BARRIDO
END
-
Hola:
Gracias por el aporte querida Patty 





