Autor Tema: ¿como dividir los pines de un puerto en dos?  (Leído 10356 veces)

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

Desconectado pachopic

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 209
RE: ¿como dividir los pines de un puerto en dos?
« Respuesta #15 en: 11 de Octubre de 2004, 00:39:00 »
HOLA A TODOS :

la resta es entre dos numeros de 4 bits, pero debo visualizar el resultado negativo tambien, intente lo que dices con abs() y no funcionó:
Codigo:

#include <16F877A.h>     // DISPOSITIVO A PROGRAMAR
#include <stdlib.h>

/////////////////declaracion de variables y configuracion///////////////////////

#fuses HS,NOWDT,NOPROTECT        // FUSIBLES DE CONFIGURACION
#use  delay(clock=4000000)        // XTAL OSCILADOR EXTERNO 4MHZ              // DIRECION DE  DE PORTC
#byte portb=6
#byte portc=7
#byte portd=8
                 
signed int a,b,c;
/////////////////////////////// PROGRAMA PRINCIPAL//////////////////////////////
 void main(void)
  {
   port_b_pullups(true);      // HABILITAMOS RESISTENCIAS PULL-UP                           //
   set_tris_b(0b00001111);     // 4pines de portb como entradas
   set_tris_c(0b00000000);     // portc todo salidas
   set_tris_d(0b00001111);     // 4pines de portd como entradas
///////////////////REALIZA LA RESTA DE a Y b////////////////////
  while (true)
  {
       a=portb;                //   a= valor de portb
       b=portd;                //   b=valor de portd
       c=a-b;                  //   c= a la resta de ay b
       if (c<0)                //    si c es negativo
       portc=abs(c);           //   obtenga su val abs
       else
       portc=c;                //   si no es negativo muestre el num
       
       
   }
  }



deberia visualizarse el numero negativo como positivo ,en 4leds pero no lo hace....

GRACIAS

EXITOS...

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: ¿como dividir los pines de un puerto en dos?
« Respuesta #16 en: 11 de Octubre de 2004, 03:23:00 »
Hola, mira, he estado simulando tu programa en el proteus y funciona perfectamente....no entiendo si es esto lo que tu realmente quieres.... si no es así, hazlo saber ....

Ahora mismo tu programa está bien, solo tienes que hacer unos pequeños cambios....

Codigo:

#include <16F877A.h>     // DISPOSITIVO A PROGRAMAR
#include <stdlib.h>

/////////////////declaracion de variables y configuracion///////////////////////

#fuses HS,NOWDT,NOPROTECT        // FUSIBLES DE CONFIGURACION
#use  delay(clock=4000000)        // XTAL OSCILADOR EXTERNO 4MHZ              // DIRECION DE  DE PORTC
#byte portb=6
#byte portc=7
#byte portd=8
                 
signed int a,b,c;
/////////////////////////////// PROGRAMA PRINCIPAL//////////////////////////////
 void main(void)
  {
   //port_b_pullups(true);      // HABILITAMOS RESISTENCIAS PULL-UP                           //
   set_tris_b(0b00001111);     // 4pines de portb como entradas
   set_tris_c(0b00000000);     // portc todo salidas
   set_tris_d(0b00001111);     // 4pines de portd como entradas
///////////////////REALIZA LA RESTA DE a Y b////////////////////
  while (true)
  {
       a=portb & 0x0F;                //   a= valor de portb
       b=portd & 0x0F;                //   b=valor de portd
       c=a-b;                  //   c= a la resta de ay b
       if (c<0)                //    si c es negativo
         portc=abs(c);
//aqui podrias poner una asignacion a un pin libre
//para marcar el signo...
       else
         portc=c;                //   si no es negativo muestre el num
       
       
   }
  }




Ahora mismo este codigo hace una resta de la parte baja del puerto B con la parte baja del puerto d y lo representa en la parte baja del puerto C, lo único que te queda es hacer una asignación a un bit cualquiera de los que te sobren, para representar el signo.
Porque ahora mismo tanto si restas 9-6 ó 6-9 te representará el numero 3 (por poner un ejemplo de resta cualquiera).

Ayer lo lei mal y te pido disculpas por ello, yo pense que ibas a restar un numero del uno al 15 pero veo que solo quieres restar una cifra de un digito....se me fue la pelota.... pero mejor,así es más fácil...

Usas el proteus?, si quieres te envío la simulación..... para que lo compruebes..... (yo tengo la version 6.5)

Repito, si no es esto lo que quieres, o ves que todavia no te convence el programa, nos lo dices, a ver si podemos hacer algo...

Un saludo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: ¿como dividir los pines de un puerto en dos?
« Respuesta #17 en: 11 de Octubre de 2004, 04:06:00 »
Aún así, si quieres representar el 9 vas a necesitar más de 3 bits, porque con tres bits se puede llegar hasta el 7...

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: ¿como dividir los pines de un puerto en dos?
« Respuesta #18 en: 11 de Octubre de 2004, 04:41:00 »
Efectivamente Nocturno, representar el 9 con tres bits, es harto dificil, pero según tiene el programa, usa 4 bits, siempre usa los 4 bits mas bajos de los puertos.... entonces no tendra problemas para representar el 9, pero ahora tiene el problema del signo, como lo va a representar....eso depnde de él, desde luego si solo va a usar los pines que tiene ahora (le sobran unos cuantos...), lo tiene bastante fácil..., pero como mínimo necesitará un bit más para representarlo....

Un saludo.

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: ¿como dividir los pines de un puerto en dos?
« Respuesta #19 en: 11 de Octubre de 2004, 05:10:00 »
Eso es lo que intentaba dar a entender, pero quizas ha sido culpa mia el decir "harto dificil", en lugar de decir tajantamente que no se podia, pero bueno como ya l había comentado en algún mensaje mas arriba la impsoibilidad de hacerlo pos no le dí importancia....

Para que quede claro, el programa ahora mismo representa de 0 a 9 (4 bits, los bits de menor peso del portc) y le falta representar el signo (quinto bit) que tendrá que decidir en que pin lo va a señalizar.

Saludos.

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: ¿como dividir los pines de un puerto en dos?
« Respuesta #20 en: 02 de Diciembre de 2008, 09:53:37 »
Hola todos!. Mi consulta es parecida a la primera del hilo pero la diferencia es que yo pretendo dividir el puerto como salidas.
Quiero hacer:

output_b(parte_alta)
o
output_b(parte_baja)

y que sólamente se modifiquen los 4 bits correspondientes.
Alguna idea? Gracias
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: ¿como dividir los pines de un puerto en dos?
« Respuesta #21 en: 02 de Diciembre de 2008, 11:36:41 »
Me respondo.
Lo resolvi asi

char motor_1, motor_2

         motor_1=el valor deseado;
         motor_2=el valor deseado;
         output_b(motor_1 | (motor_2 << 4));

Vamos a ver como se comporta..
salduos!
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"