Differences

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

Link to this comparison view

Next revision
Previous revision
ru:avr:registers [2013/08/13 14:57] – создано eduardtlmkru: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  |Отрицание, логическое умножение, логическое сложение и неравнозначность}}] [{{  :images:logic:logic_all_4.png?550  |Отрицание, логическое умножение, логическое сложение и неравнозначность}}]
  
-~~PB~~+<pagebreak>
  
   * **Отрицание / Инверсия** \\ Отрицание изменяет значение бита на противоположное, т.е. 0 меняется на 1 и 1 меняется на 0. На языке Си знак отрицания “~“.   * **Отрицание / Инверсия** \\ Отрицание изменяет значение бита на противоположное, т.е. 0 меняется на 1 и 1 меняется на 0. На языке Си знак отрицания “~“.
Line 86: Line 86:
 </code> </code>
  
-~~PB~~+<pagebreak>
  
 ==== Операция инвертирования бита ==== ==== Операция инвертирования бита ====
Line 97: Line 97:
  
 <code c> <code c>
-  // Oletameet REG = 0x0F +  // Предположимчто REG = 0x0F 
-  REG = REG ^ 0x11; // Üks meetod  +  REG = REG ^ 0x11; // Первый метод  
-  REG ^= 0x11;      // Teine meetod (rakendada tohib korraga ainult üht+  REG ^= 0x11;      // Второй метод (применить разом можно только один
-  // Siinkohal REG = 0x1E+  // Здесь REG = 0x1E
 </code> </code>
  
-==== Kogu registri inverteerimine ====+==== Инвертирование всего регистра ====
  
-[{{  :images:logic:op_reg_invert.png?229|Bittide inverteerimise tehe}}]+[{{  :images:logic:op_reg_invert.png?229|Операция инвертирования битов}}]
  
-Kogu registri bittide inverteerimiseks tuleb kasutada eitustehetSee on unaarne tehe ehk tal on ainult üks operandKõrvalnäites toodud tehe näeb C-keeles välja niimoodi:+Для инвертирования битов всего регистра, необходимо использовать операцию отрицанияУ данной операции только один операндОперация, изображенная рядом, на языке Си выглядит следующим образом:
  
 ~~CL~~ ~~CL~~
  
 <code c> <code c>
-  // Oletameet REG = 0x0F+  // Предположимчто REG = 0x0F
   REG = ~REG;   REG = ~REG;
-  // Siinkohal REG = 0xF0+  // Здесь REG = 0xF0
 </code> </code>
  
-==== Üksiku biti väärtuse lugemine ====+==== Чтение значения отдельного бита ====
  
-[{{  :images:logic:op_bit_get.png?229|Biti lugemise tehe}}]+[{{  :images:logic:op_bit_get.png?229|Операция чтения бита}}]
  
-Ühe või enam biti väärtuse lugemiseks registrist tuleb kasutada sama tehetmis biti nullimisel - loogilist korrutamistTehte üks operand peab olema registerteine bitimaskkus kõrgeks on seatud vaid see bittmille väärtust registrist lugeda soovitakseKõrvalnäites toodud tehe näeb C-keeles välja järgmiselt:+Для чтения одного или нескольких значений бита из регистранеобходимо использовать ту же операцию, что и при обнулении – логическое умножениеОдин из операндов операции должен быть регистромдругой битовой маскойгде высоким настроен только тот битзначение которого желают считать из регистраОперация, изображённая рядом, выглядит на языке Си следующим образом:
  
 ~~CL~~ ~~CL~~
  
 <code c> <code c>
-  // Oletameet REG = 0x0F+  // Предположимчто REG = 0x0F
   unsigned char x = REG & 0x01;   unsigned char x = REG & 0x01;
-  // Siinkohal x = 0x01+  // Здесь x = 0x01
 </code> </code>
  
-~~PB~~+<pagebreak>
  
-==== Biti nihutamine ====+==== Смещение бита ====
  
-Tegelikult on paljudes programmeerimiskeeltes peale binaartehete veel mõned bitioperatsioonidmis teevad programeerija elu lihtsamaksNeed on bitinihutuse operatsioonidmis binaararvus nihutavad bitte kas vasakule või paremale pooleNihutusoperatsioonide põhiline väärtus seisneb registritega tegeldes 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|Сдвижение бита влево}}]
  
-Kõrvaloleval pildil on toodud näide bitinihutuse operatsioonist vasakuleBitinihutus pole loogikaoperatsioon ja sel puudub vastav tähisC-keeles on see aga "<<"Nihet vasakule kasutatakse bitijärgu bitimaskiks teisendamiseksNäitekskui soovitakse kuuenda biti (NB! järk on 5) maskisiis tuleb arvu nihutada vasakule kordaNäites toodud operatsioon näeb C-keeles välja järgmiselt:+На указанном рядом изображении, приведён пример операции по сдвигу бита влевоСдвижение не является логической операцией и у него отсутствует соответствующее обозначениеа на языке Си это “«“Сдвиг влево используется для превращения битового разряда в битовую маскуНапримересли желают маску 6 бита (NB! разряд 5), то требуется число сдвинуть влево разОперация, приведённая в примере, выглядеть на языке Си следующим образом
  
 ~~CL~~ ~~CL~~
Line 145: Line 145:
 <code c> <code c>
 REG = 0x01 << 5; REG = 0x01 << 5;
-// Siinkohal REG = 0x20+// Где REG = 0x20
 </code> </code>
  
-[{{  :images:logic:op_bit_shift_right.png?241|Bitinihe paremale}}]+[{{  :images:logic:op_bit_shift_right.png?241|Сдвижение бита вправо}}]
  
-Sarnaselt bitinihkega vasakule toimib ka bitinihke operatsioon paremaleSelle operatsiooni tähis C-keeles on ">>"Nihet paremale kasutatakse bitimaskist biti loogilise väärtuse leidmiseksEespool oli toodud näiteks üksiku biti väärtuse lugemise teheOletameet bittmida lugedapole aga madalaima järgugavaid näiteks järguga 5. Sel juhul oleks lugemisel vastus kas 0x20 või 0x00kuid vahel läheb vaja vastust või ja siis tulebki appi nihe paremaleKõrvalnäites toodud operatsioon näeb C-keeles välja nii:+Подобно сдвигу влево, работает и операция сдвижения налевоОбозначение данной операции на языке Си “»“Сдвиг вправо используется для нахождения логического значения бита из битовой маскиВпереди был приведён пример операции считывания значения одиночного битаПредположимчто биткоторые нужно считать не с наименьшим разрядома напримерс разрядом 5. В этом случаеответ считывания был бы 0х20 или 0х00, но иногда требуется ответ или и тогда приходит на помощь сдвиг вправоОперация, приведённая в примере, выглядеть на языке Си следующим образом
  
 ~~CL~~ ~~CL~~
  
 <code c> <code c>
-// Oletameet REG väärtus on 0x20+// Предположимчто значение REG 0x20
 unsigned char x = REG >> 5; unsigned char x = REG >> 5;
-// Siinkohal on väärtus 0x01 (ehk lihtsalt 1)+// Здесь значение 0x01 (т.е. просто 1)
 </code> </code>
  
-Kui bitinihke operatsioonidega nihkub bitt madalaimast järgust paremale või kõrgeimast järgust vasakulesiis see bitt kaobMõnedes programmeerimiskeeltes on olemas ka roteeruvad bitinihke operatsioonidkus "servast" välja minev bitt tuleb teiselt poolt tagasiC-keeles roteeruvad bitinihke operatsioonid puuduvadkuid vajadusel saab need ise kirjutada.+Если в операции сдвижения битабит сдвигается из низкого разряда вправо или из высокого влево, то он исчезаетВ некоторых языках программирования существуют вращающиеся операции сдвижения битов, где бит не исчезаета двигается из одного конца в другойНа языке Си вращающиеся операции сдвижения бита отсутствуютно при желании их можно написать самим
  
-Kõik toodud bitioperatsioonide näited toimivad peale registrite ka muutujatega ja konstantidegaViimased saavad muidugi ainult operandideksmitte vastusteks olla.+Все переведённые примеры операций работают помимо регистров и с переменными и константамиПоследние могут быть только операндамиа не ответами
  
-===== AVR registrid =====+===== Регистры AVR =====
  
-Selleks et midagi reaalselt mikrokontrolleri registritega teha saakstuleb osata selle mikrokontrolleriga läbi saadaKõigi mikrokontrolleritega käib kaasas üks või mitu andmelehtekus on dokumenteeritud kogu mikrokontrolleri struktuur ja funktsionaalsusAndmelehes on kirjeldatud ka registridJärgnevalt uurimekuidas saada aru AVR-i andmelehe registrite kirjeldusest.+Для тогочтобы сделать что-либо реальное с регистрами микроконтроллера, требуется знать как пользоваться конкретным микроконтроллеромК каждому микроконтроллеру прилагается одна или несколько спецификацийкоторая описывает структуру и функциональность микроконтроллераВ спецификации описаны и регистрыДалее изучимкак разобраться в описании регистров в спецификации AVR. 
  
-[{{  :images:logic:avr_example_register.png?580  |Üks AVR register selle andmelehest}}]+[{{  :images:logic:avr_example_register.png?580  |Один регистр AVRиз его спецификации}}]
  
-Pildil on toodud ATmega128 mikrokontrolleri register UCSRnA, mille pikem nimetus on "//USART Control and Status Register A//"See on registermillega sätitakse AVR-i USART moodulit ja kust saab lugeda selle mooduli olekuidKõik AVR-i registrite nimed kirjutatakse suurte tähtedegakuid tähelepanelik lugeja ilmselt märkabet selles registris on väike n-tähtVäikese n-tähega tähistatakse nimelt mõne mooduli indeksitKuna ATmega128-s on üsna sarnast USART moodulitsiis ei kirjeldata nende registreid topeltvaid ühe korra ja n-tähe asemele peab lugeja arvestama kas "0" või "1"Seega ATmega128-s on registrid UCSR0A ja UCSR1A.+На изображении приведён регистр UCSRnA микроконтроллера ATmega128полное название которого “USART Control and Status Register AЭто регистрс помощью которого конфигурируется модуль USART AVR-а и с которого можно считать состояния этого модуляВсе названия регистров AVR пишутся заглавными буквамино внимательный читатель заметитчто в этом регистре есть маленькая буква n. Маленькой буквой обозначается индекс какого-нибудь модуляТак как в ATmega128 есть очень похожих USART модулято в регистре они не записываются вдвойнеа только один раз и вместо буквы должен читатель вставлять „0“ или „1Из чего следует, что в ATmega128 есть регистры UCSR0A и UCSR1A.
  
-Registri sisu tähistab paksu piirjoonega lahtriga kastIga lahter tähistab üht bittiKasti kohal on toodud biti järgud - suurenevad paremalt vasakuleKuna AVR on 8-bitine mikrokontrolleron ka enamik registreid 8-bitisedMõningad erandid on 16-bitised registridmis koosnevad tegelikult kahest 8-bitisest registristLisaks registritele on nimi ka igal registri bitil - täpselt nagu kassetimängija nuppudelgiIga biti kohta on andmelehes olemas selle selgitusBiti nimed on samuti lühendid ja n-täht neis tuleb samuti asendada mooduli indeksigaMõnes registris pole kõiki 8 bitti kasutatud ja sel juhul tähistatakse biti lahter sidekriipsuga.+Содержимое регистра отмечено в ящике с ячейками, выделенным толстой линиейКаждая ячейка обозначает один битНад ящиком приведена очерёдность битов, они возрастают справа налевоТак как AVR – это 8-битный микроконтроллербольшинство регистров так же 8-битныеЕсть некоторые исключения в виде 16-битных регистровкоторые состоят из двух 8-битных регистровВдобавок к регистрам название имеет каждый бит регистра, так же как и кнопки магнитофонаВ спецификации имеется объяснение к каждому битуНазвания битов – это так же сокращения и букву в них следует заменить индексом модуляВ некоторых регистрах использованы не все биты, и в этом случае ячейка бита обозначается знаком тире
  
-Registri bittide all on toodud kaks ridakus on kirjaskas bitt on loetav (R), kirjutatav (W) või mõlemat (R/W). Näiteks olekubitte ei saa üle kirjutada ja isegi siiskui seda programmis üritadaei omanda bit lihtsalt talle omistatavat väärtustBiti puhulmida saab ainult kirjutadaon öeldud üks kindel väärtusmis selle lugemisel alati tulebBittide all teises reas on toodud vaikeväärtusmis on bitil pärast mikrokontrolleri käivitamist (inglise keeles //reset//).+Под битами регистра приведены две строкигде написаноявляется ли бит читаемым (R), записываемым (W) или и тем и другим (R/W). Напримербит состояния нельзя переписатьи даже в случае, если это пытаются сделать в программе, не принимает бит желаемого значенияВ случае с битомкоторый можно только записыватьуказано одно конкретное значениекоторое появляется всегда при его чтенииВо второй стоке под битами указано стандартное значениекоторое есть у бита после запуска микроконтроллера (англ. reset)
 + 
 +Если названия регистров AVR указывают на действительный адрес в гнезде памяти, то за названиями битов скрываются их порядковые номера. Исходя из этого, при манипуляции с битами, следует названия битов при помощи операции сдвижения преобразовать в битовую маску. Далее приведены некоторые примерные предложения на языке Си, используемые для регистра модуля USART 0
  
-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>
-  // TXC0 biti kõrgeks seadmine+  // Установка бита TXC0 высоким 
   UCSR0A |= (1 << TXC0);   UCSR0A |= (1 << TXC0);
  
-  // U2X0 biti madalaks seadmine+  // Установка бита U2X0 низким
   UCSR0A &= ~(1 << U2X0);   UCSR0A &= ~(1 << U2X0);
  
-  // UDRE0 biti(maskiväärtuse lugemine+  // Считывание значения бита (битовой маскиUDRE0
   unsigned char u = (UCSR0A & (1 << UDRE0));   unsigned char u = (UCSR0A & (1 << UDRE0));
  
-  // Siinkohal on väärtus kas või 32, +  // Здесь значение – или 32, 
-  // mis võimaldab seda loogilises avaldises kasutada+  // что позволяет использовать его в логическом выражении
   if (u)   if (u)
   {   {
-     // MPCM0 biti inverteerimine+     // Инвертирование бита MPCM0
      UCSR0A ^= (1 << MPCM0);      UCSR0A ^= (1 << MPCM0);
   }   }
  
-  // Mõnikord on aga vaja saada konkreetne või väärtus+  // Иногда требуется получить конкретное значение или 1, 
-  // selleks tuleb loetud bitti nihutada paremale+  // для этого следует уже считанные биты сдвинуть вправо
   u >>= UDRE0;   u >>= UDRE0;
  
-  // Siinkohal on väärtus kas või 1+  // Здесь значение u 0 или 1
 </code> </code>
- 
ru/avr/registers.1376405861.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