TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: darck_khronos 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???
-
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....
-
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
#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
-
ya hasta aqui todo va bien pulsando de manera individual
#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??
-
ya llegue hasta aqui
#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
-
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