Autor Tema: Ayuda con unos IF pi16f877  (Leído 1731 veces)

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

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Ayuda con unos IF pi16f877
« en: 03 de Septiembre de 2009, 21:14:32 »
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#BYTE TRISB = 0x86
#BYTE PORTB = 0x06 
#BYTE OPTION_REG = 0x81
#include <LCD.C>
void main()
{
    lcd_init();
    do {
 
   if (input(PIN_B0) == 0) { 
       lcd_putc("Mensaje 1");     }
   if (input(PIN_B0) == 1) { 
       lcd_putc("Mensaje 2");     }
   if (input(PIN_B1) == 1) { 
       lcd_putc("Mensaje 3");     }
   if (input(PIN_B2) == 1) { 
       lcd_putc("Mensaje 4");     }
   if (input(PIN_B3) == 1) { 
       lcd_putc("Mensaje 5");     }       
   if (input(PIN_B4) == 1) { 
       lcd_putc("Mensaje 6");     }       
   if (input(PIN_B5) == 1) { 
       lcd_putc("Mensaje 7");     }
   if (input(PIN_B6) == 1) { 
       lcd_putc("Mensaje 8");     }
   if (input(PIN_B7) == 1) { 
       lcd_putc("Mensaje 9");     }   
      }
     while (TRUE);
}
El problema aqui es que siempre me imprime todos los letreros y solo quiero que me imprima siempre primero el Mas alto y ya si se apaga que imprima el menos significativo que le sigue un ejemplo

estan prendidos

Rb0
Rb6
Rb7
En la Lcd solo muestra el Rb7 pero si este se apaga que me muestre el Rb6
Alguna idea de cual sea el problema con mis If???

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Ayuda con unos IF pi16f877
« Respuesta #1 en: 03 de Septiembre de 2009, 21:34:04 »
por que a lo mejor tendras que meter los if anidados....

por que no pruebas buardando el valor del byte del puerto b y con un switch lo visualizas?

#byte portb = 0x06;

int puerto_b;
puerto_b= portb;

switch(puerto_b){
      case 0: ....
                  break;
      case 1:.....

y asi sucesibamente....
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Ayuda con unos IF pi16f877
« Respuesta #2 en: 03 de Septiembre de 2009, 21:51:23 »
por que a lo mejor tendras que meter los if anidados....

por que no pruebas buardando el valor del byte del puerto b y con un switch lo visualizas?

#byte portb = 0x06;

int puerto_b;
puerto_b= portb;

switch(puerto_b){
      case 0: ....
                  break;
      case 1:.....

y asi sucesibamente....

Gracias por la idea mas que ya lo hice y el detalle es que me lo reconoce como binario

Código: [Seleccionar]
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#BYTE TRISB = 0x86
#BYTE PORTB = 0x06 
#BYTE OPTION_REG = 0x81
#include <LCD.C>
void main()
{
    lcd_init();
    do {
      int puerto_b;
      puerto_b= portb;
      switch(puerto_b){
      case 0:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 1");
      break;
      case 1:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 2");
      break;   
      case 2:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 3");
      break;
      case 3:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 4");
      break;   
      case 4:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 5");
      break;
      case 5:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 6");
      break;   
      case 6:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 7");
      break;
      case 7:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 8");
      break;   
            }
      }
     while (TRUE);
}
Las impreciones me las Hace binarias y si primo uno Mayor se queda con el Menos significativo

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Ayuda con unos IF pi16f877
« Respuesta #3 en: 03 de Septiembre de 2009, 23:23:20 »
ya hasta aqui todo va bien pulsando de manera individual
Código: [Seleccionar]
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#BYTE TRISB = 0x86
#BYTE PORTB = 0x06 
#BYTE OPTION_REG = 0x81
#include <LCD.C>
void main()
{
    lcd_init();
    do {
      int puerto_b;
      puerto_b= portb;
      switch(puerto_b){
      case 0b00000000:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 1");
      break;
      case 0b00000001:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 2");
      break;   
      case 0b00000010:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 3");
      break;
      case 0b00000100:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 4");
      break;   
      case 0b00001000:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 5");
      break;
      case 0b00010000:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 6");
      break;   
      case 0b00100000:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 7");
      break;
      case 0b01000000:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 8");
      break;   
      case 0b10000000:
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 9");
      break;       
            }
      }
     while (TRUE);
}
El unico problema es que digamos si quito el Rb7 y estan prendidos los demas me mantiene la orden de RB7 como podria yo cambiar esto por If??

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Ayuda con unos IF pi16f877
« Respuesta #4 en: 04 de Septiembre de 2009, 00:54:07 »
ya llegue hasta aqui

Código: [Seleccionar]
#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#BYTE TRISB = 0x86
#BYTE PORTB = 0x06 
#BYTE OPTION_REG = 0x81
#include <LCD.C>
void main()
{
    lcd_init();
    do {
      if (portb==0b00000000){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 1");}
     
      else if (portb==0b00000001){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 2");}
     
      else if (portb<=0b00000010){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 3");}
 
      else if (portb<=0b00000011){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 4");}
     
      else if (portb<=0b00000111){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 5");}

      else if (portb<=0b00001111){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 6");}
     
      else if (portb<=0b00011111){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 7");}
     
      else if (portb<=0b00111111){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 8");}     

      else if (portb<=0b01111111){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 9");}
ya nada mas el detalle esta aqui en esta parte

      else if (portb<=0b00000010){
      lcd_gotoxy(1,2);
      lcd_putc("Mensaje 3");}
por ke se me salta al precionar los botones

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Ayuda con unos IF pi16f877
« Respuesta #5 en: 04 de Septiembre de 2009, 18:51:52 »
no esta bien anidado ese es el problema....
lcd_gotoxy(1,2);
if (portb==0b00000000) lcd_putc("Mensaje 1");
      else {
          if (portb==0b00000001) lcd_putc("Mensaje 2");
          else{
              if (portb<=0b00000010) lcd_putc("Mensaje 3");
               else{
                   if (portb<=0b00000011) lcd_putc("Mensaje 4");
                    else{
                        if (portb<=0b00000111) lcd_putc("Mensaje 5");
                         else{
                             if(portb<=0b00001111) lcd_putc("Mensaje 6");
                            else{
                                 if(portb<=0b00011111) lcd_putc("Mensaje 7");
                                 else {
                                      if (portb<=0b00111111) lcd_putc("Mensaje 8");
                                     else if (portb<=0b01111111) lcd_putc("Mensaje 9");
                                        }
                                    }
                                 }
                              }
                          }
                      }
                 }
aunque si quieres que te de el valor con mayor peso, deberias de cambiar el orden al reves por que de esa forma terminara el if y saldra sin seguir haciendo comprobaciones
« Última modificación: 04 de Septiembre de 2009, 18:54:12 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...


 

anything