Autor Tema: pulsadores independientes en puertos  (Leído 1739 veces)

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

Desconectado Iria

  • PIC10
  • *
  • Mensajes: 7
pulsadores independientes en puertos
« en: 14 de Junio de 2009, 11:47:12 »
tengo otra duda.... :( :( :( :( :(

si tengo un teclado con 16 teclas independientes,  como 16 pulsadores conectados al micro, y quiero transmitir a traves del canal serie el nº de decenas y el nº de unidades que representa cada tecla..... como puedo hacer ?¿?¿?¿?¿?¿? porque un 00000001 en P4 no representa el 00 que quiero transmitir a través del canal serie;  supongo que habrá que hacer una  tabla con las combinaciones del puerto y el numero que quieres transmitir o algo, pero no se como hacerla; como actualizar los punteros etc.....



espero que alguien me ayude por favor :( :( :( :( :(


Muchas gracias

Desconectado sycho

  • PIC16
  • ***
  • Mensajes: 195
Re: pulsadores independientes en puertos
« Respuesta #1 en: 14 de Junio de 2009, 12:22:38 »
Si coges los 16bits como si fueran un valor y le haces el logaritmo en base2 tendrás un número que va de 0 a 15. Pero computar un log2 probablemente te lleve más ciclos que hacer algo así:

Código: [Seleccionar]
salida=0;
while(entrada!=1)
{
   entrada=entrada/2;
   salida++;
}

Lo que básicamente va dividiendo entre 2 hasta reducir el número a 1. El valor de salida son las divisiones que han sido necesarias: ejemplo, al pulsar la tecla más alta (1000000000000000=32768) necesitas hacer 15 divisiones consecutivas para obtener un 1. Creo que es mucho más optimo, pues en asm las divisiones entre 2 se pueden hacer desplazando 1 bit hacia la derecha...
« Última modificación: 14 de Junio de 2009, 12:31:38 por sycho »

Desconectado Iria

  • PIC10
  • *
  • Mensajes: 7
Re: pulsadores independientes en puertos
« Respuesta #2 en: 14 de Junio de 2009, 13:35:43 »
gracias por contestarme tan pronto :)

entiendo lo que quieres decir, pero mi micro (SA80C537 de intel)   solo tiene una instrucción de división, que es DIV AB, donde A y B son de 8bits..... guarda el cociente en A y el resto en B

Desconectado sycho

  • PIC16
  • ***
  • Mensajes: 195
Re: pulsadores independientes en puertos
« Respuesta #3 en: 14 de Junio de 2009, 13:58:49 »
Pues coges primero los 8 bits menos significativos, compruebas si ese byte es mayor que cero, y si lo es haces la operación anterior. El numero de divisiones será tu resultado.
Si el byte formado por los 8bits menos significativos es 0, coges los 8 más significativos, haces la misma operación y al resultado le sumas 8.

Entiendo que estás programandolo en ensamblador. Si es así tienes que tener una instrucción para realizar desplazamientos, revisa tu documentación, creo que desplazar a la derecha (dividir) era SAR. Sino usa DIV... pero seguramente consuma más ciclos de ejecución.

Desconectado Iria

  • PIC10
  • *
  • Mensajes: 7
Re: pulsadores independientes en puertos
« Respuesta #4 en: 14 de Junio de 2009, 14:05:48 »
De acuerdo,  entiendo;  puedo ir desplazando los bits a la derecha por ejemplo y contar el numero de desplazamientos hasta que el primer bit se ponga a 1.

Muchas gracias por todo lo que me has dicho, me has sido de gran ayuda :) :) :) :) :)

Desconectado sycho

  • PIC16
  • ***
  • Mensajes: 195
Re: pulsadores independientes en puertos
« Respuesta #5 en: 14 de Junio de 2009, 14:08:37 »
Exacto, ya que una división entre 2 no es más que desplazar una posición hacia la derecha  :)
Al final lo hice más complicado de lo que era  :D


 

anything