Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

19/01/2011 #1


problema variable en un swicth programación en CCS
Hola a todos!!! a ver si me podeis echar una mano con esto:
¿como es posible que el valor de la variable "cont" se me vaya a -3? solo mirad el "SWITCH" y la variable "CONT" lo demás es indiferente.... no entiendo como se puede ir la variable a valores negativos....

#include <16f877.h>
#device adc=10
#fuses xt,nowdt
#use delay(clock=4000000)
#include <lcd.c>
#use standard_io(b)
#use standard_io(d)

void main(){
int16 q;
int16 j;
int l,bitaux,cont=0;
float p;

port_b_pullups(true);
setup_adc_ports(an0);
setup_adc(adc_clock_internal);
set_tris_b(0x00);
lcd_init();
for(;{
set_adc_channel(0);
delay_us(20);
q=read_adc();//Valor ADC
p=5.0*q/1024.0;//Voltage


printf(lcd_putc,"\fcont= %6d",cont);
printf(lcd_putc,"\nVoltage= %01.2fV",p);
delay_ms(100);
if(cont<=0)
cont=0;
switch(cont){

case(0):
output_high(pin_d5);

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
output_low(pin_d0);
delay_ms(500);
output_high(pin_d1);
cont++;
delay_ms(5);}

else
output_high(pin_d0);

break;

case(1):

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
output_low(pin_d0);
delay_ms(500);
output_high(pin_d2);
cont++;
delay_ms(5);}

else if((input(pin_a1)==0)&&(input(pin_a2)==1)){
output_high(pin_d0);
output_low(pin_d5);
delay_ms(500);
output_low(pin_d1);
cont--;
delay_ms(5);}

else{
output_high(pin_d0);
output_high(pin_d5);}


case(2):

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
output_low(pin_d0);
delay_ms(500);
output_high(pin_d3);
cont++;
delay_ms(5);}

else if((input(pin_a1)==0)&&(input(pin_a2)==1)){
output_high(pin_d0);
output_low(pin_d5);
delay_ms(500);
output_low(pin_d2);
cont--;
delay_ms(5);}

else{
output_high(pin_d0);
output_high(pin_d5);}

case(3):

if((input(pin_a1)==1)&&(input(pin_a2)==0)){
output_low(pin_d0);
delay_ms(500);
output_high(pin_d4);
cont++;
delay_ms(5);}

else if((input(pin_a1)==0)&&(input(pin_a2)==1)){
output_high(pin_d0);
output_low(pin_d5);
delay_ms(500);
output_low(pin_d3);
cont--;
delay_ms(5);}

else{
output_high(pin_d0);
output_high(pin_d5);}

case(4):

if((input(pin_a1)==0)&&(input(pin_a2)==1)){
output_high(pin_d0);
output_low(pin_d5);
delay_ms(500);
output_low(pin_d4);
cont--;
delay_ms(5);}

else{
output_high(pin_d0);
output_high(pin_d5);}


}



}}
21/03/2012 #2


Pues no deberia, al desbordarse cont deberia pasar a ser 255 y no un numero negativo, el CCS por default lo considera como un entero sin signo pero aun asi intenta declarar la variable con el modificador unsigned y prueba amigo.
21/03/2012 #3

Avatar de heli

Te faltan los break tras los cases 1,2,3 y 4. También te faltan llaves, pero solo afectan a la claridad del código:
Código:
#include <16f877.h>
#device adc=10
#fuses xt,nowdt
#use delay(clock=4000000)
#include <lcd.c>
#use standard_io(b)
#use standard_io(d)

void main()
{
  int16 q;
  int16 j;
  int l,bitaux,cont=0;
  float p;

  port_b_pullups(true);
  setup_adc_ports(an0);
  setup_adc(adc_clock_internal);
  set_tris_b(0x00);
  lcd_init();
  
  for(;
  {
    set_adc_channel(0);
    delay_us(20);
    q=read_adc();//Valor ADC
    p=5.0*q/1024.0;//Voltage

    printf(lcd_putc,"\fcont= %6d",cont);
    printf(lcd_putc,"\nVoltage= %01.2fV",p);
    delay_ms(100);
    if(cont<=0)
      cont=0;
    switch(cont)
    {
      case(0):
      output_high(pin_d5);

      if((input(pin_a1)==1)&&(input(pin_a2)==0))
      {
        output_low(pin_d0);
        delay_ms(500);
        output_high(pin_d1);
        cont++;
        delay_ms(5);
      }
      else
        output_high(pin_d0);
      break;

      case(1):
      if((input(pin_a1)==1)&&(input(pin_a2)==0))
      {
        output_low(pin_d0);
        delay_ms(500);
        output_high(pin_d2);
        cont++;
        delay_ms(5);
      }
      else
      {  // FALTA 
        if((input(pin_a1)==0)&&(input(pin_a2)==1))
        {
          output_high(pin_d0);
          output_low(pin_d5);
          delay_ms(500);
          output_low(pin_d1);
          cont--;
          delay_ms(5);
        }
        else
        {
          output_high(pin_d0);
          output_high(pin_d5);
        }
      }  // FALTA
      break; // FALTA
      
      case(2):
      if((input(pin_a1)==1)&&(input(pin_a2)==0))
      {
        output_low(pin_d0);
        delay_ms(500);
        output_high(pin_d3);
        cont++;
        delay_ms(5);
      }
      else 
      {  // FALTA  
        if((input(pin_a1)==0)&&(input(pin_a2)==1))
        {
          output_high(pin_d0);
          output_low(pin_d5);
          delay_ms(500);
          output_low(pin_d2);
          cont--;
          delay_ms(5);
        }
        else
        {
          output_high(pin_d0);
          output_high(pin_d5);
        }      
      } // FALTA
      break; //FALTA
      
      case(3):
      if((input(pin_a1)==1)&&(input(pin_a2)==0))
      {
        output_low(pin_d0);
        delay_ms(500);
        output_high(pin_d4);
        cont++;
        delay_ms(5);
      }
      else 
      { // FALTA  
        if((input(pin_a1)==0)&&(input(pin_a2)==1))
        {
          output_high(pin_d0);
          output_low(pin_d5);
          delay_ms(500);          
          output_low(pin_d3);
          cont--;
          delay_ms(5);
        }
        else
        {
          output_high(pin_d0);
          output_high(pin_d5);
        }
      } //FALTA
      break; //FALTA  
      
      case(4):
      if((input(pin_a1)==0)&&(input(pin_a2)==1))
      {
        output_high(pin_d0);
        output_low(pin_d5);
        delay_ms(500);
        output_low(pin_d4);
        cont--;
        delay_ms(5);
      }
      else
      {
        output_high(pin_d0);
        output_high(pin_d5);
      }
      break; //FALTA, pero ya no es necesario
    }
  }
}
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.