"Home Alone" inbrottstjuv avskräckande / användning Attiny13 att köra en Steppermotor och en Servo (3 / 5 steg)
Steg 3: "hem ensam": programvaran
Ovanstående program visar hur man kör min särskilda stepper och du kan behöva ändra värdena skrivs till PORTB om du har anotehr stepper. Som Attiny13 är ganska liten i minnet och också ger inte alltför många stift, missar programmet lite mer elegans. Skriva direkt till PORTB är OK, men i detta fall också skriver en "0" till PB4 och PB5. Pb5 är inte mycket av ett problem, men du kanske vill använda PB4. I mitt fall är det där jag satte min servo och som verkligen orsakar inte ett problem som jag inte använder dem samtidigt.
Men om du vill använda en annan mikrokontroller som en 328 och du vill undvika att skriva till PB4 och PB5 och PB6 och PB7, använda en mask att bara skriva att lite 0-3. Masken att d.v.s. B00001111.
Vill du sedan anger bitar bitar 0 och 2, går så här:
I stället för PORTB = 5, staten: PORTB = (PORTB & ~ mask) | (B00000101);
För dem som tycker att detta är alltför kryptisk:
det första ANDs värdet av PORTB med inte maskera och eller resultatet med värdet vi vill skriva och tilldelar som tillbaka till PORTB.
Så, antar att PORTB = 00010000 och vi vill skriva 00000101 till det, vi inte kan tilldela som omedelbart eftersom som skulle klara PB4.
Men om vi gör som beskrivs, blir det:
PORTB = (PORTB & 11110000) | 00000101
PORTB = (00010000 & 11110000) | 00000101
PORTB = 00010000 | 00000101
PORTB = 00010101
Vi har skrivit våra värde och höll PB4
Så, varför kan vi omedelbart eller PORTB med det värde vi vill stead av AND-ning det först?
Jo därför att kanske hålla PB4 och PB5... men det håller också PB3-PB0 oförändrat om en av dem som redan finns en '1'
Naturligtvis Invertera masken skulle inte vara nödvändigt om vi vill definiera det redan inverterad, men det är vanligt att göra det som sådan