Wat is dit een leuk taaltje zeg! 'k moet zeggen, ben erg gecharmeerd van die ATmega dingetjes, en AVRstudio is wel een heel luxe IDE.

Tja, misschien niet een erg zinnig topic, maar wilde gewoon even mijn mening spuien :P

Een sterke feature vind ik het vrij te gebruiken T bit in het status register. Dus conditionele sprongen maken afhankelijk van wat je in dat T bit stopt

[Bericht gewijzigd door MagicBox op ]

Met het instructiesetje bst/bld kan je een bit kopieren binnen een register. (maakt gebruik van de T bit)
Swap is ook wel een leuke, upper en lower nibbles verwisselen.
Veel instructies, dus veel ruimte om software te programmeren met zo weinig mogelijk instructies (snelheid)
Snelheid kwa klok ligt hoger dan de befaamde PIC :) , maar door de vele instructies kan je dichtere/compactere routines proggen. (maar er zijn nog veel snellere microcontrollers, alleen niet voordelig en snel, alles z'n voor en nadelen)
Verders kan je rechtreeks in het I/O gebied werken met de store/load instructies als ik me goed herinner (SRAM gebied begint meteen na het I/O gebied) De stack zit op het einde SRAM, daarmee oppassen indien je met SRAM gaat werken.
Wat een beetje vreemd is is dat niet elke instructie werkt op elk register (r0-r31), er zijn hoge (r16-r31) en lage (r0-r15) registers. (een van de vreemdste nadelen, maar het went, je kan altijd nog SRAM gebruiken als registers indien de registers op zijn)
De interrupts hebben prioriteit, elk een apparte vector, dus komen er precies twee interrupts tegelijk dan gaat er altijd een voor, het gaat nooit de mist in.
Handig is ook dat je alle geheugens kan lezen en schrijven, dus registers, SRAM, EEPROM en Flash, althans bij de nieuwere AVR's (ATtiny2313-24PI bijv., voordelig en snel, helaas zit hier weer niet een ADC in, ATtiny26 weer wel)
Geloof dat er nieuwe aankomen waarin ook een DAC zit gebakken. (leuk om voicerecordertjes mee te maken)

Ja, het handige van dat T bit is dat je het kunt zetten met een bit uit een willekeurig register, of direct zetten met BTS of BTC. Maar het mooie is dat de logische bewerkingen dit bit niet beinvloeden in tegenstelling tot Z, C en andere vlaggetjes. Dus je kunt op een bepaalde plek je conditie in het T register zetten, en hier later, na een aantal berekeningen op terug komen.

[Edit:] practish voorbeeld: een reeks tekens in je RAM, en van het laatste teken bit 7 zetten. Dan in je loop die de tekens afgaat, bit 7 in T zetten, dan bit 7 0 maken, om het teken niet corrupt te maken. (Als die al 0 was, maakt niet uit, blijft dan 0). Bewerking op teken doen, b.v. $30 er bij optellen en naar LCD sturen, dan een jump naar begin van de loop als T niet gezet was. Voordeel is dat je het lezen van een 'end of line' teken uitspaart. In loopjes kan dit aanzienlijk schelen.

Het feit dat de R0 - R15 voor "veel" instructies niet te gebruikem zijn vond ik eerst wel een rarigheid. Maar wat ik nu doe is ze vullen met een upper register (16 - 31), en vervolgens er mee gaan rekenen. Als 0 de startwaarde is voor het één of ander, dan met CLR deze lower registers zetten op 0, dat werkt wel. En dan met de logische bewerkingen dit lower register als eerste opgeven, als 2e operand een upper register. Ik heb wel gemerkt dat het zinnig is om zo veel mogelijk registers te gebruiken om te voorkomen dat je in sram moet gaan zitten rommelen. Dat kost weer een klokcycle extra.

De autoincrement op de X, Y en Z registers is ook berehandig en snel!

Toch mis ik wel een aantal naar mijn idee essentiele instructies. Zoals een immediate ADD/ADC. Is er wel voor de SUB/SBC --> SBI, SBCI, maar niet voor de add. Voor bewerkingen op 16 bit getallen is dit wel lastig. Dan zal ik de op te tellen waarde eerst in een register moeten stoppen, ook al is het een constante waarde.

Ik heb zeker gemerkt dat je goed kunt truuken met deze assembly en dingen heel snel kan doen. Het direct addresseren van de registers d.m.v. het X, Y of Z register is ook erg handig :)

[Bericht gewijzigd door MagicBox op ]