Autor Tema: Como leo un pin de un puerto?  (Leído 4111 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
Como leo un pin de un puerto?
« en: 26 de Agosto de 2004, 07:39:00 »
Amigos:
Como leo en asm el estado de un pin del puerto B (por ejemplo) para enviarlo por la usart.
Esto es con un 16F877A a 20Mhz.
 
Saludos


Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Como leo un pin de un puerto?
« Respuesta #1 en: 26 de Agosto de 2004, 08:43:00 »
Asi:

   btfsc portA.0
**aqui instruccion de salto si el bit es 1
**aqui continua el programa, porque el bit estaba en cero

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Como leo un pin de un puerto?
« Respuesta #2 en: 26 de Agosto de 2004, 08:55:00 »
De acuerdo:
Pero para enviar el estado por la uart?.
O sea si es 0 o si es 1 quiero enviarlo igual. como cargo el estado del bit en la uart?.

Saludos

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Como leo un pin de un puerto?
« Respuesta #3 en: 26 de Agosto de 2004, 13:35:00 »
La UART transmite un Byte completo, yo diria que tomes el estado del port completo y lo transmitas, del otro lado solo estudias el bit necesario....
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Como leo un pin de un puerto?
« Respuesta #4 en: 26 de Agosto de 2004, 13:46:00 »
MGL:
Ahi justamente es donde comienza mi problema.
Capturo el dato del puerto y lo envio al programa, en VB, del PC .
El dato que envía lo puedo ver con terminal. Y es una carita feliz , un corazon, un rombo y ese tipo de caracteres que el VB no reconoce.
Y hasta ahi no mas llegue. Porque no se como traducirlo, pues ni el mismo VB lo considera.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Como leo un pin de un puerto?
« Respuesta #5 en: 26 de Agosto de 2004, 13:51:00 »
Mucho no te puedo ayudar con VB, pero se que tiene funciones de conversion muy buenas, que te permiten interpretar bien un dato venido por el serial y ademas aislar un bit de los demas...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Como leo un pin de un puerto?
« Respuesta #6 en: 26 de Agosto de 2004, 14:00:00 »

Pero, en el pic  ¿se puede tomar la lectura del puerto y enviarlo directamente como decimal?

Desconectado ma-tec

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 76
    • www.matec.es.tl
RE: Como leo un pin de un puerto?
« Respuesta #7 en: 26 de Agosto de 2004, 14:16:00 »
hola te sugiro
que leas el pin de la puerta
si es cero envies un caracter que vb lo identifique
ejemplo

   btfss porta,0
    b      cero
    b      uno


cero   movlw  "0"
         call        sale 232
         b    xxx

cero   movlw  "1"
         call        sale 232
         b   xxx

y tu programa espera el 1 o 0

lo puedes mandar con (0D)  (0A)

LA CLAVE DEL EXITO ES SABER
PARA DONDE VA LA GENTE Y
LLEGAR PRIMERO.

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Como leo un pin de un puerto?
« Respuesta #8 en: 26 de Agosto de 2004, 15:00:00 »
Hola

En VB , cuando te llegue los datos, usa esta funcion con cada uno:

y=asc(dato)

ahi tienes el valor del caracter ASCII , luego implementa una rutina de decimal a binario, y punto.

salu2

PD:
------------ ENTRADA = Y(dec)   SALIDA= X[7...0] (bin)
dim x(0 to 7) as integer

for g=7 to 1 step -1
x(g)=y mod 2
y=y/2
next g
x(0)=y
-------------




Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Como leo un pin de un puerto?
« Respuesta #9 en: 26 de Agosto de 2004, 15:10:00 »
ma-tec: Muy ingenioso, gracias.

Manex: Es lo que necesito, gracias. El pero radica en que

dato = Asc(dato_in_232)

pero el programa se termina diciendo:

Error 5 "llamada a procedimiento o argumentos no validos"

pues el caracter de rombo, trebol, etc. de ascii, el VB no lo reconoce y se termina.


Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Como leo un pin de un puerto?
« Respuesta #10 en: 26 de Agosto de 2004, 15:16:00 »
Lo siento pero a mi me funcionan perfectamente esos procedimientos... tal vez sea un problema de diseño... por cierto coges los datos directamente de mscomm? Prueba a poner una variable intermedia.
He probado

Private Sub Form_Load()
For x = 1 To 255
g = Chr$(x)
h = Asc(g)
list2.AddItem g
List1.AddItem h
Next x

Y funciona perfectamente, en list2 no aparecen muchos caracteres, pero en List1 aparecen todos los numeros del 1 al 255, osea que no ha habido ningun error en la conversion.

salu2

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Como leo un pin de un puerto?
« Respuesta #11 en: 26 de Agosto de 2004, 15:27:00 »
Si, los tomo directamente del comm. ¿Como uso una variable intermedia?


Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Como leo un pin de un puerto?
« Respuesta #12 en: 26 de Agosto de 2004, 17:49:00 »
La fuente de tu error es, seguramente, que cuando lees mscomm1.input, coges mas de un caracter, y la funcion ASC vale solo para un caracter. Podrias cambiar la propiedad inputlen a 1 , o sino, cortar los datos recibidos en unidades, y tratarlas uno a uno.

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Como leo un pin de un puerto?
« Respuesta #13 en: 26 de Agosto de 2004, 19:39:00 »
Manex:
Parece que estas en lo correcto.
Efectivamente se caia cuando leia mas de un caracter. O cuando no leia nada tambien (parece)

Consulta:
El pic envia cada 1 seg. aprox. un dato. ¿Como le digo al programa de VB que vaya a buscar ese dato solamente?

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Como leo un pin de un puerto?
« Respuesta #14 en: 27 de Agosto de 2004, 04:40:00 »
No, el error es muy evidente. ASC( ) te dará error , y ASC(abc) tambien.

Respecto a la consulta, podrias hacer polling mediante un timer, o de lo contrario, mediante interrupcion, de modo que cuando llegue algun dato, salte a una subrutina.

salu2