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 15:17] – mikk.leini | et:avr:registers [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 45: | Line 45: | ||
| [{{ : | [{{ : | ||
| - | ~~PB~~ | ||
| * **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 119: | 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 128: | 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 164: | 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 172: | 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 185: | 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, | ||
| + | </ | ||