Ситуация: не загораются нужные светодиоды. По секциям в отладчике заходит.
Видать, дело во внутренней защёлке. Сурово, но работает, так что если что-то нужно включить наверняка...
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;
соответственно.
В общем:
ПРИ ЧТЕНИИ состояния линии порта (ножки) : x = PORTGbits.RG8;
ПРИ установке состояния линии порта (ножки) : LATGbits.LATG8 = y;
Было найдено здесь:
"Use PORT to read from a pin, and LAT to write to a pin (and TRIS to change the direction)"
Т.е. "используйте PORT для чтения линии порта (ножки) и LAT для записи (для смены направления чтение/запись используйте TRIS) "
Ещё про LAT можно прочитать тут: