Ich habe die 8051 seit etwa zwei Monaten programmiert und bin ein wenig Neuling in der C-Sprache. Ich arbeite gerade mit Flash-Speicher, um es zu lesen, zu schreiben, zu löschen und zu analysieren. Ich arbeite gerade an der Schreibphase und eine der Aufgaben, die ich ausführen muss, ist die Angabe eines Adressstandorts und das Füllen dieses Standorts mit Daten, dann das Inkrementieren zum nächsten Ort und das Füllen mit ergänzenden Daten. So weiter und so weiter, bis ich das Ende erreiche.C - Inkrement 18 Bits in C 8051
Mein Dilemma ist, ich habe 18 Adressenbits zu spielen und haben derzeit drei Bytes für diese 18 Bits zugeordnet. Gibt es trotzdem, dass ich diese 18 Bits zu einem int
oder unsigned int
kombinieren und so inkrementieren könnte? Oder ist meine einzige Option, das erste Byte zu inkrementieren, und wenn dieses Byte auf 0x00
rollt, das nächste Byte inkrementieren und wenn das nächste übergeht, inkrementieren Sie das nächste?
Ich habe derzeit:
void inc_address(void)
{
P6=address_byte1;
P7=address_byte2;
P2=address_byte3;
P5=data_byte;
while(1)
{
P6++;
if(P6==0x00){P7++;}
else if(P7==0x00){P2++;}
else if(P2 < 0x94){break;} //hex 9 is for values dealing with flash chip
P5=~data_byte;
}
}
Haben Sie Bitfelder zur Verfügung? OK, also wurde die 8051 an der CT-Grenze fast ausgelöscht und hat weniger RAM als ein flatlined Goldfisch, aber wenn Sie 18 Bits von 24 für ein Bitfield int var verwenden können, könnte das tun ... – ThingyWotsit
Ihr Inkrement sieht fehlerhaft aus Wenn P6 und P7 beispielsweise bei 255 beginnen, erhalten Sie P6 und p7 = 1, wenn beide Null bleiben sollen. Die Schleife ist nicht notwendig - die "Übertragstests" sollten verschachtelt sein. – Clifford
Es wäre auch viel besser, die Adressvariable zu erhöhen und sie dem Port zuzuweisen, anstatt sie dem Port zuzuweisen und die Portwerte zu inkrementieren. – Clifford