This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:avr:registers [2010/02/15 13:55] – mikk.leini | et:avr:registers [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 44: | Line 44: | ||
| [{{ : | [{{ : | ||
| + | |||
| * **Eitus / Inversioon** \\ Eitus muudab biti väärtuse vastupidiseks ehk 0 muutub 1 ja 1 muutub 0. C-keeles on eituse märk " | * **Eitus / Inversioon** \\ Eitus muudab biti väärtuse vastupidiseks ehk 0 muutub 1 ja 1 muutub 0. C-keeles on eituse märk " | ||
| Line 117: | Line 118: | ||
| [{{ : | [{{ : | ||
| - | Ühe või enam biti väärtuse lugemiseks registrist tuleb kasutada sama tehet, mis biti nullimisel - loogilist korrutamist. Tehte üks operand peab olema register, teine bitimask, kus kõrgeks on seatud vaid see bitt, mille väärtust registrist lugeda soovitakse. Kõrvalnäites toodud tehe näeb C-keeles välja järgmiselt: | + | Ühe või enama biti väärtuse lugemiseks registrist tuleb kasutada sama tehet, mis biti nullimisel - loogilist korrutamist. Tehte üks operand peab olema register, teine bitimask, kus kõrgeks on seatud vaid see bitt, mille väärtust registrist lugeda soovitakse. Kõrvalnäites toodud tehe näeb C-keeles välja järgmiselt: |
| ~~CL~~ | ~~CL~~ | ||
| Line 126: | Line 127: | ||
| // Siinkohal x = 0x01 | // Siinkohal x = 0x01 | ||
| </ | </ | ||
| - | |||
| - | ~~PB~~ | ||
| ==== Biti nihutamine ==== | ==== Biti nihutamine ==== | ||
| - | Tegelikult on paljudes programmeerimiskeeltes peale binaartehete veel mõned bitioperatsioonid, | + | Tegelikult on paljudes programmeerimiskeeltes peale binaartehete veel mõned bitioperatsioonid, |
| [{{ : | [{{ : | ||
| Line 162: | Line 161: | ||
| ===== AVR registrid ===== | ===== AVR registrid ===== | ||
| - | Selleks et midagi reaalselt mikrokontrolleri registritega teha saaks, tuleb osata selle mikrokontrolleriga läbi saada. Kõigi mikrokontrolleritega käib kaasas üks või mitu andmelehte, kus on dokumenteeritud kogu mikrokontrolleri struktuur ja funktsionaalsus. Andmelehes on kirjeldatud ka registrid. Järgnevalt uurime, kuidas saada aru AVR-i andmelehe registrite kirjeldusest. | + | Selleks, et midagi reaalselt mikrokontrolleri registritega teha saaks, tuleb osata selle mikrokontrolleriga läbi saada. Kõigi mikrokontrolleritega käib kaasas üks või mitu andmelehte, kus on dokumenteeritud kogu mikrokontrolleri struktuur ja funktsionaalsus. Andmelehes on kirjeldatud ka registrid. Järgnevalt uurime, kuidas saada aru AVR-i andmelehe registrite kirjeldusest. |
| [{{ : | [{{ : | ||
| Line 170: | Line 169: | ||
| Registri sisu tähistab paksu piirjoonega 8 lahtriga kast. Iga lahter tähistab üht bitti. Kasti kohal on toodud biti järgud - suurenevad paremalt vasakule. Kuna AVR on 8-bitine mikrokontroller, | Registri sisu tähistab paksu piirjoonega 8 lahtriga kast. Iga lahter tähistab üht bitti. Kasti kohal on toodud biti järgud - suurenevad paremalt vasakule. Kuna AVR on 8-bitine mikrokontroller, | ||
| - | Registri bittide all on toodud kaks rida, kus on kirjas, kas bitt on loetav (R), kirjutatav (W) või mõlemat (R/W). Näiteks olekubitte ei saa üle kirjutada ja isegi siis, kui seda programmis üritada, ei omanda | + | Registri bittide all on toodud kaks rida, kus on kirjas, kas bitt on loetav (R), kirjutatav (W) või mõlemat (R/W). Näiteks olekubitte ei saa üle kirjutada ja isegi siis, kui seda programmis üritada, ei omanda |
| - | Kui AVR-i registrite nimed viitavad tegelikult mälupesade aadressidele, | + | Kui AVR-i registrite nimed viitavad tegelikult mälupesade aadressidele, |
| <code c> | <code c> | ||
| Line 183: | Line 182: | ||
| // UDRE0 biti(maski) väärtuse lugemine | // UDRE0 biti(maski) väärtuse lugemine | ||
| unsigned char u = (UCSR0A & (1 << UDRE0)); | unsigned char u = (UCSR0A & (1 << UDRE0)); | ||
| - | |||
| // Siinkohal on u väärtus kas 0 või 32, | // Siinkohal on u väärtus kas 0 või 32, | ||
| - | | + | </code> |
| - | if (u) | + | |
| - | { | + | |
| - | // MPCM0 biti inverteerimine | + | |
| - | | + | |
| - | } | + | |
| - | // Mõnikord on aga vaja saada konkreetne 0 või 1 väärtus, | + | Atmeli xmega seeria kontrolleritel, mis on kasutusel Kodulabori III seeria plaatidel |
| - | // selleks | + | |
| - | u >>= UDRE0; | + | |
| - | // Siinkohal on u väärtus kas 0 või 1 | + | < |
| - | </code> | + | // TXEN biti kõrgeks seadmine |
| + | USARTD0.CTRLB |= (USART_TXEN_bm); | ||
| + | // CLK2X biti madalaks seadmine | ||
| + | USARTD0.CTRLB &= ~(USART_CLK2X_bm); | ||
| + | |||
| + | // DREIF biti(maski) väärtuse lugemine | ||
| + | unsigned char u = (USARTD0.STATUS & (USART_DREIF_bm)); | ||
| + | // Siinkohal on u väärtus kas 0 või 32, | ||
| + | u >>= USART_DREIF_bp; | ||
| + | // Siinkohal on u väärtus kas 0 või 1, | ||
| + | </ | ||