Скачать 1.28 Mb.
|
UCR - регистр управления. Описание его бит см. в таблице:
И наконец последний регистр - UBRR - регистр задания скорости. Записываемый туда байт определяет коэффициент деления тактовой частоты, требуемый коэффициент рассчитывается либо по формуле, либо (для стандартных кварцев) по таблице. В любом случае тут надо сунуть нос в даташит. Кстати, для получения максимальной скорости передачи придется подбирать кварц "некруглой" частоты. Так, для 8535 это будут кварцы на 7.3728 или 3.6864 MHz Ну и напоследок - думаю, что разобраться с работой USART вам поможет пример $08 ($28) ACSR Аналоговый компаратор сравнивает (на аппаратном уровне!) напряжения на входах AIN0 (PB.2) и AIN1 (PB.3). Если напряжение на AIN0 выше, чем на AIN1 - на выходе компаратора лог. "1" и наоборот. Настройка компаратора производится при помощи регистра ACSR.
ADCL $04 ($24), ADCH $05, ADCSR $06, ADMUX $07 Эти четыре регистра относятся к десятиразрядному АЦП (думаю, не надо расшифровывать, что это есть Аналого - Цифровой Преобразователь... впрочем, все равно расшифровалось) :-) ADCL и ADCH - образуют 16-ти (реально - 10-ти) разрядный регистр, в котором вы получите собственно числовое значение напряжения на входе, определенном регистром ADMUX. В регистре ADMUX ничего интересного, в общем-то, и нет - туда надо записать число от 0 до 7, которое и определит, с какого входа (пина) будет браться отсчет (PA0 - PA7). Теперь надо упомянуть еще три вывода МК, имеющих отношение к АЦП. Это AGND,AVCC и AREF AGND и AVCC достаточно подключить к GND и VCC соответственно. С АREF немного сложнее. Напряжение на AREF - это напряжение, которое будет соответствовать максимальному отсчету (0x3FF или 1023.) и не должно превышать напряжения питания VCC. Например, если вы подадите на AREF напряжение 3В, а на вход АЦП 1,5В - то значение отсчета АЦП будет 512 Теперь перейдем к более сложному - как это все работает. И тут лучше иметь перед глазами регистр статуса и управления ADCSR
Ну вот, вроде и все. В заключение надо упомянуть, что расположение АЦП на одном кристалле с процессором далеко не лучшим образом действует на его (АЦП) точность. Поэтому для получения "чистых" отсчетов предусмотрен режим, когда преобразование ведется в режиме спячки процессора. Для этого нужно всего лишь: - разрешить прерывание от АЦП (и предусмотреть его обработку!) - разрешить МК входить в спячку, режим IDLE (периферия работает, процессор остановлен) - произвести необходимую настройку АЦП (ADEN=1, мультиплексор на необходимый канал, ADFR=0) и после этого перевести МК в спячку командой SLEEP - МК уснет, а АЦП включится. По окончании преобразования МК проснется по прерыванию АЦП. Вот и все. Естественно, надо иметь в виду, что какое-либо другое прерывание, будучи разрешенным, также разбудит процессор и вся чистота эксперимента будет утрачена. Поэтому при подготовке к такому режиму другие прерывания лучше запретить (но не все вместе! если дадите команду CLI, то не сработает и прерывание АЦП, и МК заснет до сброса). В общем, это режим для продвинутых пользователей... Система команд микроконтроллеров AVR Перед тем, как приступить к рассмотрению системы команд, давайте вспомним некоторые основные архитектурные особенности микроконтроллера. Итак, микроконтроллер имеет своем составе 32 регистра. Первая их половина (R0-R15) не может быть использована в операциях с непосредственным операндом. Во второй половине есть специфические регистровые пары, которые могут использоваться в операциях пересылки данных между регистрами и памятью и некоторых других действий (X,Y и Z). Заметим к тому же, что "возможности" этих регистровых пар различны! Кроме регистров, микроконтроллер может иметь память данных (ОЗУ), обращение к которой производится при помощи регистровых пар (индексная адресация) или указанием 16-ти разрядного адреса. Микроконтроллер может только прочесть память данных в регистр или записать туда из регистра, никакие арифметические или логические операции с памятью данных невозможны. Ну и последнее - периферия, или регистры ввода-вывода (I/O). Можно прочитать данные из I/O в регистр общего назначения и записать из регистра общего назначения в I/O. Кроме этого, у части регистров ввода-вывода, а точнее - у тех, чей адрес не превышает 0x1F, возможна установка отдельных бит в состояние 0 или 1. Операнды команд будем обозначать следующим (стандартным) способом:
|