TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Trust en 11 de Noviembre de 2007, 05:40:32

Título: Instruccion Chr en Mikrobasic
Publicado por: Trust en 11 de Noviembre de 2007, 05:40:32
Hola, estoy comunicando el pc con una placa que lleva un 16f876 y un lcd y quiero mostrar los caracteres que envio desde el pc en el lcd. Uso VB 6 en el pc y le envio al pic caracteres y el pic muestra en el lcd numeros y no letras. Se que debo de usar la instruccion Chr de Mikrobasic para obtener la letra a partir del numero pero no se como hacerlo. He probado ya muchas cosas y no me funciona. Aqui os pongo el codigo.

Código: [Seleccionar]
program Lcd_puetoserie
dim dato_recibido as byte
dim textolcd as char[20]

main:
adcon1=7
portc=0
porta=0
trisc=%10000000
usart_init(9600)

while true
if usart_data_ready=1 then
dato_recibido=usart_read
bytetostr(dato_recibido,textolcd)

lcd_config(porta,5,3,2,1,portc,0,1,5)
lcd_cmd(lcd_clear)
lcd_cmd(lcd_cursor_off)
lcd_out(1,1,textolcd)
end if
wend

end.


Saludos.


Título: Re: Instruccion Chr en Mikrobasic
Publicado por: navaismo en 11 de Noviembre de 2007, 19:36:27
Hola Trust el comando CHR funciona asi:

Chr
Prototipo: sub function Chr(dim code as byte) as char

Regresa: Regresa un carácter asociado con el carácterespecifico de code

Descripción: Regresa un carácter asociado con el carácter especifico de code. Números de 0 a
31 son los códigos ASCCI no imprimibles

Esta es una rutina inline; el código se genera en el lugar de la llamada, para que la
llamada no esté contra el límite de llamadas anidadas.

Requiere: Nada

Ejemplo: c = Chr(13) ' regresa un retorno de carro (enter)

Te dejo este enlace para que descargues  una parte del manual de MKB en español (http://mx.geocities.com/navaismo/MANESMKB.zip)

Y sino en la web del master Nocturno encontraras el  mirror de este mismo manual.
Título: Re: Instruccion Chr en Mikrobasic
Publicado por: Trust en 11 de Noviembre de 2007, 22:14:45
Hola Navaismo, excelente traduccion del manual de Mikrobasic. Buen trabajo.  :)

Estoy haciendo varias pruebas para llegar a saber como hacerlo pero de momento no me funciona.
Pongo un codigo de los muchos que he probado.

Código: [Seleccionar]
program Prueba_Chr_6
dim n as char
dim cc  as byte
dim lcd as char[20]


main:
adcon1=7
portc=0
porta=0
trisc=%10000000
usart_init(9600)

while true
lcd_config(porta,5,3,2,1,portc,0,1,5)
lcd_cmd(lcd_clear)
lcd_cmd(lcd_cursor_off)
n=99
cc=chr(n)
bytetostr(cc,lcd)
lcd_out(1,1,lcd)
wend

end.




le asigno a n el valor 99 y hago una conversion para que el lcd pueda mostrar ese valor en la pantalla. Pues este codigo me da error de compilacion, en cambio si a la linea cc=chr(n) la cambio por cc=chr(99) si que puedo compilar.
No se si es que estoy declarando las variables con un tipo de datos incorrecto o que pero la cuestion es que he probado muchos tipos de variables y sigue sin funcionarme.  :(

El objetivo que quiero conseguir es que desde el pc usando VB6 le envie una letra y mas adelante palabras y que estas me aparezcan en el lcd. Parece sencillo pero no me sale y he estado buscando mucho en el foro y no encuentro ningun codigo que realice la funcion que yo busco.

Tambien he estado buscando en el foro de Mikroe y encontre un tema con un usuario que tiene el mismo problema que yo pero no hay respuesta.

Saludos.


Título: Re: Instruccion Chr en Mikrobasic
Publicado por: Trust en 12 de Noviembre de 2007, 15:07:17
Hola ya lo tengo solucionado. No hace falta usar la instruccion chr que no he conseguido hacerla funcionar metiendole una variable por ejemplo: cc=chr(x), pero si funciona asi cc=chr(99). pero clara la segunda opcion no me vale porque es una constante y lo que yo voy a enviar nunca va a ser datos fijos sino variables.  :D

En vez de todo este lio de conversiones he utilizado esto: lcd_chr(1,1,dato_recibido), la variable es la que se obtiene directamente de usart_read.

Aqui os pongo el codigo:


Código: [Seleccionar]
program Lcd_puetoserie
dim dato_recibido as byte

main:
adcon1=7
portc=0
porta=0
trisc=%10000000
usart_init(9600)

while true
if usart_data_ready=1 then
dato_recibido=usart_read

lcd_config(porta,5,3,2,1,portc,0,1,5)
lcd_cmd(lcd_clear)
lcd_cmd(lcd_cursor_off)
lcd_chr(1,1,dato_recibido)
end if
wend

end.

Ahora ya se enviar y recibir letras sueltas y voy a probar a enviar palabras.
 :mrgreen:

Saludos.