Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:avr:registers [2010/02/15 15:17] mikk.leiniet:avr:registers [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 45: Line 45:
 [{{  :images:logic:logic_all_4.png?550  |Eitus, loogiline korrutamine, loogiline liitmine ja mittesamaväärsus}}] [{{  :images:logic:logic_all_4.png?550  |Eitus, loogiline korrutamine, loogiline liitmine ja mittesamaväärsus}}]
  
-~~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:
 [{{  :images:logic:op_bit_get.png?229|Biti lugemise tehe}}] [{{  :images:logic:op_bit_get.png?229|Biti lugemise tehe}}]
  
-Ü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
 </code> </code>
- 
-~~PB~~ 
  
 ==== Biti nihutamine ==== ==== Biti nihutamine ====
  
-Tegelikult on paljudes programmeerimiskeeltes peale binaartehete veel mõned bitioperatsioonid, mis teevad programeerija elu lihtsamaks. Need on bitinihutuse operatsioonid, mis binaararvus nihutavad bitte kas vasakule või paremale poole. Nihutusoperatsioonide põhiline väärtus seisneb registritega tegeldes nende võimes bitijärkusid bitimaskiks teisendada ja vastupidi.+Tegelikult on paljudes programmeerimiskeeltes peale binaartehete veel mõned bitioperatsioonid, mis teevad programmeerija elu lihtsamaks. Need on bitinihutuse operatsioonid, mis binaararvus nihutavad bitte kas vasakule või paremale poole. Nihutusoperatsioonide põhiline väärtus seisneb registritega tegeledes nende võimes bitijärkusid bitimaskiks teisendada ja vastupidi.
  
 [{{  :images:logic:op_bit_shift_left.png?241|Bitinihe vasakule}}] [{{  :images:logic:op_bit_shift_left.png?241|Bitinihe vasakule}}]
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.+Sellekset 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.
  
 [{{  :images:logic:avr_example_register.png?580  |Üks AVR register selle andmelehest}}] [{{  :images:logic:avr_example_register.png?580  |Üks AVR register selle andmelehest}}]
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, on ka enamik registreid 8-bitised. Mõningad erandid on 16-bitised registrid, mis koosnevad tegelikult kahest 8-bitisest registrist. Lisaks registritele on nimi ka igal registri bitil - täpselt nagu kassetimängija nuppudelgi. Iga biti kohta on andmelehes olemas selle selgitus. Biti nimed on samuti lühendid ja n-täht neis tuleb samuti asendada mooduli indeksiga. Mõnes registris pole kõiki 8 bitti kasutatud ja sel juhul tähistatakse biti lahter sidekriipsuga. 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, on ka enamik registreid 8-bitised. Mõningad erandid on 16-bitised registrid, mis koosnevad tegelikult kahest 8-bitisest registrist. Lisaks registritele on nimi ka igal registri bitil - täpselt nagu kassetimängija nuppudelgi. Iga biti kohta on andmelehes olemas selle selgitus. Biti nimed on samuti lühendid ja n-täht neis tuleb samuti asendada mooduli indeksiga. Mõnes registris pole kõiki 8 bitti kasutatud ja sel juhul tähistatakse biti lahter sidekriipsuga.
  
-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 bit lihtsalt talle omistatavat väärtust. Biti puhul, mida saab ainult kirjutada, on öeldud üks kindel väärtus, mis selle lugemisel alati tuleb. Bittide all teises reas on toodud vaikeväärtus, mis on bitil pärast mikrokontrolleri käivitamist (inglise keeles //reset//).+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 bitt lihtsalt talle omistatavat väärtust. Biti puhul, mida saab ainult kirjutada, on öeldud üks kindel väärtus, mis selle lugemisel alati tuleb. Bittide all teises reas on toodud vaikeväärtus, mis on bitil pärast mikrokontrolleri käivitamist (inglise keeles //reset//).
  
-Kui AVR-i registrite nimed viitavad tegelikult mälupesade aadressidele, siis biti nimede taga peitub selle biti järgu number. Seega registris bittidega manipuleerimiseks tuleb bitinimed nihutusoperatsiooni abil bitimaskiks teisendada. Järgnevalt on toodud mõned C-keele näited eeltoodud USART 0 mooduli registri kasutamiseks.+Kui AVR-i registrite nimed viitavad tegelikult mälupesade aadressidele, siis biti nimede taga peitub selle biti järgu number. Seega registris bittidega manipuleerimiseks tuleb bitinimed nihutusoperatsiooni abil bitimaskiks teisendada. Järgnevalt on toodud mõned C-keele näitelaused eeltoodud USART 0 mooduli registri kasutamiseks.
  
 <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,
-  // mis võimaldab seda loogilises avaldises kasutada +</code>
-  if (u) +
-  { +
-     // MPCM0 biti inverteerimine +
-     UCSR0A ^= (1 << MPCM0); +
-  }+
  
-  // Mõnikord on aga vaja saada konkreetne 0 või 1 väärtus, +Atmeli xmega seeria kontrolleritelmis on kasutusel Kodulabori III seeria plaatidel tuleb lisaks moodulile ära märkida ka port, mille moodulit kasutada soovitakse. Lisaks on defineeritud registri bittide maskid ning bittide positsioonid _bm(bit mask) ja _bp(bit position) lõppudega.
-  // selleks tuleb loetud bitti nihutada paremale +
-  u >>= UDRE0;+
  
-  // Siinkohal on u väärtus kas 0 või 1 +<code c> 
-</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,
 +</code>
et/avr/registers.1266247078.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0