Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Ситуация: не загораются нужные светодиоды. По секциям в отладчике заходит.

Видать, дело во внутренней защёлке. Сурово, но работает, так что если что-то нужно включить наверняка...

MPLAB X 1.51,  XC16 v1.10

было:

#define Yellow_LED_Line 2000

void LED_AccumVoltage(unsigned short MiddleAccuVoltage) //atomare access to middle voltage get
{
static unsigned short InsideCounter=0;
InsideCounter++;
  if(!InsideCounter){
if(MiddleAccuVoltage<Yellow_LED_Line){
    PORTGbits.RG8 = 1; // rg 8 is red
    PORTGbits.RG9 = 1; // rg 9 is green
}
else{
     PORTGbits.RG8 = 0; // rg 8 is red
     PORTGbits.RG9 = 1; // rg 9 is green
    }

   }
return;
}

стало:

#define Yellow_LED_Line 2000

void LED_AccumVoltage(unsigned short MiddleAccuVoltage) //atomare access to middle voltage get
{
static unsigned short InsideCounter=0;
InsideCounter++;
if(!InsideCounter){
if(MiddleAccuVoltage<Yellow_LED_Line){
   while (!PORTGbits.RG8) = 1; // rg 8 is red
   while (!PORTGbits.RG9)PORTGbits.RG9 = 1; // rg 9 is green
}
else{
    while (PORTGbits.RG8)PORTGbits.RG8 = 0; // rg 8 is red
    while (!PORTGbits.RG9)PORTGbits.RG9 = 1; // rg 9 is green
    }

   }
return;
}

}

Но, так как хорошая мысля приходит опосля... надо писать:

LATGbits.LATG8 =1;
LATGbits.LATG9 =1;

и

LATGbits.LATG8 =0;
LATGbits.LATG9 =1;

соответственно.

В общем:

        ПРИ ЧТЕНИИ состояния линии порта (ножки) :        xPORTGbits.RG8;

        ПРИ установке состояния  линии порта (ножки) :   LATGbits.LATG8 = y;

Было найдено здесь: http://electronics.stackexchange.com/questions/28750/on-pic18-series-when-should-i-use-lat-register-and-when-port

"Use PORT to read from a pin, and LAT to write to a pin (and TRIS to change the direction)"

Т.е. "используйте PORT для чтения линии порта (ножки) и LAT для записи (для смены направления чтение/запись используйте TRIS) "

Ещё про LAT можно прочитать тут: http://www.microchip.ru/phorum/read.php?f=2&i=101407&t=101407