Es sieht aus, als würde das Programm, während Akkus eingelegt sind, stets nur folgende Anweisung ausführen:
- Code: Alles auswählen
if(PORTBbits.RB0==1)
{
PORTAbits.RA0=1; /* Ladegerät eingeschalten */
}
Die Anweisungen im "Else-Teil" werden nur ausgeführt wenn das Gerät auf Standby ist, oder?
Ich habe ausserdem den Code mal etwas umformatiert, so dass er mir einigermassen leserlich vorkommt:
- Code: Alles auswählen
#include <p18f2455.h>
#pragma config WDT = OFF
int main(void)
{
int index=0; /* Index des Arrays */
const int zuw_tab[16]={0,1,0,2,0,0,0,3,0,0,0,0,0,0,0,4}; /* Zuweisungstabelle */
TRISB=0xFF; /* PortB-->Eingänge */
TRISA=0x00; /* PortA-->Ausgänge */
TRISC=0x00; /* PortC-->Ausgänge */
PORTA=0x00;
PORTC=0x00;
while(1)
{
if(PORTBbits.RB0==1)
{
PORTAbits.RA0=1; /* Ladegerät eingeschalten */
}
else
{
index=(((!(PORTBbits.RB4))*1) + ((!(PORTBbits.RB5))*2) + ((!(PORTCbits.RC0))*4) + ((!(PORTCbits.RC1))*8));
PORTAbits.RA0=0; /* Ladegerät ausschalten */
if(PORTBbits.RB1==1)
{
/* Strom-1 eingestellt */
PORTAbits.RA5=1;
PORTCbits.RC0=0;
PORTCbits.RC1=0;
}
if(PORTBbits.RB2==1)
{
/* Strom-2 eingestellt */
PORTAbits.RA5=0;
PORTCbits.RC0=1;
PORTCbits.RC1=0;
}
if(PORTBbits.RB3==1)
{
/* Strom-3 eingestellt */
PORTAbits.RA5=0;
PORTCbits.RC0=0;
PORTCbits.RC1=1;
}
switch(zuw_tab[index])
{
case 1:
{
/* 1 Akku eingelegt */
PORTAbits.RA4=1;
PORTAbits.RA3=0;
PORTAbits.RA2=0;
PORTAbits.RA1=0;
break;
}
case 2:
{
/* 2 Akkus eingelegt */
PORTAbits.RA4=0;
PORTAbits.RA3=1;
PORTAbits.RA2=0;
PORTAbits.RA1=0;
break;
}
case 3:
{
/* 3 Akkus eingelegt */
PORTAbits.RA4=0;
PORTAbits.RA3=0;
PORTAbits.RA2=1;
PORTAbits.RA1=0;
break;
}
case 4:
{
/* 4 Akkus eingelegt */
PORTAbits.RA4=0;
PORTAbits.RA3=0;
PORTAbits.RA2=0;
PORTAbits.RA1=1;
break;
}
default:
{
/* Fehler */
return -1;
}
}
}
}
}