TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: elloco en 30 de Enero de 2008, 12:26:28
-
hola buenas he exo un programa q se se trata de mediante un teclado y un lcd con un pic16f84 introducir un numero, bueno en este caso tres numeros. y si son correctos te ponga en el lcd numero correcto y se activa a los pocos segundos una salida dependiendo del numero q hayas pulsado si es correcto se activara por ejemplo para el 23 la porta1, para el 56 la porta3 y paara el 89 la porta4, ya que la port0 y la port2 estan reservadas xa el el lcd, e mi caso trabajare con DB7,DB6,DB5,DB4, es decir 4 bits, pero no se si me faltara algo, o algo falla porq no se me activan la salidas, me podeis ayudar?? aqui os pongo los pasos q hace el prgrama xa ver si esa bien o no y os adjunto el programa exo xa q me digais si esta mas o menos bien.
1 paso: por el lcd te pide tecle Numero
2 Paso: tecleamos numero y sino es correcto ninguno de los tres, te dice en el lcd numero incorrecto si fuera alguno delos tres te pondria numero correcto y se activaria la salida correspondiente q se haya definido a ese numero, mas adelante pondre mas cosillas al programilla xo quiiero ver si falla algo ahora y q es, si podeis ayudarme os lo agradeceria muxo, gracias.
-
¿Has configurado correctamente los tris para que los pines a los que va conectado el teclado actúen como entradas?
No lo veo en el código
-
no se porq no ve sle codigo bueno aqui te le pongo
LIST P=16F84
RADIX HEX
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
#DEFINE LogingitudNumero1 (Numero1-FinNumero1)
#DEFINE LogingitudNumero2 (Numero2-FinNumero2)
#DEFINE LogingitudNumero3 (Numero3-FinNumero3)
#DEFINE Salida1 PORTA,1
#DEFINE Salida2 PORTA,3
#DEFINE Salida3 PORTA,4
ZONA*********************************************************************
ORG 0
GOTO INICIO
ORG 4
GOTO INTER
Mensajes
ADDWF PCL,F
Mensaje0
DT "Teclee Numero",0x00
Mensaje1
DT "Numero Correcto",0x00
Mensaje2
DT "Activao Salida1",0x00
Mensaje3
DT "Activao salida2",0x00
Mensaje4
DT "Activao salida3",0x00
Mensaje5
DT "Numero Incorrecto",0x00
LeeNumeros
ADDWF PCL,F
Numero1
DT 2h,3h
FinNumero1
Numero2
DT 5h,6h
FinNumero2
Numero3
DT 8h,9h
FinNumero3
FinNumeros
INICIO CALL LCD_Inicializa
bsf STATUS,RP0
bcf PORTA,1 ;Define como salida
bcf PORTA,3
bcf PORTA,4
bcf STATUS,RP0
CALL Teclado_Inicializa ;Configura Teclado
CALL InicializaTodo ;Inicializa los registros
movlw b'10001000' ;Habilita la Interrupcion RBI
movwf INTCON
bucle
sleep
goto bucle
;Subrutina Inter*********************************************************
CBLOCK
CONT1
CONT2
CONT3
GuardoTecla
ENDC
INTER CALL Teclado_LeeHex
movwf INDF ;Almacena el digito en la Ram
incf FSR,f ;Apunta hacia la siguiente direccion de ñla Ram
incf CONT1,f
movlw LongitudNumero1
subwf CONT1,W
incf FSR,f
incf CONT2,f
movlw LongitudNumero2
subwf CONT2,W
incf FSR,f
incf CONT3,f
movlw LongitudNumero3
subwf CONT3,W
btfss STATUS,C
GOTO INTER1
CALL LCD_Borra
clrf CONT1
clrf CONT2
clrf CONT3
movlw Tecla
movwf FSR
ComparaNumero1
movf INDF,W ;Lee el numero y lo guarda en la ram
movwf Tecla
movwf CONT1,w ;Apunta ala Rom
call Numero1
subwf GuardoTecla,w
btfss STATUS,Z
goto NumeroIncorrecto
incf FSR,f
incf CONT1,f
movlw LongitudNumero1
subwf CONT1,f
btfss STATUS,C
goto ComparaNumero1
movlw Mensaje1
CALL LCD_Mensaje
CALL LCD_Linea2
movlw Mensaje2
CALL LCD_Mensaje
bsf Salida1
goto Retardos
ComparaNumero2 movf INDF,W ;Lee el numero y lo guarda en la ram
movwf Tecla
movwf CONT2,w ;Apunta ala Rom
call Numero2
subwf GuardoTecla,w
btfss STATUS,Z
goto NumeroIncorrecto
incf FSR,f
incf CONT1,f
movlw LongitudNumero2
subwf CONT1,f
btfss STATUS,C
goto ComparaNumero2
movlw Mensaje1
CALL LCD_Mensaje
CALL LCD_Linea2
movlw Mensaje3
CALL LCD_Mensaje
bsf salida2
goto Retardos
ComparaNumero3 movf INDF,W ;Lee el numero y lo guarda en la ram
movwf Tecla
movwf CONT3,w ;Apunta ala Rom
call Numero3
subwf GuardoTecla,w
btfss STATUS,Z
goto NumeroIncorrecto
incf FSR,f
incf CONT1,f
movlw LongitudNumero3
subwf CONT1,f
btfss STATUS,C
goto ComparaNumero3
movlw Mensaje1
CALL LCD_Mensaje
CALL LCD_Linea2
movlw Mensaje4
CALL LCD_Mensaje
bsf Salida3
goto Retardos
NumeroIncorrecto movlw Mensaje5
CALL LCD_Mensaje
Retardo
call Retardo_4s
call Retardo_2s
InicializaTodo
bcf PORTA,1 ;Desactiva las salidas
bcf PORTA,3
bcf PORTA,4
crlf CONT1 ;Inicializa Contadores
crlf CONT2
crlf CONT3
movlw Tecla
movwf FSR
CALL LCD_Borra
movlw Mensaje0
CALL LCD_Mensaje
INTER1 CALL Teclado_EsperaDejePulsar
bcf INTCON,RBIF
retfie
;Subrutina "Teclado Inicializa"****************************************************
Teclado Inicializa
BSF STATUS,RP0
MOVLW B'11110000'
MOVWF PORTB
BCF OPTION_REG,NOT_RPBU
BCF STATUS,RP0
CALL Teclado_EsperaDejePulsar
;*********************Subrutina Teclado_EsperaDejePulsar***************************************
Teclado_Comprobacion EQU b'11110000'
Teclado_EsperaDejePulsar
movlw Teclado_comprobacion
movwf PORTB
;*******************Subrutina "Teclado_LeeHex"***********************************************
Teclado_LeeHex
CALL teclado_LeeOrdenTecla
BTFSS STATUS,C
GOTO Tecl_FinLeeHex
CALL teclado_ConvierteOrdenEnHex
BSF STATUS,C
;********************Subrrutina Teclado Lee Orden Tecla***************************************
Teclado_LeeOrdenTecla
clrf Tecl_TeclaOrden
movlw b'11111110'
Tecl_FinLeeHex
RETURN
Teclado_ConvierteOrdenEnHex
ADDWF PCL,F
DT 1h,2h,3h,0Fh
DT 4h,5h,6h,0Eh
DT 7h,8h,9h,0Dh
DT 0Ah,0h,0Bh,0Ch
INCLUDE <TECLADO.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
CBLOCK
Num_Tecleado
ENDC
END
-
El código si lo he visto.
Lo que no he visto es que configures como entradas los pines que deben actuar como entradas,mediante la escritura del registro tris con el valor adecuado
-
Me parece que lo intento hacer en la rutina INICIO mediante bcf PORTA,1. Esta instrucción pone a 0 el bit 1 del puerto A, pero no lo configura como salida al bit 1 del puerto A.
Como te dice Modulay, para configurar como salidas o entradas los puertos A y B, deberás hacerlo por medio de TRISA para el puerto A y TRISB para el puerto B, pero antes deberás configurar el banco correspondiente para acceder a ellos.
-
Modulay y leopic!
pero el debe configurar los Fuses, el Quarzo,etc. etc
creo yo 8)
-
También,también.
Buena observación :)
-
pero entonces donde deberia de configurar el puerto a como salida, al principio del programa?? y la puerta b como se configura, como salida o como entrada lo digo xq al tener un teclado con un lcd los pines actuan los 4 bits primeros como entrada creo y los restantes como salida, es asi o no y una vez con esto exo quedaria correcto el programa o fallaria algo mas.
-
Por lo que he logrado entender,tienes conectado el teclado a RB4,RB5,RB6 y RB7...
Siendo así,tendrías que poner a 1 los 4 bits más significativos del registro TRISB,que no recuerdo en este momento en qué posición del mapa de memoria está ubicado...lo puedes mirar en el datasheet del micro.
Por defecto,los registros TRIS están puestos a 0,por lo que todos los puertos quedan configurados como salidas tras un reset.
Puedes hacer la escritura del registro TRISB al comienzo del programa,dentro de alguna de las rutinas de inicialización que tienes.
-
pero vamos a ver las puertas a vale no estan configuradas como salidas eso esta claro pero las puertas b ya estan cuando llamo a la subrutina tecladoincializa, y haciendo eso esta bien el programa voy bien decidme.
-
de todas formas al utilizar solo esas tres patillas como salidad del puerto a las defino ya asi qno se faltaria.gracias
-
Los pines correspondientes del puerto A son las que tienes que configurar manualmente como salida,volcando en el TRISA el valor 11100101 (RA1,RA3 y RA4 como salidas)
-
ok ya configure el trisa de esas patillas como salidas y decidme lo demas estaria correcto
-
Hola elloco: no quiero generar polémica pero eres compañero de clases de este muchacho?
programa para una maquina expendendedora con pic 16f84 (http://www.todopic.com.ar/foros/index.php?topic=20266.msg150762#msg150762)
:D :D :D :D :D :D :D :D :D :D :D
veo que al menos tú te preocupas en resolver el ejercicio!!!
suerte y dale para adelante!!!
-
Hola elloco: no quiero generar polémica pero eres compañero de clases de este muchacho?
programa para una maquina expendendedora con pic 16f84 (http://www.todopic.com.ar/foros/index.php?topic=20266.msg150762#msg150762)
:D :D :D :D :D :D :D :D :D :D :D
veo que al menos tú te preocupas en resolver el ejercicio!!!
suerte y dale para adelante!!!
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
JAJAJA, si es asi, este mundo es pequeño :mrgreen:, Si se lo estas haciendo por lo menos cobrale algo, tu por lo menos tratas de hacerlo y preguntar en donde te estancas, ese es el espiritu del que quiere aprender y que el foro fomenta :-/