logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PIC C Compiler - a numeric expression must appear here

daggie_maggie 16 Sty 2011 19:49 2174 4
REKLAMA
  • #1 9015485
    daggie_maggie
    Poziom 10  
    Posty: 11
    witamy!

    takie komunikat otrzymujemy podczas próby kompilacji oprogramowania do mikroprocesora

    input ma wynosić 1 gdy napięcie z czujników CNY70 jest >2,5 a 0 gdy mniejsze, dlatego nie zamieniamy sygnału na analogowy (próbowałyśmy w sumie, ale błąd był ten sam)

    problem pojawia się przy wszystkich if-ach:
    if((value1) && (!value2)) && (value3))

    zamiana int na short int przy deklaracji value nie pomogła

    jak można rozwiązać ten problem?


    #include <16F88.h>
    #use delay(clock=4000000)
    
    #define SEN1 PIN_A0
    #define SEN2 PIN_A1
    #define SEN3 PIN_A2
    #define SER1 PIN_B6
    #define SER2 PIN_B7
    
    //PORTA //0000000
    //TRISA = 0b00000111
    
    
    void delay_min (void);
    void delay_var (char n);
    void pause (void);
    
    void main(){
    
      int value1;
      int value2;
      int value3;
     
     int pos1=127;
     int pos2=127;
     
    setup_ccp1(CCP_PWM);
    //setup_port_a(ALL_ANALOG);
    //setup_adc(ADC_CLOCK_INTERNAL);
    //ANSEL=0b00000001;
    
    
    //CCP1CON=0b01100000;   //- 01100000 - Put into PWM mode - 8 bit mode
    
    while(1)
    {
     value1=input(SEN1);
     value2=input(SEN2);
     value2=input(SEN3);
    
    
    if((value1) & (value2) & (~value3))) //w lewo
    {
    
    output_high(SER1);
    pos1=57;
    delay_var(pos1);
    output_low(SER1);
    
    output_high(SER2);
    pos2=127;
    delay_var(pos2);
    output_low(SER1);
    
    };
    
    if((value1) && (!value2)) && (value3)) //centralnie
    {
    
    output_high(SER1);
    pos1=57;
    delay_var(pos1);
    output_low(SER1);
    
    output_high(SER2);
    pos2=57;
    delay_var(pos2);
    output_low(SER2);
    
    };
    
    if((value1) && (!value2) && (!value3))) //lekko w lewo
    {
    output_high(SER1);
    pos1=57;
    delay_var(pos1);
    output_low(SER1);
    
    output_high(SER2););
    pos2=127;
    delay_var(pos2);
    output_low(SER2);
    };
    
    if((!value1) && (value2)) && (value3)) //w prawo
    {
    output_high(SER1);
    pos1=127;
    delay_var(pos1);
    output_low(SER1);
    
    output_high(SER2);
    pos2=57;
    delay_var(pos2);
    output_low(SER2);
    };
    
    if((!value1)) && (!value2)) && (value3)) // lekko w prawo
    {
    output_high(SER1);
    pos1=127;
    delay_var(pos1);
    output_low(SER1);
    
    output_high(SER2);
    pos2=57;
    delay_var(pos2);
    output_low(SER2);
    };
    pause();
    
    } //od while
    
    
    
    } // od main
    
    
    void delay_min (void)  // 750 uS including overhead
    {
    char n=248;
    do ; while(--n>0);
    delay_ms(1); //  padding to produce precise time
    }
    // delay = 2 + 2 + (n x 3) -1 +1 +2 = 750us  @ 4MHz
    // 2 for call, 2 for preset n, (n x 3)-1 for loop, 1 padding, 2 for return
    
    void delay_var (char n) // adc x 7 uS = 1790us max.
    {
    do {delay_ms(4);} while(--n>0);
    }
    // delay= 2 + 2 + (t x 7) -1 +2 us  @ 4MHz
    
    void pause (void)  // delay between pulses approx 20 ms
    {
    char n;
    for (n=0;n<26;n++)
     {
     delay_min();   // 750 us
     }
    }
    
  • REKLAMA
  • #2 9015613
    Morpheusss
    Poziom 16  
    Posty: 222
    Pomógł: 8
    Ocena: 11
    Zacząłbym od policzenia nawiasów ;)
    w pierwszym IFie jest jeden zbędny ')', dalej nie szukałem.
  • REKLAMA
  • REKLAMA
  • #5 9017814
    daggie_maggie
    Poziom 10  
    Posty: 11
    nawias był problemem :) dzięki
REKLAMA