Zum einen, wenn sie mit Mikro-Controller arbeiten, in der Regel gibt es einen Weg, um den Wert passen sollte angeben der 8 Pins gehören zum selben Port auf einmal.
Sie sollten versuchen, es aus dem Microcontroller (uC) Handbuch/Datenblatt herauszufinden, indem Sie Stichwort suchen !! Sonst finden Sie eine höllische Zeit (wirklich, ich bin kein Scherz! Zumindest habe ich!) Zu suchen verstreut in aber ein paar der hundert/tausend Seiten des Handbuchs/Datenblatt.
Versuchen Sie dies zuerst und es sollte viel einfacher werden.
Zweitens, in uC zuweisen hohe und niedrige auf Pin in der Regel nicht verschiedene Funktionen zu nehmen, da sie einfach Wert (hoch oder niedrig) auf den gleichen Pin zuweisen.Also, wann immer möglich, sollten Sie die hohen & low-Funktionen in einzelne Funktion kombinieren (da ich nicht weiß, was ist hoch & niedrig, ich kann nicht wirklich weiter helfen, aber Sie sollten diese Möglichkeit zur Erleichterung Ihrer Aufgabe beachten)
Schließlich jedoch für den Fall, kann es nicht für einen oder anderen Grund getan werden, können Sie Ihre C-Code wie folgt vereinfachen kann,
void assignPort(char val, char portBase){
int i = 0;
for (i = 0; i < 8; ++i)
if (val & (1 << i)) //masked your val with shifting 1 to get the current bit
high(portBase + i); //increase your port address by i
else
low(portBase + i);
}
und die Funktion aufrufen, tun einfach
assignPort(0x38, 20); //notice the 38 using 0x for hex indicator while 20 is written as it is (assuming 20 is not hex)
Beachten Sie, dass, wenn Ihre high
und low
Funktionen kombiniert werden können, ist
void highLowCombined(char pinAddress, char highOrLow) { //highOrLow is simply non-zero (high) or zero (low)
//do something based on pinAddress and highOrLow
}
Ihre Aufgabe viel einfacher in High/Low-Funktionen und val Variable in den assignPort
oben Aufruf, da Sie es einfach tun müssen, wie diese
void assignPort(char val, char portBase){
int i = 0;
for (i = 0; i < 8; ++i)
highLowCombined(portBase + i, val & (1 << i)); //only one line is needed here!
}
Jetzt brauchen Sie nur eine Zeile in der for-loop
! Versuch es!
Normalerweise sind solche Pins in einem 8-Bit-Port und Sie 'write_port (port_no, 0x38)'. Wie ist deine Situation anders? –