Stap 5: Programmering poorten
Voordelen van het gebruik van de havens: sneller dan gaan per pin, neemt minder code voor een kleinere programma
Nadelen: Moeilijker om te gebruiken en debuggen
Ik heb willekeurig gekozen poort D als mijn poort.
Aantal fundamentele dingen om te onthouden voor het gebruik van poorten
Variabelen (X moet worden vervangen door de juiste poort letter)
DDRX--Data richting Register-bepaalt welke manier gegevensstroom moet voor elke pin op de poort (0 is input, 1 uitgang)
PORTX--gegevens registreren--bezit welke gegevens is die uitgang/ingang naar de pinnen
PINX--Input pinnen registreren
De pinnen in het register zijn gerangschikt van laag getal = minst significante Bit hoogste getal - meest significante Bit (dus om de pinnen 0-3 te gelijk aan 0 en 4-7 op gelijke 1 zou het PORTD = B11110000)
Voorbeeldcode
int delayTime = 333; Het wordt beter codeerstijl om niet alle hard-gecodeerde constanten zoals in het vorige voorbeeld
byte portD_HIGH = B11111000;
byte portD_LOW = B00000000;
VOID Setup
{
DDRD = DDRD | B11111100; Stelt de pennen voor uitvoer
een blik op wat we hebben net deed
de | symbool wordt gebruikt als bitsgewijze of (als beide bits 1 is, resultaat 1)
Dit gaat via het register, ORing elke bit met het binaire bestand aan de rechterkant van de |
de B maakt de compiler Lees 11111100 als binaire
Dus in samenvatting het pinnen 2-7 naar uitvoer ingesteld en 1 en 2 laat (die soms
hebben speciale functies) alleen
}
void loop
{
PORTD = portD_HIGH; sets pin ledPin High (dus pin 13 is ingesteld op 1)
delay(delayTime); wacht 333ms of ~1/3 sec
PORTD = portD_LOW; sets pin ledPin op laag (pin 13 is dus nu gelijk is aan 0)
delay(delayTime); wacht een ander 333 ms
} //end van de lus-subroutine, dus het nu naar het begin terugkeren zal
Alle 5 LEDs moeten nu knipperen vrolijk weg.