Autor Tema: como habilitar bits mas significativos  (Leído 2879 veces)

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

Desconectado davidsena

  • PIC10
  • *
  • Mensajes: 8
como habilitar bits mas significativos
« en: 23 de Junio de 2017, 21:40:36 »
buenas noches , como estan, necesito un poco de ayuda , tengo una pregunta de un taller que estoy realizando de programación en ccs el cual no eh podido resolver
consiste en que por el puerto A introduciré un dato si ese dato es igual a 5 pone el bits 0 del puerto B en 1 y muestra el dato en los bits rb7 hasta rb4 y si el dato no es  5 pone el bit 2 en 1 y debe mostrar el dato que se esta introduciendo.
por favor quien me pueda ayudar se lo agradecería la verdad no se como hacer.
Código: CSS
  1. [font=times new roman][/font]

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como habilitar bits mas significativos
« Respuesta #1 en: 23 de Junio de 2017, 22:53:39 »
Voy a suponer que en el puerto A llega siempre los bits de 0 al 3.
Para leerlos lo voy a hacer con

Código: C
  1. numero = input_a();
Como esto me toma TODOS los bits, y yo quiero solamente los bits del 0 al 3, entonces voy a hacerlo pasar por una AND que me filtre solo los bits que yo quiero.

Código: C
  1. numero = input_a() & 0xF;
Genial ya tengo mi numero. Solo tengo que hacer 2 cosas, La priemra es determinar si numero es mayor o igual a 5.

Código: C
  1. if(numero >= 5)
  2. {
  3.    //Aca lo es
  4. }
  5. else
  6. {
  7.   //Aca no
  8. }

Y luego debo poner esos bits en Rb4 a Rb7, lo que no debo hacer es cambiar los valores de Rb0 a Rb3
Pensemos como los podemos hacer... deberia mover los bits del 0-3 al 4-7, hay 2 formas, una es usar la instruccion SWAP que hace eso, y la otra es rotar el valor a la izquierda 4 veces.

Si hago :

Código: C
  1. output_b((numero << 4));
Pero el puerto B cambiaria todo el valor incluso lo que antes hicimos, lo que podemos hacer es poner primero esto y luego lo otro

Código: C
  1. while(1)
  2. {
  3.    numero = input_a() & 0xF;
  4.    output_b((numero << 4));
  5.    if(numero >= 5)
  6.    {
  7.       //Aca lo es
  8.    }
  9.    else
  10.    {
  11.      //Aca no
  12.    }
  13. }

Solo falta rellenar unas instrucciones mas. Nada mas

Desconectado davidsena

  • PIC10
  • *
  • Mensajes: 8
Re:como habilitar bits mas significativos
« Respuesta #2 en: 24 de Junio de 2017, 16:07:23 »
super muchas gracias , me sirvió mucho , solo que ahora no se como hacer para que el led que activo con la OR no palpite tanto , lo hice así :

#include <16f84a.h>
#fuses xt,nowdt
#use delay (clock=4000000)
#use standard_io(A)
#use standard_io(B)
int numero ;
void main(){
while(true)
{
   numero = input_a() & 0xF;
   output_b((numero << 4));
    if(numero == 5)
   {
   output_b(numero <<4 | 0x01);
   }
   else
   {
    output_b(numero << 4| 0x04);
   }
}
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como habilitar bits mas significativos
« Respuesta #3 en: 24 de Junio de 2017, 16:10:51 »
Es por que el output_b cambia todo el puerto, entonces al poner primero el numero desplazado te pone los bits RB0 a Rb3 en 0, y luego si los activas, por eso se ve que se enciende y apaga continuamente. Lo podes hacer asi:

Código: C
  1. #include <16f84a.h>
  2. #fuses xt,nowdt
  3. #use delay (clock=4000000)
  4. #use standard_io(A)
  5. #use standard_io(B)
  6. int numero ;
  7. void main(){
  8. while(true)
  9. {
  10.    numero = input_a() & 0xF;
  11.     if(numero == 5)
  12.    {
  13.    output_b(numero <<4 | 0x01);
  14.    }
  15.    else
  16.    {
  17.     output_b(numero << 4| 0x04);
  18.    }
  19. }
  20. }

Desconectado davidsena

  • PIC10
  • *
  • Mensajes: 8
Re:como habilitar bits mas significativos
« Respuesta #4 en: 24 de Junio de 2017, 16:18:59 »
si ahora si funciono correcto, muchísimas gracias por ayudarme

Desconectado davidsena

  • PIC10
  • *
  • Mensajes: 8
Re:como habilitar bits mas significativos
« Respuesta #5 en: 25 de Junio de 2017, 18:41:51 »
me pidieron realizar ese mismo ejercicio con una AND eso es posible ? 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como habilitar bits mas significativos
« Respuesta #6 en: 25 de Junio de 2017, 19:43:58 »
Una sola AND para todo? o una AND para que parte?

Desconectado davidsena

  • PIC10
  • *
  • Mensajes: 8
Re:como habilitar bits mas significativos
« Respuesta #7 en: 27 de Junio de 2017, 00:14:49 »
para todo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como habilitar bits mas significativos
« Respuesta #8 en: 27 de Junio de 2017, 13:38:40 »
Una AND sola para todo es imposible, me refiero a hacer todo eso con una sola operacion.

Si o si tenes que rotar debido a que los bits de entrada del PORTA son del 3 al 0, y vos debes ponerlo en el 7 al 4. Podes hacer 2 cosas, rotarla o utilizar la funcion swap ( que intercambia los nibbles en el byte ).

Ahora debemos asegurarnos que cuando es 5 active RB0 y sino RB2.

Supongamos por el momento que los valor del PORTA sigue en los bits del 3 al 0. Todas estas posibilidades tenemos:

0101 = 5
0100 = 4
0011 = 3
0010 = 2
0001 = 1
0000 = 0

Si utilizo una AND lo unico que hago es dejar pasar los 1, y deberia dejar pasar el 1 del RB0 o que corresponde al RB2, el problema esta que para RB0 hay 3 numeros que me darian un resultado positivo ( 5, 3 y 1 ) y para el 1 de RB2 serian 2 resultado positivos (5 y 4 ) Asi que no podria discriminar CUAL es con solo una AND.

En fin, es imposible con un sola AND, a no ser que falte algun dato mas que no se tiene en cuenta.
Se imposibilita ya simplemente porque necesitas rotar o usar el swap, ya esto invalida lo de usar una sola AND.

Desconectado davidsena

  • PIC10
  • *
  • Mensajes: 8
Re:como habilitar bits mas significativos
« Respuesta #9 en: 28 de Junio de 2017, 18:18:14 »
es correcto , eso que me explicaste
el instructor nos estaba probando , pero yo no sabia así que le dije eso que tu me explicaste y me dijo que efectivamente era eso

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:como habilitar bits mas significativos
« Respuesta #10 en: 28 de Junio de 2017, 18:56:06 »
es correcto , eso que me explicaste
el instructor nos estaba probando , pero yo no sabia así que le dije eso que tu me explicaste y me dijo que efectivamente era eso

Lo importante no es que lo repitas sin entenderlo, sino que entiendas como hacerlo y las cosas que podes hacer con las funciones, aprendiendo como es que las operaciones funcionan y un poco de imaginacion vas a encontrar la solucion a cualqueira de tus problemas.


 

anything