Stap 3: 'Home Alone': de Software
Het bovenstaande programma toont hoe te rijden mijn bijzondere stepper en moet u mogelijk de waarden naar PORTB wordt geschreven, hebt u anotehr stapfunctie wijzigen. Zoals de Attiny13 vrij klein in het geheugen is en ook niet teveel pinnen, mist het programma sommige verfijning. Schrijven rechtstreeks naar PORTB is OK, maar in dit geval zal het ook schrijft een "0" naar PB4 en PB5. PB5 is niet veel van een probleem, maar u kunt PB4 gebruiken. In mijn geval is dat waar ik mijn servo en die niet echt een probleem veroorzaken als ik ze niet op hetzelfde moment gebruiken kan.
Echter, als u wilt gebruiken een andere microcontroller zoals een 328 en u wilt schrijven naar PB4 en PB5 en PB6 en PB7 vermijden, gebruiken een masker alleen om naar te schrijven bit 0-3. Het masker om dat te doen is B00001111.
Als u vervolgens instellen van de bits bits 0 en 2 wilt, gaat als volgt:
In plaats van PORTB = 5, staat: PORTB = (PORTB & ~ masker) | (B00000101);
Voor degenen die dit ook cryptische vinden:
het eerste ANDs de waarde van PORTB met niet maskeren en van het resultaat met de waarde die we willen schrijven en cessionarissen die terug naar PORTB.
Dus stel PORTB = 00010000 en we willen schrijven 00000101, we niet toewijzen die onmiddellijk omdat die PB4 zou ontruimen.
Echter, als we doen zoals beschreven, wordt:
PORTB = (PORTB & 11110000) | 00000101
PORTB = (00010000 & 11110000) | 00000101
PORTB = 00010000 | 00000101
PORTB = 00010101
We hebben onze waarde geschreven en bewaard PB4
Dus, Waarom cant we onmiddellijk of PORTB met de waarde die we willen in plaats van en-ing het eerst?
Nou omdat die PB4 en PB5... houden misschien maar het houdt ook PB3-PB0 ongewijzigd als één van hen die reeds een '1'
Natuurlijk het masker omkeren zou niet nodig als we het al omgekeerd zou definiëren, maar het is gebruikelijk om het te doen als zodanig