WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 ||

«Министерство образования и науки Российской Федерации Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования Таганрогский государственный ...»

-- [ Страница 2 ] --

Команда чтения младшего байта одновременно записывает старший байт в TEMP, а следующая за этим операция чтения старшего байта фактически выполня­ ется из регистра TEMP. При записи последовательность обратная: сначала произво­ дится запись старшего байта (в действительности выполняется в TEMP), а следую­ щая за ней операция записи младшего байта производит одновременную передачу старшего байта из TEMP. Для корректного выполнения доступа к таким регистрам прерывание должно быть запрещено перед началом обмена. Символические имена битов управления в регистре TCCR1B 1 ICNC1 1 ICES1 | - 1 СТС1 | CS CS11 1 CS10 Биты ICNC1 и ICES1 второго регистра управления TCCR1B определяют работу таймера 1 в режиме "захват" (capture). ICNC1 определяет функцию дополнительного контроля входного сигнала ICP. При нулевом уровне это­ го бита функция "захват" включается первым тактом микроконтроллера после активного уровня сигнала ICP. При единичном значении бита требу­ ется, чтобы входной сигнал ICP был активным не менее 4 тактов микро­ контроллера. Этот режим позволяет устранить ложное включение под дей­ ствием кратковременных помех. Бит ICES1 определяет активный уровень сигнала ICP, при нуле - переход сигнала в активное состояние по падаю­ щему фронту, при единице - по нарастающему фронту. Бит С Т О может разрешить сброс таймера 1 по сигналу сравнения кана­ ла А. При нулевом значении бита сброс таймера по каналу сравнения А не производится, при единичном значении бита и совпадении эталонного зна­ чения канала А с текущим состоянием таймера производится сброс его счетчика в исходное состояние ($0000). Биты CS12, CS11, CS10 задают параметры входного сигнала для счетчика в таймере 1: 000 - входной сигнал блокируется, таймер остановлен. 001 - таймер работает (при всех последующих значениях управляющих битов также работает), входной сигнал счетчика - тактовые им­ пульсы микроконтроллера с частотой im. 010 - частота входного сигнала fT„/8. 011 - частота входного сигнала fTH/64. 100 - частота входного сигнала fT„/256. 101 - частота входного сигнала fTH/1024. 110 - внешний входной сигнал, поступающий на вход Т1 (альтерна­ тивная функция линии РВ1), падающий фронт. 111-внешний входной сигнал Tl (PB1), нарастающий фронт. При остановке таймера этими битами (000) все функции блокируются так же, как и в таймере 0. При работе таймера от внешнего источника сигнала тактовые импульсы микроконтроллера стробируют входные сигналы счет­ чика. Кроме регистра ICR1, работу таймера I обеспечивают еще три 16разрядных регистра: регистр текущего состояния таймера TCNT1, регистр эталонного значения канала сравнения A OCR1A, регистр эталонного значения канала сравнения В OCR1B. Эти регистры программно доступны и для чтения, и для записи и фактически образуются регистровыми парами (индекс L - регистр младшего байта, индекс Н - регистр старшего байта). Процедуры доступа, как и ко всем двухбайтовым регистрам, должны вы подняться в соответствии с правилами, изложенными в примечании на предыдущей странице. Чтение регистров TCNT1L и TCNT1H позволяет программно контроли­ ровать текущее состояние таймера, запись в эти регистры программно за­ дает текущее состояние. При программном обращении к TCNT1 счетчик таймера сохраняет режим работы, заданный соответствующими битами ре­ гистров управления. Регистры OCR1A и OCR IB (no 2 байта каждый) слу­ жат для записи и хранения эталонных значений обоих каналов сравнения. Если в момент записи выполняется условие сравнения, прерывание по ка­ налу сравнения не формируется. Если выбран режим модулятора ШИМ (биты управления PWM11, PWM10), счетчик таймера 1 из суммирующего становится реверсивным. Его состояние в режиме суммирования возрастает от начального $0000 до максимального, определяемого разрядностью кода управления (при 8битовом управлении - $00ff, при 9-битовом - $01ff, при 10-битовом $03ff).Затем счетчик переходит в режим вычитания и уменьшает состояние до начального, возвращаясь далее в режим суммирования, и т.д. Частота сигнала ШИМ определяется делением тактовой частоты микро­ контроллера на коэффициент, зависящий от разрядности кода управления (8 бит - 510, 9 бит - 1022, 10 бит - 2046). Корректная работа в режиме ШИМ возможна только при значении битов управления входным сигналом таймера (CS12, CS11,CS10) - 001, т.е. в случае подачи на вход таймера так­ товых сигналов микроконтроллера. Коды управления ШИМ записываются в регистры эталонных значений обоих каналов сравнения OCR1A и OCR1B, а выходные сигналы ШИМ поступают на выходы каналов сравне­ ния ОС1А (PD5), ОС IB (PD4) и, следовательно, таймер 1 реализует два канала ШИМ с независимыми кодами управления одинаковой разрядности и раздельныхми выходными сигналами. Биты управления выходными сигналами СОМ1Х1, СОМ1Х0 (X ~ это или А, или В) регистра TCCR1A задают параметры сигналов ШИМ сле­ дующим образом: 00, 01 - выходные сигналы ШИМ не формируются, выходы ОС IX не используются. 10 - неинвертированный ШИМ, длительность логической единицы в каждом периоде выходного сигнала пропорциональна коду управления ШИМ. 11 - инвертированный ШИМ, длительность логического нуля в каж­ дом периоде выходного сигнала пропорциональна коду управ­ ления ШИМ. Флаг переполнения TOV1 в режиме ШИМ устанавливается, когда счетчик переключается из состояния $0000. Этот флаг позволяет определить начало каждого периода сигнала ШИМ. Таким образом, таймер 1, построенный на 16-разрядном счетчике, фор­ мирует 4 флага прерывания, может работать в режиме двухканального мо­ дулятора ШИМ и обеспечивает аппаратную реализацию разнообразных функций микроконтроллера. Программное управление всеми функциями таймера 1 производится аналогично показанному в примере для таймера 0. 3.4.3. Таймер 2 Таймер 2 построен на основе 8-разрядного счетчика, формирует два фла­ га прерываний: флаг переполнения TOV2, флаг канала сравнения OCF2, может работать в режиме 8-битового модулятора ШИМ. Флаги прерываний обрабатываются в соответствии со стандартной описанной ранее процеду­ рой с вызовом векторов прерывания: вектор переполнения TIM2_OVF с адресом $004, вектор сравнения ТШ2_СОМР с адресом $003. Дополни­ тельно таймер 2 может работать в асинхронном режиме, получая входные сигналы счетчика от дополнительного генератора микроконтроллера. Параметры и режимы работы таймера 2 определяют 4 регистра файла регистров ввода-вывода: регистр управления TCCR2, регистр текущего состояния таймера TCNT2, регистр эталонного значения канала срав­ нения OCR2, регистр асинхронного режима ASSR. Работа таймера 2 аналогична работе таймера 1 в соответствующих режимах. В регистре управления TCCR2, программно доступном для записи и чтения, используется 7 бит. Символические имена битов управления в регистре TCCR2 PWM2 СОМ21 СОМ201 СТС2 | CS22 | CS21 1 CS Бит PWM2 управляет режимом ШИМ. 0 - запрещает режим ШИМ и оп­ ределяет стандартную работу таймера, 1 - переводит таймер 2 в режим ШИМ. Биты СОМ21, СОМ20 определяют процедуры формирования выходно­ го сигнала канала сравнения ОС2 (альтернативная функция линии вво­ да-вывода PD7). Работа канала сравнения таймера 2 аналогична работе ка­ налов сравнения таймера 1. Параметры сигнала ОС2 для таймера 2 в зави­ симости от битов управления следующие: 00 - выходной сигнал ОС2 не формируется, выход PD7 порта D не используется. 01 - выходной сигнал ОС2 импульсный. 10 - выходной сигнал ОС2 имеет активный нулевой уровень. 11 - выходной сигнал ОС2 имеет активный единичный уровень. Рекомендуется при использовании сигнала ОС2 запретить прерывание очи­ сткой соответствующего бита разрешения в регистре TIMSK, иначе про­ изойдет обработка прерывания при формировании этого сигнала. Этот же сигнал является выходным для таймера 2, работающего в режиме модуля­ тора ШИМ. Бит СТС2 может разрешить сброс таймера 2 по сигналу сравнения. При нулевом значении бита сброс таймера по каналу сравнения не производит­ ся, при единичном значении бита и совпадении эталонного значения с те­ кущим состоянием таймера производится сброс его счетчика в исходное состояние ($00). Биты CS22, CS21, CS20 задают параметры входного сигнала для счетчи­ ка в таймере: 000 - входной сигнал блокируется, таймер остановлен. 001 - таймер работает (при всех последующих значениях управ­ ляющих битов также работает), частота входного сигнала счетчика - fBX. 010 - частота входного сигнала fBX/8. 0 1 1 - частота входного сигнала fBX/32. 100 - частота входного сигнала fBX/64. 101 - частота входного сигнала fBX/128. 110 - частота входного сигнала fBX/256. 111 - частота входного сигнала fBX/1024. При остановке таймера этими битами (000) все функции блокируются так же, как и в других таймерах. Регистры TCNT2 и OCR2 выполняют такие же функции, как и анало­ гичные регистры таймера 1. Выход сигнала сравнения ОС2 (PD7) также применяется для формирования выходного сигнала ШИМ. Регистр ASSR используется для управления работой таймера 2 в асин­ хронном режиме, в этом режиме входной сигнал счетчика поступает от вспомогательного генератора микроконтроллера и не синхронизируется тактовыми сигналами микроконтроллера. К входу (альтернативная функция линии РС6) и выходу (альтернативная функция линии РС7) дополнительного генератора можно подключить отдельную частотнозадающую цепь. Например, для построения часов реального времени мож­ но использовать кварцевый резонатор часов с частотой 32,768 кГц. Символические имена битов в регистре ASSR 1• | • | • 11 AS2 1 TCN2UB | OCR2UB | TCR2UB [ AS2 - бит асинхронного режима. При 0 входной сигнал счетчика форми­ руется тактовым генератором микроконтроллера. При 1 входной сигнал счетчика формируется вспомогательным генератором с использованием цепей РС6, РС7. Переключение между асинхронным и синхронным режи­ мами может привести к изменению состояния регистров TCCR2, TCNT2, 0CR2. Для предотвращения возможных сбоев в работе могут использо­ ваться биты TCN2UB, OCR2UB, TCR2UB. Рекомендации по предотвраще­ нию сбоев с помощью этих битов приведены в руководствах фирмы ATMEL. Работа таймера 2 в режиме ШИМ аналогична работе таймера 1 в этом же режиме при 8-битовом коде управления, частота сигнала ШИМ на выходе 0С2 (PD7) определяется делением частоты входного сигнала счетчика на 510, код управления должен поступать в регистр OCR2. Все операции управления работой таймера 2 аналогичны рассмотренным ранее. 3.5. Аналоговый компаратор Аналоговый компаратор производит сравнение сигналов, поступающих на неинвертирующий вход AIN0 (альтернативная функция линии вво­ да-вывода РВ2) и инвертирующий вход AIN1 (альтернативная функ­ ция линии РВЗ). Выходной сигнал компаратора может использоваться в режиме "захват" таймера 1 или выполнять вызов отдельного вектора пре­ рывания компаратора ANA_COMP с адресом $010. Управление функциями компаратора производится регистром управле­ ния компаратора ACSR, в котором 6 бит программно доступны для чтения и записи, а бит выходного сигнала АСО компаратора доступен только для чтения. Символические имена битов в регистре ACSR ACQ | ACI J ACIE | ACIC \ ACIS1 | ACISo" ACD ACD - бит выключения компаратора, при 1 компаратор отключен. Реко­ мендуется при изменении этого бита запретить прерывание компара­ тора битом ACIE. АСО - бит выходного сигнала компаратора. ACI - флаг прерывания компаратора устанавливается в 1, когда параметры выходного сигнала компаратора соответствуют битам ACIS1, ACIS0. Этот флаг работает вместе с битом разрешения ACIE так же, как и остальные флаги прерываний. ACIE - бит разрешения прерывания компаратора. ACIC - бит управления компаратором для режима "захват" таймера 1. При 1 сигнал компаратора поступает на вход захвата таймера 1 и дейст­ вует в соответствии с параметрами и режимами таймера 1. ACIS1, ACIS0 - определяют параметры сигнала компаратора для форми­ рования флага прерывания: 00 - прерывание по импульсному выходному сигналу компаратора, 01 - не используется, 10 - прерывание по падающему фронту сигнала компаратора, 11 - прерывание по нарастающему фронту сигнала компаратора. Изменение младших двух битов регистра ACSR может установить флаг прерывания, рекомендуется перед этой операцией запретить прерывание по этому флагу. Необходимо также учитывать, что использование команд SBI и CBI для регистра ACSR приведет к очистке флага прерывания ACI. 3.6. Аналого-цифровой преобразователь (АЦП) АЦП микроконтроллера разрядностью 10 бит работает по алгоритму по­ следовательных приближений, погрешность преобразования - не более 2 единиц младшего значащего разряда, время преобразования 65 мкс - 260 мкс. АЦП совместно со встроенным аналоговым мультиплексором обеспе­ чивает преобразование в 10-ти разрядный двоичный код сигналов по 8 аналоговым входам (альтернативная функция линий ввода-вывода порта А) в диапазоне напряжений от 0 (AGND) до опорного (AREF). Для снижения уровня помех цепи питания (AGND, AVCC) схем преоб­ разования аналоговых сигналов подключаются отдельно (рис. 4), напряже­ ние питания AVCC не должно отличаться от напряжения питания VCC бо­ лее чем на ±0,3 В. Опорное напряжение должно лежать в диапазоне от 2 В до напряжения питания AVCC. Код АЦП $000 соответствует нулевому входному сигналу, максимальный код S3FF соответствует сигналу, равно­ му опорному, минус вес единицы младшего значащего разряда. Номер входа мультиплексора, с которого поступает сигнал для преобра­ зования в АЦП, определяется тремя младшими битами MUX2, MUX1, MUX0 управляющего регистра ADMUX. Любой из восьми входов может быть выбран через ADMUX записью в него соответствующего кода в лю­ бой момент времени, однако переключение входов фактически произво­ дится только после завершения очередного цикла преобразования АЦП. В линиях ввода-вывода порта А, используемых для приема аналоговых сиг­ налов, необходимо задавать режим ввода. АЦП может работать в режиме однократного преобразования или цик­ лически с автоматическим повторным запуском после каждого преобразо­ вания. По окончании преобразования формируется флаг прерывания ADIF со стандартной процедурой вызова вектора прерывания ADC с ад­ ресом $00е и записью 10-разрядного кода в двухбайтовый регистр ADCL (младшие 8 бит результата), ADCH (старшие 2 бита результата). Чтение данных из регистра результата ADC должно начинаться обязательно с младшего байта (см. примечание на с. 57). Точность АЦП зависит от такто­ вой частоты преобразования, рекомендуется диапазон тактовых частот 50 200 кГц, при более высоких частотах точность преобразования снижается. Стандартный цикл преобразования требует 13 тактов работы и при реко­ мендуемом значении тактовой частоты 100 кГц определяет время преобра­ зования 130 мкс. Кроме регистров ADMUX, ADCH, ADCL, работа АЦП определяется ре­ гистром ADCSR, который также содержится в файле регистров вводавывода. Символические имена битов управления в регистре ADCSR ADENl ADSC| ADFR I ADIF [ ADIE | ADPS2 | APPSlj APPS20J ADEN - бит разрешения, 0 - АЦП выключен, 1 - АЦП включен. ADSC - бит запуска преобразования, в режиме однократного преобразова­ ния единица должна записываться при каждом запуске, в цикличе­ ском режиме - один раз для запуска первого преобразования. ADFR - бит режима преобразования, 1 - циклический режим, 0 - одно­ кратный. ADIF - флаг прерывания, устанавливается после завершения преобразова­ ния и записи кода в выходной регистр АЦП. Очищается автомати­ чески при вызове вектора прерывания либо записью 1 в этот бит. ADIE - бит разрешения прерывания АЦП, 1 разрешает прерывание. ADPS2, ADPS1, ADPS20 - биты управления тактовой «частотой АЦП, оп­ ределяют коэффициент деления тактовой частоты микроконтрол­ лера следующим образом: 000 - коэффициент деления 2, 001 - коэффициент деления 2, 010 - коэффициент деления 4, 011 — коэффициент деления 8, 100 - коэффициент деления 16, 101 - коэффициент деления 32, 110 - коэффициент деления 64, 111 - коэффициент деления 128. Дополнительное снижение уровня помех для повышения точности пре­ образования можно получить, если на время преобразования АЦП приос­ тановить работу процессора в микроконтроллере переходом в режим "idle". Возврат в рабочее состояние должна обеспечивать подпрограмма обработ­ ки прерывания АЦП. Более подробную информацию о работе АЦП можно найти в руководствах фирмы ATMEL. Для управления работой АЦП подпрограмма его вектора прерывания должна выполнить чтение результатов завершенного цикла преобразования из выходных регистров, определить через регистр мультиплексора номер следующего входного канала и произвести запуск следующего цикла пре­ образования.

3.7. Чтение и запись данных EEPROM Доступ к данным в EEPROM производится с помощью 4 регистров фай­ ла регистров ввода-вывода: регистра управления EECR, регистра дан­ ных EEDR, регистра старшего байта адреса EEARH, регистра младше­ го байта адреса EEARL. Время доступа не превышает 4 мс и зависит от напряжения питания. Завершение процедуры доступа формирует флаг пре­ рывания готовности EEPROM со стандартной процедурой вызова вектора прерывания EERDY с адресом SOOf. Обмен данными с EEPROM производится через регистр данных EEDR по двухбайтовому адресу, указанному в регистрах EEARH, EEARL. Про­ цедурами доступа управляют биты регистра EECR. Символические имена битов в регистре управления EECR l-l-l-l-l EERIE | EEMWE 1 EEWE j EERE [ EERIE - бит разрешения прерывания EEPROM, это прерывание формиру­ ется при нулевом значении бита разрешения записи EEWE. EEMWE - бит записи данных в EEPROM, при единичном значении EEWE записывает в EEPROM данные из регистра EEDR по адресу, ука­ занному в регистрах адреса. EEWE - бит разрешения записи. EERE - бит управления чтением данных, при единичном значении произ­ водится чтение данных из EEPROM в регистр EEDR. Процедура записи данных усложнена для защиты от несанкционирован­ ного изменения данных. Более подробную информацию можно найти в ру­ ководствах фирмы ATMEL. 3.8. Система прерываний и регистры общего управления Аппаратные прерывания в микроконтроллере обрабатываются 17 векто­ рами прерываний с жестко закрепленными адресами во флэш-памяти в диапазоне от $000 до $010. Уровни приоритетов векторов прерываний оп­ ределяются их адресами, наименьшему адресу $000 соответствует самый высокий приоритет. Стандартный текст программы со ссылками на метки подпрограмм обработки прерываний должен быть следующим: $000 $001 $002 $003 66 rjmp RESET rjmp EXTINT0 rjmp EXT_INT1 ;

Reset Handler ;

IRQ0 Handler ;

IRQ1 Handler rjmp TIM2_COMP ;

Timer2 Compare Handler $004 $005 $006 $007 $008 $009 $00a rjmp TIM2OVF ;

Timer2 O v e r f l o w Handler rjmp TIM1_CAPT ;

T i m e r l C a p t u r e rjmp TIM1_C0MPA rjmp TIM1_C0MPB rjmp TIM1_0VF rjmp TIM0_OVF rjmp SPI_STC Handler ;

T i m e r l CompareA H a n d l e r ;

T i m e r l CompareB H a n d l e r ;

Timerl Overflow ;

TimerO O v e r f l o w ;

SPI T r a n s f e r ;

Handler Handler Handler Handler Complete $00b $00c $00d $00e $00f $ rjmp UART_RXC rjmp UART_DRE rjmp UART_TXC rjmp ADC rjmp EE_RDY rjmp ANA_COMP ;

UART RX C o m p l e t e ;

UDR Empty H a n d l e r ;

UART TX C o m p l e t e ;

ADC C o m p l e t e ;

Handler Handler Interrupt ;

EEPROM Ready H a n d l e r ;

Analog Comparator Handler Использовать эту область памяти для хранения кодов других команд не­ целесообразно, так как ошибочное формирование флага прерывания может привести к вызову соответствующего вектора с некорректным выполнени­ ем процедуры обработки. Вектора прерываний с адресами $003 - $010 опи­ саны в предыдущих разделах и служат для вызова подпрограмм, необхо­ димых для реализации соответствующих функций встроенных аппаратных средств микроконтроллера. Вектор RESET с адресом $000 выполняет инициализацию микрокон­ троллера при начальном сбросе. Обработка этого вектора не требует ника­ ких условий, т.е. вектор может быть вызван в произвольный момент време­ ни независимо от состояния и режима работы микроконтроллера. RESET загружает в программный счетчик начальный адрес $000 и вызывается в следующих случаях: при включении питания микроконтроллера или вре­ менном снижении напряжения питания в процессе работы ниже критиче­ ской величины, при поступлении на вход микроконтроллера RESET сиг­ нала низкого уровня длительностью более 50 не, при формировании сиг­ нала RESET сторожевым таймером. В регистре микроконтроллера MCUSR биты EXTRF (бит 1), PORF (бит 0) позволяют определить причину начального сброса. EXTRF устанавлива­ ется при начальном сбросе внешним сигналом, PORF устанавливается при сбросе по включению питания. Если эти биты обнулить программной запи­ сью содержимого этого регистра, после следующего начального сброса можно определить источник формирования этого сигнала. Сброс стороже­ вым таймером при чтении определится кодом 00, сброс внешним сигналом - кодом 10, сброс включением питания - кодами 01, 11. Процедура вызова всех остальных векторов прерывания отличается от RESET. Во-первых, должен быть установлен флаг общего разрешения пре­ рываний I в регистре SREG и бит разрешения данного прерывания в соот­ ветствующем регистре. Во-вторых, установка определенного флага преры­ вания вызывает соответствующий вектор прерывания (только при выпол­ нении первого условия). При одновременном формировании нескольких флагов прерываний очередность обработки определяется уровнями при­ оритетов (чем меньше адрес вектора, тем выше уровень приоритета). Втретьих, при загрузке адреса прерывания в программный счетчик автома­ тически очищаются флаг I, запрещая другие прерывания, и флаг данного прерывания, а текущее состояние программного счетчика загружается в стек. Подпрограмма обработки прерывания должна завершаться командой "reti", которая восстанавливает разрешение прерываний (флаг I) и состоя­ ние программного счетчика (загружается из стека). Возможен програм­ мный сброс флага прерывания (без вызова вектора прерывания) записью единицы в соответствующий бит регистра флагов прерываний, а также программное разрешение прерываний (флаг I) в любой подпрограмме об­ работки прерываний. Регистр состояния микроконтроллера SREG, как и остальные регистры управления, находится в файле регистров ввода-вывода. Кроме флага об­ щего разрешения прерываний, регистр SREG содержит флаги - стандарт­ ные признаки результатов преобразования данных, необходимые для вы­ полнения ряда команд в рабочих программах микроконтроллера. Содержа­ ние регистра может измениться в процессах обработки прерываний, необ­ ходимо в подпрограммах обработки прерываний предусмотреть сохране­ ние содержимого этого регистра в стеке с восстановлением перед выходом из подпрограммы. Символические имена флагов в регистре состояния SREG |I|T!H|S|V|N|Z|C| I - флаг общего разрешения прерываний, может устанавливаться и очи­ щаться программно соответствующими командами или аппаратно при обработке прерываний. Т - бит копирования, используется для временного хранения отдельных битов командами BLD, BST. Н - флаг полупереноса, формируется в некоторых арифметических опера­ циях как результат переноса между младшей тетрадой и старшей тет­ радой в байте. S - флаг знака, его значение определяется суммой по mod 2 флагов N ® V. V - флаг дополнения до двух. N - флаг отрицательного результата арифметических или логических опе­ раций. Z - флаг нулевого результата арифметических или логических операций. С - флаг переноса в арифметических или логических операциях. Регистр - указатель стека имеет размер 2 байта и состоит из двух реги­ стров SPL, SPH файла регистров ввода-вывода. При инициализации необ­ ходимо всегда определять адрес вершины стека. Рекомендуется задавать максимальный физический адрес ОЗУ с символическим именем RAMEND, тогда объем стека будет определяться физическим объемом ОЗУ. Стек все­ гда используется при вызове векторов прерываний для сохранения текуще­ го состояния программного счетчика. Сигналы внешних прерываний INTO (альтернативная функция линии PD2) и INT1 (альтернативная функция линии PD3) обрабатываются с помощью регистров GIFR, GIMSK и общего регистра управления MCUCR файла регистров ввода-вывода. В регистре GIMSK биты INT1 (бит 7) и INTO (бит 6) определяют разрешение внешних прерываний, а в регистре GIFR флаги INTF1 (бит 7) и INTFO (бит 6) обеспечивают вызов векторов внешних прерываний по процедурам, аналогичным обработке других векторов прерываний. Параметры сигналов, формирующие флаги внешних прерываний, опре­ деляются битами ISC01, ISC00 и ISCll, ISC10 регистра MCUCR. Осталь­ ные биты этого регистра определяют параметры режима sleep, в этом ре­ жиме приостанавливается работа основных устройств микроконтроллера для снижения энергопотребления и уровня помех. Символические имена битов управления в регистре MCUCR 11 SE | SMI | SMO | ISCll | ISC10 \ ISC01 I ISCOO I SE - бит разрешения режима sleep;

если бит установлен, микроконтроллер программно переводится в режим sleep командой "sleep". SMI и SMO определяют вид режима sleep: 00 - режим idle, 01 - не используется, 10 - режим power-down, 11 - режим power save. Младшие 4 бита определяют параметры сигналов внешних прерываний для формирования флагов INTF1, INTF0. Биты попарно управляют обработкой каждого из этих сигналов, ISCX1, ISCX0 (X - это 0 или 1) могут прини­ мать следующие значения: 00 - низкий уровень сигнала внешнего прерывания ус­ танавливает флаг, 01 - не используется,. 10 - падающий фронт сигнала внешнего прерывания устанавливает флаг, 11 - нарастающий фронт сигнала внешнего прерывания устанавливает флаг. Необходимо учитывать, что при конфигурировании PD2 или PD3 выходом, программное изменение этих сигналов также формирует соответствующие флаги и может приводить к вызову векторов прерываний. Сторожевой таймер (Watchdog Timer) можно использовать для кон­ троля корректности работы микроконтроллера. Если сторожевой таймер включен битами управления регистра WDTCR, через определенные ин­ тервалы времени (задаются программно в интервале от 15 мс до 2 с) фор­ мируется сигнал RESET. Корректно работающая программа должна преду­ сматривать периодический сброс сторожевого таймера, предотвращая по­ вторную инициализацию микроконтроллера сигналом RESET. Отсутствие своевременного сброса сторожевого таймера может рассматриваться как некорректное выполнение каких-либо функций и приведет к повторной инициализации. Режимы и параметры работы сторожевого таймера опреде­ ляются программно через регистр управления WDTCR, который досту­ пен для записи и чтения. Символические имена битов управления в регистре WDTCR -. WDTOE J WDE WDP2 ] WPP1 PwDPO [ WDTOE - бит разрешения для изменения состояния сторожевого таймера. WDE - бит включения сторожевого таймера;

1 - таймер включен, 0 - таймер выключен. WDP2, WDP1, WDP0 - биты управления периодом формирования сигнала RESET сторожевым таймером. 000 - минимальный период (около 15 мс), 1 1 1 - максимальный период (около 2 с). Изменение состояния сторожевого таймера (включен/выключен, бит WDE) возможно только по следующему алгоритму: биты WDTOE, WDE обязательно и одновременно должны быть установлены в единицу;

затем в течение 4 тактов микроконтроллера в бит WDE должно быть записано тре­ буемое значение (0 - выключение, 1 - включение). После 4 тактов WDTOE сбрасывается автоматически. Период работы сторожевого таймера зависит от битов управления и напряжения питания, более подробную информацию можно найти в руководствах фирмы ATMEL. Основное назначение рассматриваемой системы прерываний - организа­ ция взаимодействия всех средств микроконтроллера при решении приклад­ ных задач. Все аппаратные средства микроконтроллера (процессор, тайме­ ры, интерфейсы, АЦП и т.п.) могут работать и работают параллельно и не­ зависимо друг от друга. В то же время каждое из устройств обеспечивает выполнение каких-либо ограниченных функций, которые являются только элементами общей прикладной задачи. Эта общая задача на определенных этапах требует обмена данными между устройствами, запуска или останова отдельных процедур, изменения параметров или режимов работы и т.п. Система векторов прерываний позволяет выделить моменты времени, ко­ гда завершаются очередные операции и требуется определенная реакция других элементов микроконтроллера для продолжения работы. Очевидно, что возможность параллельной реализации нескольких функ­ ций весьма существенно расширяет возможности микроконтроллера и уве­ личивает быстродействие. Во всех моделях микроконтроллеров AVR со­ держатся средства аппаратной, а, следовательно, параллельной реализации разнообразных стандартных задач, которые должны решаться при управле­ нии техническими объектами. Как показано ранее, все эти аппаратные средства многофункциональны, в них предусмотрены различные режимы и параметры работы, и они требуют программной настройки через соответ­ ствующие регистры ввода-вывода. Многофункциональность позволяет в процессе работы на различных ее этапах управлять параметрами и режи­ мами аппаратных средств. Эта возможность также может использоваться для повышения эффективности применения микроконтроллеров. Указанные дополнительные преимущества микроконтроллеров требуют эффективного и корректного взаимодействия параллельно работающих ап­ паратных средств. Необходимость взаимодействия накладывает опреде­ ленные офаничения на апгоритмы работы, которые необходимо учитывать при подготовке рабочих программ микроконтроллеров. Очевидно, что все основные процедуры организации взаимодействия реализуются программ­ но, должны быть предусмотрены в алгоритмах работы и требуют дополни­ тельных программных ресурсов. Система прерываний является необходи­ мым и важнейшим элементом управления работой аппаратных средств. Именно процедуры обработки прерываний в микроконтроллерах AVR позволяют выполнять достаточно гибкий, программно-управляемый кон­ троль реализуемых функций. Средства управления работой аппаратных средств в обработке прерываний следующие: • установленные приоритеты векторов прерываний - при одновременном поступлении нескольких запросов прерываний сначала вызывается век­ тор прерывания с наименьшим адресом;

• программное управление флагом общего разрешения прерывания (флаг I регистра SREG) - в любых программах на произвольных этапах с по­ мощью этого флага можно программно запрещать или разрешать обра­ ботку всех прерываний;

• аппаратное управление флагом общего разрешения прерывания - при вызове любого вектора прерывания флаг глобального разрешения I очищается аппаратно и восстанавливается (командой reti) при заверше­ нии обработки прерывания (кроме того, подпрограмма обработки любо­ го вектора прерывания также может программно изменять состояние флага I, разрешая обработку и других прерываний);

• вектора прерываний содержат в соответствующих регистрах вводавывода индивидуальные флаги разрешения (маскирования) - это позво­ ляет программно разрешать или запрещать вызов каждого из векторов прерываний на любых этапах работы независимо от других векторов;

• флаги вызова векторов прерываний в регистрах ввода-вывода очищают­ ся аппаратно при обращении к п/программе обработки прерывания;

• флаги вызова векторов прерываний могут очищаться программно запи­ сью единицы в эти биты регистров ввода-вывода - это позволяет при необходимости отменять вызов п/программ обработки прерываний. Стандартное распределение параллельно реализуемых в микроконтрол­ лере функций для управления техническим объектом может быть следую­ щим (каждый пункт в данном примере - отдельный параллельно реализуе­ мый процесс): 1. АЦП выполнят преобразование поступающего от датчика аналогового сигнала (время преобразования около 100 мкс, за этот период процессор может выполнить несколько сот команд рабочей программы). 2. Процессор, выполняя команды основной программы, производит обра­ ботку кодов, поступивших ранее от АЦП и других интерфейсов микро­ контроллера, и формирует новые значения управляющих сигналов и данных для индикации. 3. Параллельные порты ввода-вывода обеспечивают вывод сформиро­ ванных ранее сигналов управления и индикации. 4. Таймеры формируют сигналы с заданными ранее в программе времен­ ными характеристиками и/или в режиме модулятора ШИМ выдают сиг­ налы управления исполнительными устройствами. 5. Интерфейс SPI передает полученные от процессора данные для управ­ ления символьным или матричным индикатором.

6. Интерфейс UART реализует обмен данными с СОМ-портом персональ­ ного компьютера для координации работы микроконтроллера с другими устройствами. 7. Внешние прерывания обеспечивают прием и обработку сигналов циф­ ровых датчиков и сигналов управления, требующих быстрой реакции микроконтроллера (например, сигнал аварийной остановки системы управления и т.п.). Очевидно, что перечисленные процессы асинхронны относительно друг друга, каждое из устройств реализует заданные функции со своими режи­ мами и временными границами. Основную координирующую роль может выполнять только процессор, обеспечивая необходимый обмен данными между устройствами и управляя их режимами и параметрами через регист­ ры ввода-вывода. Основное требование, которое предъявляется к организации взаимодей­ ствия, - бесконфликтный доступ к ресурсам, так как различные средства микроконтроллера могут одновременно выставлять запросы на доступ к одним и тем же ресурсам. Корректное управление должно обеспечиваться даже путем снижения эффективности работы отдельных аппаратных средств. Необходимые координирующие функции должны быть преду­ смотрены в алгоритме основной рабочей программы и могут быть выпол­ нены благодаря эффективной системе обработки прерываний. Для реализа­ ции координирующих функций необходимы определенные, в первую оче­ редь программные ресурсы микроконтроллера, эти функции обычно доста­ точно сложны и являются важнейшей частью общего алгоритма работы.





4. СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ AVR Реализация необходимых функций микроконтроллером требует эффек­ тивного управления его программно-аппаратными средствами. Это управ­ ление и координация работы различных средств производится рабочими программами. Подготовка рабочих программ микроконтроллеров может выполняться на персональном компьютере с помощью инструментальных средств фирмы ATMEL, например, AVR Studio. Инструментальный пакет AVR Studio содержит средства подготовки текстов программ на языках С и ассемблере, компиляторы для формирова­ ния загрузочных файлов, симулятор для отладки программ и драйвер про­ грамматора для внутрисистемного программирования микроконтроллеров. В связи с тем, что значительная часть функций в микроконтроллере реали­ зуется аппаратными средствами, и ассемблер обеспечивает более рацио­ нальное программное управление этими средствами, в дальнейшем будем рассматривать программирование только на ассемблере. Система команд микроконтроллера AT90S8535 содержит 118 команд и предусматривает выполнение стандартных операций пересылки данных, арифметических и логических операций, команд управления. К дополни­ тельным возможностям, реализованным в системе команд, можно отнести: • выполнение двух операций одной командой (например, команда Id r24, X+ производит пересылку байта данных из ОЗУ в регистр R24 с последующим инкрементом адреса в регистре X);

• операции с отдельными битами (например, команда cbr r 18, 2 очищает (обращает в 0) бит 1 регистра R18);

• операции с данными не только в файле регистров общего назначения, но и в файле регистров ввода-вывода (например, команда sbi PORTC, PC7 устанавливает (обращает в 1) бит 7 регистра PORTC);

• условные команды управления по состоянию любого бита регистра со­ стояния SREG или других регистров (например, команда brtc label вы­ полняет переход к метке label, если флаг копирования Т очищен). В дальнейшем будут использоваться стандартные мнемонические обо­ значения как для команд, так и для их параметров. Стандартные мнемони­ ческие обозначения (имена) регистров и отдельных битов в них содержатся в специальных файлах, например, M8535def.inc", и включаются с помощью директив компилятора в тексты программ. Регистр состояния (флагов) микроконтроллера SREG играет важную роль в рабочих программах, биты этого регистра определяют условия для выполнения команд управления.

Регистр состояния микроконтроллера SREG I T H S V N Z C Флаги регистра SREG (начиная со старшего бита): I - флаг глобального разрешения прерывания, разрешает (1) или запрещает (0) все аппаратные прерывания. Т - флаг копирования бита, может быть скопирован из любого бита (или в любой бит) любого регистра общего назначения. Н - флаг переноса между младшей и старшей тетрадой байта данных. S - флаг знака, определяется суммой по mod 2 флагов N ® V. V - флаг переполнения (дополнения до двух). N - флаг отрицательного результата (соответствует значению бита 7 ре­ зультата операции). Z - флаг нулевого результата операции. С - флаг переноса. При использовании команд с анализом флагов регистра SREG необходимо учитывать, что эти флаги формируются не всеми операциями, например, операции пересылки данных флаги не изменяют. 4.1. Система команд микроконтроллеров AVR В мнемонических обозначениях команд всегда первым указывается ре­ гистр, в который помещается результат операции: любой регистр файла ре­ гистров общего назначения, файла регистров ввода-вывода, ячейка ОЗУ. Ограничения на параметры и операнды команд приведены в примечании. В описании команд приняты следующие обозначения: Rd - регистр, в который помещается результат операции (любой регистр общего назначения). Rr - регистр, из которого поступает байт данных для операции (любой ре­ гистр общего назначения). К - константа (байт данных), число в десятичном формате от 0 до 255, в шестнадцатеричном формате могут использоваться два варианта обо­ значения: 0x00 - Oxff или $00 - $ff, в двоичном формате - следующее обозначение: 0Ь00000000 — 0Ы1111111. к - константа адрес (два байта в пределах каждого адресного пространст­ ва), также может указываться в десятичном, шестнадцатеричном или двоичном формате. X, Y, Z - регистры косвенной адресации (в файле регистров общего назна­ чения регистр X - R27,R26;

регистр Y - R29,R28;

регистр Z R30,R31). Р - регистр файла регистров ввода-вывода. b - бит от 0 до 7 в любом регистре (старший бит - 7, младший бит - 0). PC - программный счетчик. STACK - стек. РМ - память программ (FLASH).

4.1.1. Арифметические и логические команды Таблица 2 Команда add Rd, Rr adc Rd, Rr Описание Сложение, Rd <- Rd+Rr Сложение с переносом, Rd «- Rd+Rr+C Сложение слова (2 байта, R(d+l)Rd) с константой К, R(d+l)Rd <- R(d+l)Rd+K Вычитание, Rd <- Rd-Rr Вычитание константы, Rd +- Rd-K Вычитание с переносом, Rd «- Rd-Rr-C Вычитание константы с пе­ реносом, Rd«- Rd-K-C Вычитание из слова (2 байта, R(d-H)Rd) константы К, R(d+l)Rd+-R(d+l)Rd-K Инкремент, Декремент, Rd«— Rd+1 Rd <— Rd-1 Флаги HVNCZ HVNCZ d=(24,26,28,30), K=(0-63) Примечание adiwRd, К SVNCZ sub Rd, Rr subi Rd, К sbc Rd, Rr sbci Rd, К HVNCZ HVNCZ HVNCZ HVNCZ d=(16-31) d=(24,26,28,30), K=(0-63) d=(16~31) sbiwRd, К incRd Idee Rd and Rd, Rr andi Rd, К or Rd, Rr SVNCZ VNZ VNZ VNZ VNZ VNZ Логическое И, Rd «- Rd*Rr Логическое И с константой, Rd +- Rd*K Логич. ИЛИ, Rd<-RdVRr d=(16-31) Продолжение табл. 2 Команда ori Rd, К eor Rd, Rr com Rd neg Rd Описание Логическое ИЛИ с констан­ той, R d ^ R d V K Исключающее ИЛИ, Флаги VNZ VNZ VNZ HVNCZ Примечание (Н16-31) Rcl«-Rd©Rr Инверсия, Rd «- $ff-Rd Дополнение, Rd *- $00-Rd asr Rd Арифметический сдвиг вправо, старший бит Rd(7) не изменяется, остальные биты Rd сдвигаются вправо, флаг С <- Rd(0) Логический сдвиг влево, все биты Rd смещаются влево, младший бит Rd(0) < 0. — флаг С • - Rd(7) Логический сдвиг вправо, все биты Rd смещаются вправо, старший бит Rd(7)<-0^arO-Rd(0) Циклический сдвиг влево с переносом, все биты Rd смещаются влево, младший бит Rd(0) < С, — флаг С «- Rd(7) Циклический сдвиг вправо с переносом, все биты Rd смещаются вправо, старший бит Rd(7)«— С, флаг С <- Rd(0) VNCZ lsl Rd VNCZ lsr Rd VNCZ rol Rd VNCZ ror Rd VNCZ t Окончание табл. 2 Команда Описание Тест на ноль или минус Rd не изменяется, флаги Z и N определяются содержи­ мым Rd, V <-0 Флаги Примечание tst Rd SVNZ ср Rd, Rr срс Rd, Rr cpi Rd, К Сравнение, содержимое регистров не изменяется, флаги формиру­ HVNCZ ются в соответствии с ре­ зультатом вычитания Rd~Rr Сравнение с учетом переноса, содержимое регистров не изменяется, флаги форми­ HVNCZ руются в соответствии с ре­ зультатом вычитания Rd-Rr-C Сравнение с константой, содержимое регистров не изменяет, флаги формиру­ HVNCZ ются в соответствии с ре­ зультатом вычитания Rd-K d=(16-31) Арифметические и логические команды реализуют стандартный набор операций с однобайтовыми данными микроконтроллера с RISC архитекту­ рой. Примеры: • команда add R3, R16 выполняет сложение содерэюимого регистров R3 и R16, полученная сумма будет записана в R3, содержимое регистра R16 не изменится, результат сложения определит значения флагов HVNCZ;

• команда subi R21, $F0 выполняет вычитание из содерэюимого регистра R21 числа 240 (в шестнадцатеричном формате $F0), полученная раз­ ность будет записана в R21, результат вычитания определит значения флагов HVNCZ (в примечании указано ограничение на используемые в этой команде регистры общего назначения R16-R31);

• команда and R3, R4 выполняет поразрядную логическую операцию И (конъюнкцию) содерэюимого регистров R3 и R4, результат будет запи сан в R3, содержимое R4 не изменится, по результатам операции фор­ мируются только флаги VNZ;

• команда asr R0 выполняет деление на 2 числа со знаком в регистре R0, т. е. выполнится сдвиг вправо на один разряд всех битов регистра R0, кроме старшего знакового бита 7, младший бит 0 будет перемещен во флаг С, остальные флаги VNZ определяются результатом деления. Некоторые модели микроконтроллеров серии AVR позволяют выполнять и другие операции. Например, модели megaAVR содержат аппаратный ум­ ножитель и выполняют операции умножения. При подготовке программ необходимо учитывать ограничения, указан­ ные в примечаниях. Например, операции с константами допустимы не для всех регистров общего назначения. Во всех остальных случаях так же, как и в дальнейшем, регистры Rd и Rr - любые из регистров общего назначе­ ния. Как и обычно, флаги регистра состояния SREG определяются результа­ том выполнения текущей операции. Если какой-либо флаг для команды не указан, это означает, что флаг данной операцией не изменяется. Команды сравнения не изменяют данные в регистрах, но, формируя соответствую­ щие флаги, позволяют использовать команды управления по состоянию этих флагов.

4.1.2. Команды пересылки данных Таблица 3 Команда mov Rd, Rr ldi Rd, К Описание Пересылка данных между реги­ страми, Rd « Rr — Загрузка константы в регистр, Rd<-K Пересылка данных в Rd из ОЗУ (адрес k), Rd <- ОЗУ(к) Пересылка данных из Rr в ОЗУ (адрес к), ОЗУ(к) <- Rr Пересылка данных из регистра ввода-вывода Р в регистр Rd, Rd<-P Флаги Нет Нет d=(16-31) Примечание Ids Rd, k Нет sts k, Rr Нет in Rd, P Нет Таблица Команда Описание Пересылка данных из регистра Rr в регистр ввода-вывода Р, P«-Rr Пересылка данных из регистра Rr в стек, STACK <~ Rr Пересылка данных в регистр Rd из стека, Rd — STACK Флаги Примечание out P, lb Нет push Rr Нет popRd Нет Команды пересылки косвенной адресации с использованием регистров X, Y, Z Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром X, Rd «- ОЗУ(Х) Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром X, и предшествующим декрементом X, Rd*~03y(X-l), X«-X-l Id Rd, X Нет Id Rd, -X Нет Id Rd, X+ Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ Нет гистром X, и последующим ин­ крементом X, Rd«-03y(X), X<-X+l J Пересылка данных из регистра Rr в ОЗУ с адресом, указанным регистром X, ОЗУ(Х) <- Rr st X, Rr Нет Продолжение табл. 3 Команда Описание Пересылка данных из регистра Rr в ОЗУ с адресом, указанным регистром X, и предшествующим декрементом X, 03y(X-l)<-Rr, X —Х-1 Пересылка данных из регистра Rr в ОЗУ с адресом, указанным регистром X, и последующим инкрементом X, 03y(X)+-Rr, Х«-Х+1 Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром Y, Rd <- 03Y(Y) Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром Y, и предшествующим декрементом Y, Rd<-03y(Y-l), Y«-Y-l Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром Y, и последующим ин­ крементом Y, Rd+-03Y(Y), Y<-Y+l Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром Y со смещением к, Rd <- ОЗУ (Y+k) Пересылка данных из регистра Rr в ОЗУ с адресом, указанным реги­ стром Y, 03Y(Y)«- Rr Флаги Примечание st -X, Rr Нет st X+, Rr Нет Id Rd, Y Нет Id Rd, -Y Нет Id Rd, Y+ Нет ldd Rd, Y+k Нет к=(0-63) st Y,Rr Нет Продолжение табл. Команда Описание Пересылка данных из регистра Rr в ОЗУ с адресом, указанным регистром Y, и предшествующим декрементом Y, ОЗУ(У-1)«-Rr, Y*-Y-l Пересылка данных из регистра Rr в ОЗУ с адресом, указанным регистром Y, и последующим инкрементом Y, 03Y(Y) 4- Rr, Y<-Y+l Пересылка данных из регистра Rr в ОЗУ с адресом, указанным регистром Y со смещением к, ОЗУ (Y+k) «- Rr Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром Z, и предшествую-щим декрементом Z Rd«-03Y(Z-1), Z«-Z-l Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гистром Z, и последующим ин­ крементом Z, Rd<-03Y(Z), Z<-Z+l Пересылка данных в регистр Rd из ОЗУ с адресом, указанным ре­ гислром Z со смещением к, Rd <- 03Y(Z+k) Флаги Примечание st -Y, Rr Нет st Y+, Rr Нет std Y+k, Rr Нет к=(0-63) Id Rd, - Z Нет Id Rd, Z+ Нет lddRd,Z-*k Нет к-(0-63) 1 st Z, Rr st ~Z, Rr Пересылка данных из регистра Rr I в ОЗУ с адресом, указанным ре­ Нет гистром Z, 03Y(Z) «- Rr Пересылка данных из регистра 1 Rr в ОЗУ с адресом, указанным регистром Z, и предшествующим Нет декрементом Z, 03y(Z-l)*-Rr, Z<-Z-l I Окончание табл. 3 Команда Описание Флаги Примечание st Z+, Rr std Z+k, Rr 1pm Пересылка данных из регистра Rr в ОЗУ с адресом, указанным Нет регистром Z, и последующим инкрементом Z, 03Y(Z)^-Rr, Z<-Z+l Пересылка данных из регистра Rr в ОЗУ с адресом, указанным Нет ре-гистром Z со смещением к, ОЗУ (Z+k) «- Rr Пересылка данных в регистр R0 из FLASH по адресу, указанному ре­ Нет гистром Z, R 0 « - PM(Z) к=(0 - 63) Команды пересылки данных также реализуют стандартный набор опе­ раций: • пересылка байта данных между регистрами общего назначения (mov);

• пересылка байта данных между регистром общего назначения и регист­ ром ввода-вывода (in, out);

• пересылка байта данных (с прямой или косвенной адресацией) между регистром общего назначения и ОЗУ (Id, st) или стеком (pop, push). Команда загрузки константы в регистр допустима только для регистров R16-R31. Команды пересылки данных флаги не формируют, формиро­ вание флагов по содержимому байтов данных при необходимости можно выполнить командами сравнения. В мнемонических обозначениях команд можно использовать физиче­ ские адреса регистров или, что обычно более удобно и наглядно, стандарт­ ные символьные имена, описанные в файле "8535def.inc". Например, ко­ манды out $08, R16 и out ACSR, R16 имеют один и тот же смысл: пере­ сылка содержимого регистра общего назначения R16 в регистр управления АЦП. Необходимо помнить, что управление всеми аппаратными средствами микроконтроллера производится пересылкой байтов управления, сформи­ рованных программно в регистрах общего назначения, в соответствующие регистры файла регистров ввода-вывода командой out. Анализ текущего состояния аппаратных средств можно производить чтением содержимого регистров ввода-вывода командой in. Как указывалось ранее, вектора пре­ рываний для координации работы аппаратных средств должны обеспечи­ вать программное управление параметрами и режимами их работы. Необ ходимый для выполнения этих функций обмен данными производится ко­ мандами in, out. Пересылка данных между регистрами общего назначения и EEPROM данных производится через соответствующие регистры ввода-вывода спе­ циальной процедурой. Команда Ipm позволяет загружать в регистр R0 кон­ станты, которые хранятся в памяти программ (FLASH). Адрес FLASH дол­ жен указываться в регистре Z. Каждая ячейка FLASH хранит два байта, поэтому младший бит регист­ ра Z (бит 0) определяет байт для пересылки в регистр R0 (0 - младший байт, 1 - старший байт). Адрес FLASH находится в регистре Z, начиная с бита 1. То есть бит 1 соответствует младшему биту адреса FLASH, что не­ обходимо учитывать при записи адреса в регистр Z. Адрес FLASH для ре­ гистра Z можно указать выражением Z=2*^pec FLASH), а бит 0 регистра Z формировать дополнительно в зависимости от того, какой байт двухбай­ товой ячейки FLASH пересылается в регистр R0. 4.1.3. Команды управления Таблица Команда rjmpk Описание Флаги Примечание -2048 < к < Безусловный переход (изме­ Нет нение PC на k), PC «~ PC+l+k Безусловный переход с ад­ ресацией по Z, PC < Z — Вызов подпрограммы (изме­ нение PC на к), STACK*- PC, РС<- РС+1+к Вызов подпрограммы с ад­ ресацией по Z, STACK*-PC, PC<-Z Возврат из подпрограммы, PC <- STACK Возврат из прерывания, PC — STACK, I = 1 Нет ijmp rcall k Нет -2048<к< icall Нет ret reti Нет I Продолжение табл. Команда Описание [ Условный переход (измене­ ние PC на к), если бит b в SREG установлен, PC < — PC+1-fk, если8ЯЕО(Ь)==1 1 Условный переход (изме­ нение PC на к), если бит b SREG очищен, PC <РС+1 +к, если SREG(b)=0 Условный переход (изме­ нение PC на к), если равно, PC <- РС+Нк, если флаг Z=l Флаги Примечание brbs b, к Нет -64<к< brbc b, к Нет -64<к< breq к Нет -64<к< brnek Переход (изменение PC на к), если не равно, PC < PC+1 +к, Нет — если флаг Z=0 Условный переход на к по флагу С=0, PC <- РС+1+к, если флаг С=0 N=1 N=0 V=l V=0 S=l, S=0 H=l H=0 1 T=l 1 Условный переход на к по флагу N Условный переход на к по флагу V Условный переход на к по флагу S Условный переход на к по флагу Н Условный переход на к по флагу Т Условный переход на к по флагу I Нет -64<к< brcc к (brio к) brmi к |Ьф1к brvs к brvck brge к brltk brhs к brhc к bits к brtck brie к -64

сравнить содержимое регистров RO, R21 breq inter ;

если равно, перейти к inter (смещение не более 63) inter: rjmp fin fin: nop ;

перейти к fin (смещение в пределах адр. простр. РМ) ;

программа выполняется по равенству R0-R Команды "пропустить" (последние пять команд) выполняют условный переход со смещением только на одну команду. В комбинации с командами rjmp или rcall позволяют реализовать переход в любую часть программы аналогично приведенному выше примеру.

4.1.4. Команды преобразования битов в регистрах Таблица 5 Команда sbr Rd, К cbr Rd, К sbi P, b cbi P, b bst Rr, b bid Rd, b swap Rd Описание Установить в регистре Rd би­ ты по маске К Очистить в регистре Rd биты по маске К Установить в регистре вводавывода Р бит b, P(b)=l Очистить в регистре вводавывода Р бит b, Р(Ь)=0 Пересылка бита b из регистра Rr во флаг Т, Т <- Rr(b) Пересылка бита b в регистр Rd из флага Т, Rr(b) <- Т Поменять местами старшую и младшую тетрады в регистре Rd Нет Флаги Нет Нет Нет Нет Т Примечание d = (16-31) d = (16-31) Р = (0-31) Р = (0-31) Нет Окончание табл. 5 Команда serRd clrRd bsetb bclr b clc sez clz sen cln sev civ ses els Описание 1 Установить все биты регист­ ра Rd, Rd — $ff 1 Очистить все биты регистра Rd, R d « - $00 Установить бит b в регистре SREG, SREG(b) «- 1 Очистить бит b в регистре 1 SREG, SREG(b) «- 0 Очистить флаг С, Установить флаг Z, Очистить флаг Z, Установить флаг N, Очистить флаг N, Установить флаг V, Очистить флаг V, Установить флаг S, Очистить флаг S, Установить флаг Н, Очистить флаг Н, Установить флаг Т, Очистить флаг Т, Установить флаг I, С< 0 — Z< 1 — Z«— 0 N< 1 — N< 0 — V< 1 — V< 0 — S< 1 — S* 0 — Н< 1 • — Н* 0 — Т< 1 — Т< 0 — I *- 1 I< 0 — Флаги Нет VNZ SREG(b) SREG(b) С Z Z N N V V S S Примеч. d = (16-31) 1 cUl set ! clt sei seh н н т т I cli I Очистить флаг I, I I Команды преобразования битов позволяют определять значения от­ дельных битов в регистрах общего назначения (с ограничениями, указан­ ными в примечании), в первых 32 регистрах ввода-вывода (0-31) и в реги­ стре состояния SREG. Флаг глобального разрешения прерывания I управ­ ляет всеми аппаратными прерываниями микроконтроллера и может в лю бой части программы определять разрешение (команда sei) или запрет (ко­ манда cli) прерываний. Флаг копирования бита Т обеспечивает передачу любого бита одного регистра в любой бит другого (или того же самого) ре­ гистра общего назначения без изменения остальных битов: bst R12, 4 ;

пересылка бита 4 регистра R12 во флаг Т bidR16, 0 ;

пересылка флага Те бит 0регистра R16 Команды sbr и cbr по маске К определяют биты в регистре Rd, соответ­ ствующие единичным значениям битов константы К: cbr R16, ОЬЮЮОПО ;

очистка битов 7, 5, 2, 1 в регистре R16 sbr R17, $0f установка 4 младших битов в регистре RI7 Команды sbi и сЫ позволяют задавать значения произвольных битов в регистрах ввода-вывода (0-31), например, sbi PORTC, РСО устанавливает бит 0 регистра PORTC.

4.1.5. Прочие команды Таблица 6 Команда пор sleep wdr Описание Нет операции Переход в режим sleep Сброс сторожевого таймера Флаги Нет Нет Нет Примечание Эти команды служат для управления специальными режимами микро­ контроллера. Команда sleep переводит микроконтроллер в состояние покоя (sleep mode) с пониженным энергопотреблением и ограниченным функ­ ционированием его элементов, если в управляющем регистре ввода-вывода MCUCR этот режим разрешен. Команда wdr осуществляет программный сброс сторожевого таймера и используется в контрольных точках програм­ мы, когда работа сторожевого таймера разрешена.

4.2. Компилятор ассемблера микроконтроллеров AVR Компилятор транслирует исходные коды с языка ассемблера в объект­ ный код. Полученный объектный код можно использовать в симуляторе AVR Studio. Компилятор также генерирует код, который может быть непо­ средственно записан в память микроконтроллера. Текст программы для компилятора должен строго соответствовать рассмотренным ниже синтак­ сическим правилам. Приведенные ранее в примерах фрагменты программ соответствуют этим правилам. Компилятор работает с исходными файлами, содержащими в каждой строке метку, команду или директиву и комментарии. Строка не должна быть длиннее 120 символов. Любая строка может начинаться с метки, ко­ торая является набором символов, заканчивающимся двоеточием. Метки используются для указания места, в которое передаётся управление при пе­ реходах, а также для задания имён переменных. Комментарий имеет сле­ дующую форму: ;

[Текст] Текст после точки с запятой и до конца строки игнорируется компилято­ ром, эти комментарии обычно объясняют назначение и смысл выполняе­ мых операций, что существенно облегчает понимание реализуемых в про­ грамме алгоритмов работы. Входная строка может иметь одну из четырёх форм (позиции в квадрат­ ных скобках необязательны): [метка:] директива [операнды] [/Комментарий] [метка:] команда [операнды] [;

Комментарий] ;

Комментарий Пустая строка Перечень команд с допустимыми операндами (регистры, адреса, кон­ станты или метки) приведен выше. Каждая команда преобразуется ком­ пилятором в соответствующий код операции программы микрокон­ троллера. Мнемоника команд и операндов должна строго соответствовать указанной в описаниях. Текст в приведенных ранее примерах использова­ ния команд составлен в соответствии с требованиями компилятора. Регистр для символов (прописные, строчные) и пробелы для компилятора значения не имеют. Директивы не транслируются непосредственно в код. Они исполь­ зуются компилятором для указания положения в программной памяти, оп­ ределения макросов, инициализации памяти и т.д. Признаком директивы служит точка перед текстом директивы, например:.CSEG. Ниже дано описание директив компилятора, которые в дальнейшем будут применяться в текстах программ. Директивы.CSEG,.DSEG,.ESEG указывают соответственно на память программ, память данных, EEPROM (EEPROM), к которым относится дальнейший текст программы (по умолчанию тексты программ предназна чены для памяти.CSEG). Эти директивы необходимы в связи с использо­ ванием трех раздельных адресных пространств в памяти микроконтролле­ ров AVR. Вместе с директивой.ORG k определяют конкретные физиче­ ские адреса ячеек памяти для хранения кодов программы:.CSEG.ORG $120 проверка старших битов АЦП more: cpi г19, $00 ;

перейти, если не равно brne repADl mov rl7,rl8 ;

сдвиг влево для проверки бита 7 Mr 17 brcs repADl ;

перейти, если бит 7 неравен.ORG $090 repADl: nop В приведенном примере коды будут записаны в памяти программ (.CSEG);

метка more и код этой строки записываются по адресу $120, последующие коды - в следующие по порядку ячейки памяти. Вторая директива.ORG $090 указывает, что код, соответствующий метке repADl, компилятор должен разместить по адресу $090. Директивы.DB (определить байты),.DW (определить слова) позволяют записать в память программ или EEPROM массивы однобайтных или двух­ байтовых констант соответственно. Могут использоваться метки для ссы­ лок на адреса памяти, по которым директивы записывают константы. Вме­ сте с директивой ORG позволяют задавать конкретные физические адреса памяти для хранения констант. Директивы DB и DW должны содержать список констант, разделенных запятыми:.ESEG const!:.CSEG.ORG $380 led:. DW $063/, $4f5b, 6d66, a77d, $0000 91. DB 02, 255, ObOlOWlOl, -128, Охаа Массив однобайтовых констант (DB) записан в EEPROM, адреса EEPROM определяются компилятором, адрес первой константы массива (02) соот­ ветствует метке const 1. Массив двухбайтовых констант (DW) записан в па­ мять программ, адрес первой константы ($063f) соответствует метке led и определяется директивой.ORG $380. Директива.INCLUDE "имя файла" (присоединить файл) позволяет включить в текст программы другие файлы. Например:.INCLUDE "8535def.inc" включает в текст программы файл определения стандартных символических имен регистров и переменных. Этот файл позволяет ис­ пользовать в текстах программ в качестве операндов символические имена, определяемый директивами компилятора DEF, EQU, SET. Директивы.DEF (установить регистру имя),.EQU (установить имени постоянное значение),.SET (установить имени переменное значение) по­ зволяют установить для компилятора соответствие символьных имен и операндов в текстах программ. Директива.EQU указывает для имени зна­ чение, которое не может быть изменено, а директива.SET допускает изме­ нение этого значения другой директивой. Значения символических имен могут задаваться в виде числовых констант или выражений. Более подроб­ но с правилами записи выражений можно ознакомиться в документации фирмы ATMEL. Примеры применения директив:.EQU MCUCR=$35.EQU MCUSR:=S34 ;

.EQU PORF =0.DEF XL—r26.DEF XH-r27 ;

установить постоянное значение для переменной с указанным символическим именем установить регистру R26 имя XL установить регистру R27 имяХН Первая директива в данном примере назначает переменной с именем MCUCR постоянное значение шестнадцатеричного числа $35 (в десятич­ ном формате 53), в командах, где требуется указать это значение операнда, можно приводить либо численное значение ($35), либо символическое имя (MCUCR). Например, команды out $35, г26 и out MCUCR, XL абсолютно эквивалентны;

в первом варианте для операндов используются их физиче­ ские значения, во втором варианте - их символические имена. Как отмеча­ лось ранее, использование символических имен существенно упрощает мнемонику команд, при подготовке программ гораздо легче работать с именами операндов, чем запоминать большое количество адресов, число­ вых констант и т.п. Целесообразно также использовать стандартные симво лические имена, назначаемые специальными файлами для каждой модели микроконтроллера. Полезными при подготовке текстов программ могут быть директивы.NOLIST (исключить из листинга),.LIST (включить в листинг). Эти ди­ рективы не содержат операндов и позволяют исключить из листинга про­ граммы текст, находящийся ниже директивы.NOLIST и выше директивы.LIST. Например, целесообразно исключать из листинга программы файл определения стандартных символических имен 8535def.inc, так как он не содержит исполняемых кодов и занимает в листинге объем нескольких страниц текста. Компилятор позволяет использовать в тексте программ выражения, ко­ торые могут состоять из операндов, операторов и функций. Формат выра­ жений - 4 байта, т.е. они могут содержать значения переменных, уклады­ вающихся в 4-х байтовый диапазон. Операндами в выражениях могут быть числа;

символические имена, оп­ ределенные директивами.SET и.EQU;

метки программы (каждая метка в тексте программы соответствует определенному числу - физическому ад­ ресу памяти);

PC - текущее состояние программного счетчика. Над операндами в выражениях можно выполнять различные математи­ ческие операции, задаваемые операторами. Операторы имеют стандартные для компьютерных приложений обозначения: • арифметические операторы: +, -, *, / ;

• операторы сдвига: влево «, вправо » ;

• логические операторы: &, &&, |, ||, !, Л ;

• операторы отношений: =, !=, <, <=, >, >=. Элементы выражений (операнды с операторами) могут быть заключены в круглые скобки, как и в любых математических преобразованиях. Выражения могут быть аргументами следующих функций: • LOW(выpaжeниe) - младший байт выражения, • НЮН(выражение) - второй байт выражения, • ВУТЕ2(выражение) то же что и функция HIGH, • В YTE3 (выражение) - третий байт выражения, • ВУТЕ4(выражение) - четвёртый байт выражения, • L\ЮЗ(выражение) - биты 0-15 выражения, • Н\^1Ш(выражение) - биты 16-31 выражения, • РАСЕ(выражение) - биты 16-21 выражения, • ЕХР2(выражение) - 2 в степени (выражение), • ЬОС2(выражение) - целая часть 1о§2(выражение).

Примеры выражений: rl6, LOW(RAMEND) ;

RAMEND=0x025f, LOW(RAMEND)~0x5f SPL, rl6 инициализация младшего байта указателя стека rl6, HIGH(RAMEND) ;

HIGH(RAMEND) =0x02 SPH, r!6 ;

инициализация старшего байта указателя стека rl6, (1«OCIE1A)\(1«TOIEO) загрузить в г 16 константу ;

в виде выражения, определяющего разрешения прерываний ;

таймеров 0 и 1 с использованием символических имен флагов ;

этих прерываний, out TIMSK, г!6 ;

передать константу из г 16 в регистр TIMSK. Очевидно, что назначение команды с константой в форме выражения бо­ лее понятно, чем с константой в виде числа 0x11. Для команды Ipm адрес FLASH указывается в регистре Z со сдвигом на 1 разряд, так как младший бит регистра Z определяет байт, который передается по этой команде из FLASH в гО (1 - старший байт, 0 - младший байт). Если адрес FLASH задан меткой (например, меткой ledbcd), про­ грамма чтения из FLASH будет следующая: Idi ZL, LOW (ledbcd*2) определение адреса FLASH eZ со сдвигом Idi ZH, HIGH(ledbcd*2) ;

на 1 разряд умножением метки на 2 ipm ;

чтение в гО младшего байта константы по метке mov rl, гО ;

пересылка младшего байта в rl inc ZL ;

адрес старшего байта (если нет переноса в ZH) Ipm ;

чтение в гО старшего байта константы по метке Примеры показывают, что использование выражений делает текст про­ граммы более наглядным и освобождает от необходимости вычисления па­ раметров для команд вручную. Idi out Idi out Mi 5. РЕАЛИЗАЦИЯ ТИПОВЫХ ФУНКЦИЙ При подготовке программ необходимо учитывать, что многие стандарт­ ные задачи могут решаться или встроенными аппаратными средствами микроконтроллера, или программно (процессором микроконтроллера под управлением соответствующей программы). В предыдущих главах приве­ дено описание всех устройств микроконтроллера и показано, что аппарат­ ные ресурсы, их режимы и параметры предназначены для выполнения опе­ раций преобразования и формирования сигналов, которые часто использу­ ются в задачах управления техническими объектами. Использование аппаратных средств для реализации стандартных функ­ ций, как правило, намного эффективнее. Во-первых, ресурсы процессора освобождаются для реализации других необходимых функций, а это при­ водит и к повышению быстродействия, и к уменьшению объемов рабочих программ. Во-вторых, различные аппаратные средства работают парал­ лельно и независимо друг от друга, самостоятельно выполняя необходимые функции, и это также повышает быстродействие и существенно расширяет функциональные возможности. В-третьих, система векторных прерываний позволяет достаточно просто организовать корректное взаимодействие и управление всеми ресурсами из рабочей программы микроконтроллера. При составлении алгоритмов решения задач рекомендуется придержи­ ваться следующей последовательности: 1. Определить функции и состав средств микроконтроллера, необходимых для решения задачи, отдавая предпочтение аппаратной реализации тре­ буемых функций. 2. Для выбранных средств реализации определить необходимые рабочие режимы, параметры этих режимов, процедуры инициализации, средства и процедуры организации взаимодействия, а также необходимые для управления и координации работы ресурсы. 3. В начальной части рабочей программы описать вектора прерываний и процедуры инициализации с указанием режимов и параметров для всех используемых аппаратных средств микроконтроллера. 4. В основной части программы организовать выполнение всех программ­ но реализуемых функций, включая процедуры взаимодействия как аппаратно реализуемых, так и программно реализуемых функций. 5. Дополнить основную программу подпрограммами обслуживания векто­ ров прерываний, необходимых для программной поддержки работы ап­ паратных средств. 6. Проверить корректность работы всех средств, используемых для реше­ ния задачи. Конфликты между параллельно работающими средствами микроконтроллера наиболее часто могут возникать из-за конкуренции при использовании общих ресурсов (регистров общего назначения, яче­ ек памяти данных, времени работы процессора и т.п.). Предварительная проверка рабочей программы производится компиля­ тором при ассемблировании и симулятором инструментального пакета AVR Studio. Необходимо учитывать, что компилятор проводит только син­ таксический контроль текста программы, а моделирование работы аппа­ ратных средств симулятором возможно в весьма ограниченных пределах. 5.1. Примеры программ для микроконтроллеров AVR Далее приводятся примеры программ для реализации стандартных функций. Пример 1. Передать в последовательном формате из микроконтроллера во внешний регистр 4 байта данных, находящихся в RAM по адре­ сам: $060, $061, $062, $063, с формированием для внешнего ре­ гистра сигнала завершения цикла передачи - load. Вариант "а". Задачу передачи данных в последовательном формате можно решить использованием интерфейса микроконтроллера SPI, для ад­ ресации данных в ОЗУ целесообразно использовать один из регистров кос­ венной адресации, например, регистр X. Для передачи данных необходимо определить в SPI режим master с формированием сигналов SCK (PB7), MOSI (PB5). Вход MISO (PB6) в дан­ ной задаче не используется, сигнал завершения цикла может быть сформи­ рован только программно на одном из выходов, например, РВ4. Регистр управления интерфейса SRCR должен быть инициализирован следующим образом: 0Ь01011100, старший бит SPIE этого регистра должен программно устанавливаться в начале цикла и очищаться в конце цикла. Необходимо также использовать вектор прерывания SPITC с адресом $00а. В приведенном далее тексте программы начальная часть, как и во всех последующих примерах программ, содержит файл определения символиче­ ских имен и обязательную процедуру инициализации стека. Текст про­ граммы (и всех остальных программ) записан в соответствии с требова­ ниями компилятора. ;

программа примера 1, вариант "а".NOLIST.INCLUDE "8535def.inc".LIST.DEFtemp = г 16 определить символическое имя temp регистру г 16.CSEG.ORG $000 rjmp init прерывание по reset.ORG $00a rjmp spite.ORG $011 ink:

прерывание по завершению передачи байта ldi temp, iow(RAMEND) out SPL, temp ldi temp, high(RAMEND) out SPH, temp ;

определить в указателе стека адрес RAMEND ldi temp, SfO out DDRB, temp ;

4 старших бита PORTB на вывод данных ldi temp, ОЬОЮШОО out SPCR, temp ;

инициализация SPI ;

запуск цикла с выводом первого байта в последовательном формате start: clr XH Idi XL, $60 ;

занести начальный адрес данных в регистр X Id temp, X+ ;

занести в temp байт с постинкрементом адреса в X out SPDR, temp ;

переслать байт в регистр данных SP1 sbi SPCR, SPIE ;

установить разрешение прерывания SPI sei ;

установить флаг общего разрешения прерываний ;

бессодержательный бесконечный цикл, может быть заменен любой ;

программой main: nop rjmp main ;

п/программа для вектора прерывания SP1 spite: cpi XL, $64 breq end ;

перейти, если цикл завершен Id temp, X+ ;

занести в temp байт с постинкрементом адреса в X out SPDR, temp ;

переслать байт в регистр данных SPI reti ;

возврат из прерывания ;

завершение цикла end: sbi PORTB, PB4 ;

установить сигнал load cbi SPCR, SPIE ;

запретить прерывание SPI cbi PORTB, PB4 ;

сбросить сигнал load reti ;

возврат из прерывания В этом варианте программы в течение цикла выдачи 4-х байт данных в последовательном формате процессор используется для запуска цикла (метка start - 6 команд), три раза для обслуживания прерывания (метка spite - 5 команд) и для завершения цикла (метки spite, end - 6 команд). То есть для решения задачи требуется всего 27 команд, остальные операции реали­ зуется аппаратно. Процедура вывода данных может быть запущена программно командой передачи управления на метку start в любой момент времени после завер­ шения цикла. Пока работает интерфейс SPI можно программно реализовать параллельное выполнение других функций. В приведенном примере это отражено бессодержательным циклом (метка main), который можно заме­ нить какой-либо прикладной программой. Вариант "б". Задачу передачи данных в последовательном формате можно решить программно, передавая на те же выходы порта В программ­ но формируемые сигналы, для адресации данных в RAM также будем ис­ пользовать регистр косвенной адресации X. ;

программа примера 1, вариант "б".NOLIST.INCLUDE "8535def.inc".LIST.DEF temp = r 16 определить символическое имя temp регистру г 16.CSEG.ORG $000 rjmp init прерывание по reset.ORG $011 init: Idi temp, low(RAMEND) out SPL, temp ldi temp, high(RAMEND) out SPH, temp ;

определить в указателе стека адрес RAMEND ldi temp,$f0 out DDRB, temp ;

4 старших бита PORTB на вывод данных sbi PORTB, PB7 ;

запуск цикла с выводом первого байта в последовательном формате start: cli ;

очистить флаг разрешения прерываний clr XH ldi XL, $60 ;

занести начальный адрес данных в регистр X byte: Id temp, Х+ ;

занести в temp байт с постинкрементом адреса в X ldi г 17, $08 ;

определить количество бит в байте bit: sbrs temp, 7 ;

пропустить, если бит 7 установлен cbi PORTB, PB5 ;

очистить РВ5 sbrc temp, 7 ;

пропустить, если бит 7 очищен sbi PORTB, PB5 ;

установить РВ5 cbi PORTB, PB7 ;

очистить РВ7 (сигнал SCK) lsl temp ;

сдвиг влево байта данных sbi PORTB, PB7 ;

установить РВ7 (сигнал SCK) ;

декремент числа бит для вывода ;

вернуться к метке bit, если не все ;

биты в байте переданы cpi XL, S64 ;

сравнить адрес с конечным для цикла brne byte ;

перейти, если цикл не завершен ;

завершение цикла end: sbi PORTB, PB4 ;

установить сигнал load nop cbi PORTB, PB4 ;

сбросить сигнал load sei ;

общее разрешение прерываний ;

бессодержательный бесконечный цикл, может быть заменен любой про­ граммой main: nop rjmpmain В варианте программной реализации фрагмент программы для вывода ка­ ждого бита (метка bit - 9 команд) повторяется 32 раза, фрагмент запуска цикла (метка start - 3 команды) и завершения цикла (метка end - 4 коман­ ды) - 1 раз, фрагмент подготовки байта для вывода (метка byte - 2 коман­ ды) - 4 раза, т.е. необходимо выполнить 303 команды. Таким образом, вариант программной реализации по объему операций, выполняемых процессором, существенно больше и, самое главное, полно­ стью загружает процессор, не позволял параллельно с выводом данных вы­ полнять какие-либо другие функции. Пример 2. Выполнить преобразование аналоговых сигналов, поступающих на входы РАО, РА1, РА2 и РАЗ, в цифровой код;

преобразовать выходные коды АЦП в 8-битовый формат, пренебрегая значе­ ниями младших разрядов;

записать полученные коды в ОЗУ по адресам: $060, $061, $062, $063. Для решения задачи будем использовать АЦП в режиме однократного преобразования с повышенной тактовой частотой, так как младшие разря­ ды выходного кода АЦП не используются. Вектор прерывания АЦП необ­ ходимо использовать для приема и обработки выходного кода АЦП. Номер бита порта А, с которого поступает сигнал для преобразования, определя­ ется регистром ADMUX. Для адресации будем использовать регистр X.

dec rl 7 brpl bit ;

программа примера 2.NOLIST.INCLUDE "8535def.inc".LIST.DEFtemp = rl6 ;

определить символическое имя temp регистру г16.CSEG.ORG $000 rjmp init ;

прерывание по reset.ORG $00e rjmp adc ;

прерывание по завершению преобразования АЦП.ORG $011 init: ldi temp, low(RAMEND) out SPL, temp ldi temp, high(RAMEND) out SPH, temp ;

определить в указателе стека адрес RAMEND clr temp out DDRA, temp ;

определить все биты порта А на ввод ser temp out PORTA, temp ;

определить пассивный высокий уровень ;

сигнала для всех битов порта А ldi temp, ОЫООООЮО out ADCSR, temp ;

инициализация АЦП start: clr XH ldi XL, $60 ;

занести начальный адрес данных в регистр X out ADMUX, ХН ;

определить номера бита 0 порта А ;

в мультиплексоре sbi ADCSR, ADSC ;

запустить преобразование в АЦП sbi ADCSR, ADIE;

разрешить прерывание АЦП sei ;

общее разрешение прерываний ;

бессодержательный бесконечный цикл, может быть заменен любой про­ граммой main: nop rjmp main ;

п/программа обработки прерывания АЦП adc: in r20, ADCL ;

занести младший байт кода АЦП в г20 in r21, ADCH ;

занести старший байт кода АЦП в г21 lsr г21 гог г20 lsr r гог г20 st Х+, г20 cpi XL, $64 breq end ;

перейти к завершению цикла после РАЗ mov temp, XL cbr temp, $f8 out ADMUX, temp ;

занести в мультиплексор номер ;

текущего канала sbi ADCSR, ADSC ;

запустить преобразование в АЦП reti ;

завершить прерывание end: cbi ADCSR, ADIE ;

запретить прерывание АЦП reti ;

завершить прерывание ;

двукратный сдвиг вправо с переносом ;

из старшего байта ;

в младший для преобразования в 8-битовый формат ;

сохранить в ОЗУ по адресу X с постинкрементом Пример 3. Реализовать таймер, отображающий с помощью светодиодов в 8-разрядном двоичном коде время замкнутого состояния кон­ тактов кнопки включения с дискретностью 0,5 с, предус­ мотреть возможность сброса таймера в исходное состояние и индикацию переполнения таймера. Для управления таймером необходим отсчет временных интервалов по 0,5 с. от момента замыкания кнопки включения (в дальнейшем Кн1) до ее размыкания, а также - вторая кнопка (в дальнейшем Кн2) для управления сбросом. Для индикации выходных сигналов таймера светодиоды можно подключить через токоограничивающие резисторы к одному из портов микроконтроллера, например, порту В. Контроль кнопок Кн1 и Кн2 наибо­ лее просто реализуется использованием сигналов внешних прерываний IntO (PD2), Intl (PD3). Полагая, что приоритет сброса выше, подключим замы­ кающий контакт Кн2 между PD2 и общим проводом, а замыкающий кон­ такт Кн1 - между PD3 и общим проводом. Для индикации переполнения таймера дополнительный светодиод можно подключить к свободному биту порта D, например, PD1. При тактовой частоте микроконтроллера 8 МГц временные интервалы 0,5 с можно получить в канале сравнения А таймера-счетчика 1 с коэффи­ циентом деления тактовой частоты - 1024, кодом канала сравнения А 3906 ($0f42) и сбросом таймера 1 по сигналу сравнения канала А. Для ини­ циализации этого режима в регистре TCCR1А все биты очищаются, а в ре­ гистре TCCR1B записывается константа ОЬООООЮОО. Запуск таймера про­ изводится установкой трех младших битов TCCR1B, останов таймера очи­ сткой этих же трех битов. Для возврата таймера в исходное состояние не­ обходимо очистить биты регистров TCNT1H, TCNT1L. Используемые век торы прерываний: IntO ($001), Intl ($002), Timl_CompA ($006). Таким об­ разом, временной интервал 0,5 с и контроль состояния кнопок реализуются аппаратными средствами с использованием соответствующих векторов прерываний, остальные необходимые функции - программно. ;

программа примера 3.NOLIST.INCLUDE "8535def.inc".LIST.DEFtemp = rl6 ;

определить символическое имя temp регистру rl6.CSEG.ORG $000 rjmp init ;

прерывание по reset rjmp restim ;

прерывание по сбросу таймера (intO) rjmp timon ;

прерывание по включению таймера (intl).ORG $006 ;

прерывание для формирования rjmp half ;

интервала полсекунды.ORG $011 init: Idi temp, low(RAMEND) out SPL, temp Idi temp, high(RAMEND) out SPH, temp ;

определить в указателе стека адрес RAMEND ser temp out DDRB, temp ;

порт В на вывод out PORTD, temp ;

пассивный высокий в порте D clr temp out PORTB, temp ;

очистить биты порта В (сброс) out DDRD, temp ;

порт D на ввод sbi DDRD, PD1 ;

бит PD1 (переполнение) на вывод out MCUCR, temp ;

внешние прерывания по низкому уровню Idi temp, $08 out TCCR1B, temp ;

разрешение сброса таймера 1 по каналу ;

сравнения А Idi г18, $42 Idi rl9,$0f out OCR1AH, rl9 out OCR1AL, rl8 ;

запись кода сравнения (3906) канала А Idi temp, $10 out TIMSK, temp ;

разрешение прерывания канала А Idi temp, $c0 out GIMSK, temp ;

разрешение внешних прерываний sei ;

общее разрешение прерываний ;

бессодержательный бесконечный цикл, может быть заменен любой про­ граммой main: nop rjmp main restim: clr r20 out PORTB, r20 очистить биты порта В (сброс) cbi PORTD,PDl ;

очистить индикацию переполнения out TCNT1H, r20 out TCNTlL,r20 ;

сброс таймера 1 stop:: in temp,TCCRlB cbr temp, $07 out TCCR1B, temp ;

остановить таймер 1 reti ;

завершить прерывание timon: in temp, TCCR1B sbr temp, $07 out TCCR1B, temp ;

запустить таймер 1 reti ;

завершить прерывание half: sbic PORTD, PD3 ;

пропустить, если Кн 1 нажата перейти к остановке таймера 1 rjmp stop inc ir20 out PORTB, r20 ;

инкремент индикатора кода таймера breq carry перейти к формированию переполнения завершить прерывание reti carry: sbi rjmp PORTD, P 01 ;

установить бит индикации переполнения ;

перейти к остановке таймера 1 stop В приведенных выше примерах показаны различные варианты про­ граммно-аппаратной реализации некоторых стандартных функций. Эти примеры в определенной мере иллюстрируют возможности микроконтрол­ леров AVR в решении задач управления техническими объектами. Каждая из рассмотренных программ использует только незначительную часть про­ граммно-аппаратных ресурсов микроконтроллера и может рассматриваться как фрагмент более полной и объемной рабочей программы. Это отражено в примерах в виде бессодержательного бесконечного цикла, который может быть заменен какой-либо прикладной программой.

5.2. Микроконтроллерная система управления температурой В качестве примера реализации всех необходимых функций управления микроконтроллером AT90S8535 рассмотрим задачу поддержания микро­ климата в помещении, алгоритм решения которой приведен в главе 1 на рис. 3. Подготовка программы для микроконтроллера требует уточнения некоторых деталей и распределения функций между различными средства­ ми реализации. В исходных данных задачи приведены только сведения, необходимые для составления общего алгоритма работы. Будем полагать, что управление охлаждением и подогревом производится независимыми стандартными ло­ гическими сигналами (1 - включено, 0 - выключено). Контролируемая температура измеряется двумя аналоговыми датчиками, оценка температу­ ры производится по среднему арифметическому значению их двух выход­ ных сигналов. Параметры аналоговых сигналов и опорное напряжение АЦП обеспечивают формирование кодов температуры в следующем фор­ мате: старший байт выходного кода АЦП соответствует значению темпера­ туры с точностью до 0,1 °С (например, код 215 (0xd7) - 21,5 °С). Пороговые значения температур следующие: tram=17,0 °C, traax==22,0 °C. Любая система управления должна содержать средства управления и индикации. В минимальном варианте необходимо производить включение и выключение системы кнопками управления, индикацию состояния сис­ темы и температуры в помещении. Тестовые режимы для проверки работо­ способности системы рассматривать не будем, хотя реальная система функции диагностики также должна поддерживать. Кнопки управления можно подключить к свободным линиям параллель­ ных портов микроконтроллера с формированием общего сигнала внешнего прерывания по схеме, показанной на рис. 7. Такая схема позволяет при не­ обходимости подключить к "этому сигналу внешнего прерывания и другие Пуск х _/ Стоп Ж Ж -> РВ1 -> РВ2 -» PD Рис. 7. Схема подключения кнопок управления цепи. При обработке сигналов кнопок необходимо программно определить приоритеты сигналов при одновременном нажатии обеих кнопок ("защита от дурака"). Можно также указать, что в этой задаче применение алгоритма "антидребезга" необязательно, так как первое же замыкание кнопки пере водит систему в соответствующий режим. Последующие замыкания кон­ тактов будут только подтверждать команду перехода в этот режим. Для индикации можно применять стандартные семисегментные индика­ торы, так как требуется отображение цифровых кодов температуры. Инди­ кация режима работы тоже может выполняться этими индикаторами. Вы­ ключением индикации можно отображать режим "Стоп", а включенная ин­ дикация температуры может отображать режим "Пуск". Для индикации со­ стояния "подогрев", "охлаждение" можно использовать соответствующие сигналы управления. Управление цифровыми индикаторами через параллельные порты воз­ можно, но нецелесообразно: индикация каждой цифры требует отдельного байта управления. Рациональнее байты управления для индикации переда­ вать через последовательный интерфейс SPI во внешние регистры, а с их выходов в параллельном формате управлять индикаторами (рис. 8).

RG // Out D CP HI/ / Out MOSI Load CP О U SCK Рис. 8. Схема управления индикаторами Регистры индикаторов - стандартные однобайтовые регистры сдвига D1-D3 с входом последовательной записи In, тактовыми импульсами по­ следовательной записи SC, сигналом управления для вывода в параллель­ ном формате СР и параллельными выходами, к которым подключены циф­ ровые индикаторы. Выходные сигналы MOSI интерфейса SPI, работающе го в режиме master, поступают на вход In регистра D1, тактовые импульсы SCK - на входы тактирования последовательной записи SC всех регистров. Алгоритм вывода должен обеспечивать последовательную выдачу трех байтов управления индикаторами, передача байтов должна начинаться с младшего разряда кода температуры. После трех циклов работы интерфей­ са SPI первый байт будет записан в регистре D3, второй байт - в регистpeD2 и третий байт - в регистре D1. Для выдачи принятого трехбайтового кода в индикаторы необходимо программно выполнить передачу сигнала Load, который интерфейсом SPI не формируется. На следующем этапе необходимо выбрать средства микроконтроллера для реализации необходимых функций управления и определить их пара­ метры и режимы работы. Первое, что требуется оценить, достаточны ли программно-аппаратные ресурсы микроконтроллера для решения задачи? Предварительная оценка времени, требуемого для выполнения всех необ­ ходимых функций, - единицы миллисекунд (блок-схема алгоритма на рис. 3 позволяет определить ориентировочное число команд программы: от не­ скольких сот до 1 - 2 тысяч). Если ресурсы недостаточны, может потребо­ ваться применение других, более сложных средств. Тепловая инерцион­ ность помещений с постоянными времени десятки и более секунд обычно не предъявляет особых требований к быстродействию. Алгоритм управле­ ния не требует выполнения каких-либо сложных операций преобразования данных, поэтому можно сделать вывод о достаточных функциональных возможностях микроконтроллера для решения данной задачи. Мало того, предварительная оценка быстродействия микроконтроллера и инерционности объекта управления показывает, что имеет смысл искус­ ственно увеличить интервалы времени для контроля температуры. Это по­ зволяет и обеспечить эффективное управление, и резервировать ресурсы микроконтроллера для решения дополнительных задач. Выберем перио­ дичность запуска функций управления, равной 1 с. Такая периодичность практически не повлияет на эффективность управления температурной (те­ пловые постоянные времени объекта управления на 1-2 порядка выше), обеспечит необходимую оперативность и наглядность отображения темпе­ ратуры на индикаторе и достаточно просто реализуется с помощью тайме­ ров микроконтроллера. Дополнительного уточнения также требуют пороговые значения темпе­ ратуры tmin и tmax. Для единственного порогового значения и для включе­ ния, и для выключения, весьма вероятен режим, при котором в каждом очередном цикле контроля будет производиться переключение сигнала управления (включение-отключение-включение-отключение и т.д.). Если ввести гистерезис (различные пороговые значения для включения tj и вы­ ключения t2), такой режим постоянных переключений станет маловероят­ ным. Разность пороговых значений выберем ±1°С, тогда tmaxi=23,0 °C;

tmax2=21,0°C;

^1=16,0 °С;

tmin2=18,0°C. Выберем тактовую частоту микроконтроллера, которая определяется внешними частотозадающим элементами и может лежать в диапазоне 0 - 8 МГц. Типичное значение тактовой частоты - 4 МГц. Ввод аналоговых сиг­ налов от датчиков температуры будем производить через АЦП микрокон­ троллера, используя входы порта А: РАО - датчик 1, РА1 - датчик 2. Пере­ ключение входов АЦП программное с помощью регистра мультиплексора ADMUX. В байте управления АЦП необходимо определить режим одно­ кратного преобразования с программным запуском, разрешение прерыва­ ния и тактовую частоту с коэффициентом деления 32. Выходной код АЦП будем преобразовывать в однобайтовый формат и передавать для дальней­ шей обработки вектором прерывания АЦП. Сразу же можно выбрать линии ввода-вывода для передачи сигналов управления: РА7 - управление охлаж­ дением, РА6 - управление подогревом. Таким образом, в порте А две ли­ нии должны настраиваться на ввод (датчики) и две линии - на вывод (сиг­ налы управления). Интерфейс SPI также требует выбора параметров настройки для регист­ ра управления SPCR. Управление интерфейсом также будем производить через его вектор прерывания с заданием режима master, порядка формиро­ вания байта данных при выводе, параметров сигнала SCK и его частоты. Высокая скорость передачи данных не требуется, поэтому выберем коэф­ фициент деления для тактовой частоты интерфейса - 16. Интерфейс пере­ дает выходные сигналы через РВ5 (MOSI), PB7 (SCK). Для сигнала управ­ ления индикацией (Load) выберем РВО. Эти три бита порта В должны быть настроены на вывод данных с заданием пассивного высокого уровня сигна­ ла. Алгоритм вывода кодов индикации через интерфейс SPI должен вклю­ чать преобразование байтов кода температуры в коды индикации трех де­ сятичных цифр с десятичной точкой после второй цифры. Управление ин­ дикаторами требует формирования специальных кодов для каждой деся­ тичной цифры. Эти коды индикации можно хранить в FLASH, а для вывода кодов индикации выполнять программное преобразование трех десятичных цифр температуры в три байта кодов управления индикаторами с помощью констант из FLASH. Первым в интерфейсе SPI должен поступать код инди­ кации младшей цифры, после вывода третьего кода индикации необходимо программно сформировать сигнал управления на РВО. Для обработки сигналов от кнопок управления используем внешнее пре­ рывание INTO. Определим режим формирования этого запроса прерывания в регистре MCUCR по падающему фронту сигнала PD2 и разрешение этого прерывания в регистре GIMSK. Вектор прерывания должен анализировать состояния сигналов РВ1 и РВ2, определяя выполняемую операцию управ­ ления (Пуск, Стоп). Для реализации этих функций необходимо задать ре­ жим ввода на PD2, РВ1 и РВ2 с обязательным формированием пассивного высокого уровня. Если кнопки не замкнуты, на всех этих входах - высокий уровень сигнала, при нажатии любой кнопки - низкий уровень на PD2 и выводе порта В, к которому подключена нажатая кнопка (рис. 7) Запуск функций управления с периодичностью 1 с можно производить таймером 0, используя его вектор прерывания по переполнению. Макси­ мальный период для этого прерывания зависит от коэффициента деления тактовой частоты: t=1024*256/4uc=65,536 мс. Увеличение периода до тре­ буемой величины можно выполнить программно, запуская функции управ­ ления каждым 16-м вызовом вектора прерывания таймера, тогда период T=16*t=l,05 с. Необходимым дополнением алгоритма обработки прерыва­ ния становится счетчик количества прерываний, с помощью которого и оп­ ределяется номер текущего прерывания. Функциональная схема системы управления температурой с указанным распределением функций в микроконтроллере AT90S8535 приведена на рис. 9.

V / П> > РАО РА РА7 РА > cool V / -5* >i heat ?

REF AREF М си AT90S Пуск РВ1 РВ2 РВ5 РВ7 MOSI I Блок I 1 индикации SCK Load у 1 Стоп РВО PD Рис. 9. Функциональная схема системы управления температурой Аналоговые сигналы двух датчиков температуры поступают на входы РАО, РА1 микроконтроллера через согласующие усилители. Эти усилители выполняют масштабирование выходных сигналов датчиков и при необхо димости ограничение спектра сигналов для снижения уровня помех и по­ вышения точности преобразования в цифровой код. Вместе с прецизион­ ным источником опорного напряжения (REF) эти усилители определяют диапазон измеряемой температуры и значения кодов на выходе АЦП мик­ роконтроллера. В соответствии с погрешностями дискретизации АЦП точ­ ность формирования сигналов всеми аналоговыми устройствами должна быть на уровне 0,1-0,2 %. Усилители сигналов управления РА6, РА7 должны формировать сигна­ лы cool, heat с требуемыми параметрами, преобразуя стандартные логиче­ ские сигналы на выходах микроконтроллера. В зависимости от характери­ стик сигналов управления эти усилители могут содержать ключи на бипо­ лярных или полевых транзисторах, ключи с электромагнитными реле или твердотельные реле. Кнопки управления и блок индикации показаны ранее на рис. 7, 8. Взаимодействие устройств микроконтроллера при выполнении всех ука­ занных функций достаточно эффективно обеспечивается применением сис­ темы прерываний. Отдельные элементы задачи управления могут быть описаны в форме подпрограмм для векторов прерываний и подпрограмм для реализации некоторых дополнительных функций. Логическая органи­ зация программы микроконтроллера стандартна, программа состоит из следующих элементов: описание векторов прерываний, инициализация всех используемых компонентов микроконтроллера, комплекс подпро­ грамм для реализации всех необходимых функций. Вызов подпрограмм производится соответствующими аппаратными средствами микроконтрол­ лера. В режиме Стоп все функции системы управления отключены, аппарат­ ные и программные средства в состоянии покоя, микроконтроллер может выполнять какие-нибудь другие функции. При нажатии кнопки "Пуск" подпрограммой вектора внешнего прерывания запускается первый цикл управления температурой и таймер 0 для выполнения повторных циклов контроля с периодом около 1 с. Каждый цикл контроля начинается с запус­ ка АЦП, по его вектору прерывания вводится код текущей температуры. Код температуры поступает в интерфейс SPI для управления индикацией и одновременно на программную обработку с реализацией алгоритма управ­ ления, приведенного на рис. 3. После завершения этих функций, которые загружают процессор в течение единиц миллисекунд, выполнение алго­ ритмов управления приостанавливается до повторного запуска цикла тай­ мером 0. Нетрудно показать, что задача управления требует менее 1% об­ щего времени работы процессора. Работа системы управления может быть прервана на любом этапе нажа­ тием кнопки "Стоп", подпрограмма вектора внешнего прерывания должна остановить работу всех используемых средств: АЦП, таймера 0, через SPI выдать коды выключения индикаторов и затем отключить интерфейс. Да лее приводится текст программы, реализующий этот алгоритм работы. ;

Программа управления температурой.NOLIST.INCLUDE "8535def.inc".LIST ;

определить символические имена.DEF t e m p l a r 16.DEF temph = rl7.DEF saveF = r4.DEF counT = rl8.DEF rcnt = r!9.EQU Mind = 0x100 ;

RAM для кодов индикации.EQU Made - 0x090 ;

RAM для кода АЦП.CSEG ;

вектора прерываний.ORG $000 rjmp ink ;

прерывание по reset rjmp key_cnt ;

прерывание intO.ORG $009 rjmp cycle ;

прерывание таймера 0 для запуска цикла rjmp spistc ;

прерывание SPI.ORG $00e rjmp adc_cmt ;

прерывание АЦП.ORG $011 инициализация ink: Idi tempi, low(RAMEND) Idi temph, high(RAMEND) out SPH, temph out SPL, tempi определить в указателе стека адрес RAMEND ;

порты ввода-вывода Idi tempi, Obi 1000000 clr temph out PORTA, temph out DDRA, tempi ser tempi out PORTB, tempi out DDRB, tempi ;

порт В на вывод out PORTD, tempi out DDRD, temph ;

порт D на ввод ;

внешнее прерывание INTO Idi tempi, (1«ISC01)|(0«ISC00) out MCUCR, tempi ;

INTO по падающему фронту Idi tempi, (1«INT0) out GIMSK, tempi ;

разрешение INTO прерывание таймера О Idi tempi, (1«ТО1Е0) out TIMSK, tempi ;

параметры SPI idi tempi Obi 1011001 out SPCR, tempi ;

параметры АЦП clr tempi out ADMUX, tempi ;

канал РАО для АЦП Idi tempi, 0Ы000Н01 out ADCSR, tempi sei rcall ;

общее разрешение прерываний ;

выключение индикации температуры ind_pff ;

бессодержательный бесконечный цикл, может быть заменен любой граммой main: nop rjmp main indoff: ;

вывод нулевых байтов в SPI для отключения индикации clr tempi Idi XL, low(Mind) Idi XH, high(Mind) ;

начальный адрес RAM для кодов SPI st X+, tempi st X+, tempi st X+, tempi idi XL, low(Mind) восстановление в Х начального адреса rcall spi_stc ;

старт передачи байтов индикации ret ;

1NT0, кнопки управления keycnt: сохранение в стеке регистров и флагов push tempi push temph push saveF in saveF, SREG ;

обработка сигналов "Стоп", "Пуск" in tempi, PINB sbrs tempi, PB2 ;

контроль сигнала СТОП rjmp cnt_off ;

перейти к процедуре СТОП sbrs tempi, PB1 ;

контроль сигнала ПУСК rjmp cnt_on ;

перейти к процедуре ПУСК ;

если оба сигнала в 1, завершить без изменения режима key out: ;

завершение с восстановлением из стека флагов и регистров out SREG, saveF pop saveF pop temph pop tempi reti cnton: щереход в режим ПУСК tst rent brne key_out завершить по признаку режима ПУСК sbr rent, 0x80 установить признак режима ПУСК в rent Idi temph, 0x05 out TCCRO, temph ;

запуск таймера циклов контроля clr counT ;

сброс счетчика для формирования цикла out ADMUX, counT - ;

канал РАО для АЦП sbi ADCSR, ADSC ;

запуск АЦП для 1 цикла контроля cbi PORTA, PA7 выключение охлаждения cbi PORTA, PA6 выключение подогрева rjmp key_out завершение процедуры cntoff: ;

переход в режим СТОП tst rent breq key_out завершить по признаку режима СТОП clr rent ;

сбросить признаки режима ПУСК в rent clr temph out TCCRO, temph ;

останов таймера циклов контроля out TCNTO, temph ;

сброс таймера циклов контроля clr counT ;

сброс счетчика для формирования цикла cbi PORTA, PA7 выключение охлаждения cbi PORTA, PA6 выключение подофева waitspi: cpi XL, low(Mind) ;

контроль вывода байтов индикации breq cnt_end продолжение процедуры, если вывод завершен sei разрешить прерывания при ожидании rjmp waitspi ;

возврат к контролю завершения цикла вывода cntend: rcall rjmp ind_off key out ;

выключить индикацию температуры для СТОП завершение процедуры ;

периодический запуск цикла управления в режиме ПУСК cycle: push saveF in saveF, SREG tst rent ;

контроль режима ПУСК breq cyc_out завершить без запуска для СТОП cpi counT, 15 ;

контроль количества прерываний таймера О breq e y e d o ;

запуск цикла по 16 прерыванию inc counT ;

инкремент количества прерываний rjmp cyc_out ;

завершить без запуска (<16) eyedo: clr counT ;

очистка счетчика прерываний out ADMUX, counT ;

канал РАО для АЦП sbi ADCSR, ADSC ;

запуск АЦП, начало цикла контроля завершение с восстановлением флагов cycout: out SREG, saveF pop saveF reti прерывание по завершению преобразования АЦП adeemt: push tempi push temph push saveF in saveF, SREG tst rent breq adc_out завершить по признаку режима СТОП ;

прием кода температуры in tempi, ADCL ;

младший байт кода АЦП in temph, ADCH ;

старший байт кода АЦП isr temph ror tempi lsr temph ;

двукратный сдвиг вправо с переносом ror tempi ;

для преобразования в 8-битовый формат in temph, ADMUX ;

номер канала ? tst temph ;

brne tmtr ;

перейти к обработке, если PAl (датчик 2) sbi ADMUX, ADMUXO установить канал PAl sbi ADCSR, ADSC ;

запустить преобразование в АЦП sts Made, tempi ;

сохранить код канала РАО (датчик 1) rjmp adc_out завершить процедуру для повторения АЦП tmtr: ;

преобразование кода температуры Ids temph, Made ;

считать из RAM код РАО add tempi, temph;

сложить коды PAl и РАО ror tempi ;

сдвинуть вправо с переносом сложения ;

анализ кода температуры cpi tempi, 230 ;

порог включения охлаждения brcs thresh 1 ;

перейти к следующему порогу, если < rcall cool ;

включить охлаждение rjmp bedt завершить анализ thresh 1: cpi tempi, 210 ;

порог выключения охлаждения brcc bedt ;

завершить анализ, если > hresh2: cpi tempi, 160 ;

порог включения подогрева brcc thresh3 ;

перейти к следующему порогу, если > rcall cool ;

включить подогрев rjmp bedt завершить анализ hresh3: cpi tempi, 180 ;

порог выключения подогрева brcs bedt ;

завершить анализ, если < rcall offch ;

выключить средства изменения температуры rjmp bedt ;

завершить анализ ;

включение охлаждения cool: sbis PINA, PA7 пропустить, если включено sbi PORTA, PA7 ;

включить охлаждение ret ;

возврат ;

включение подогрева heat: sbis PINA, PA6 пропустить, если включено sbi PORTA, PA6 ;

включить подогрев ret ;

выключение охлаждения и подогрева offch: sbic PINA, PA7 ;

пропустить, если выключено cbi PORTA, PA7 ;

выключить охлаждение sbic PINA, PA6 ;

пропустить, если выключено cbi PORTA, PA6 ;

выключить подогрев ret ;

преобразование кода в bed формат для индикации bedt: clr temph ;

очистка регистра для десятичной цифры hunst: определение цифры сотен cpi tempi, 100;

brcs hunout ;

перейти к сохранению сотен для SPI subi tempi, 100;

вычесть 100 inc temph ;

инкремент сотен rjmp hunst ;

повторить цикл вычислений hunout: ;

код индикации и запись в RAM для SP1 rcall codeind decst: clr cpi brcs subi inc rjmp temph ;

очистка регистра для десятичной цифры tempi, 10 ;

определение цифры десятков decout ;

перейти к сохранению сотен для SPI tempi, 10 ;

вычесть 10 temph ;

инкремент десятков decst ;

повторить цикл вычислений decout: ;

код индикации и запись в RAM для SPI десятков rcall code ind mov rcall rjmp code Idi Idi add Ipm st ret ;

код индикации и запись в RAM для SPI десятков temph, 1ешр1;

передать цифру единиц code_ind ;

str_spi ;

перейти к старту SPI ind: ZL, Iow(cdind*2) ;

ZH, high(cdind*2);

адрес FLASH для кодов индикации ZL, temph ;

смещение адреса по цифре в temph ;

прочитать код индикации для цифры из temph -X, гО сохранить код индикации в RAM для SPI ;

возврат ;

старт SPI для передачи кодов индикации strspi: Idi XL, low(Mind) Idi XH, high(Mind) ;

начальный адрес RAM для кодов SPI rcall spi_stc ;

старт передачи байтов индикации adcout: ;

завершение с восстановлением из стека флагов и регистров out SREG, saveF pop saveF pop tempi reti ;

передача кодов управления индикацией spistc: push tempi push temph push saveF in saveF, SREG cpi XL, low(Mind+3) ;

breq load ;

Id tempi, X+ ;

cpi XL, low(Mind+2) ;

brne skip ;

sbr tempi, 0x80 ;

skip: out SPDR, tempi;

spiout: ;

завершение с восстановлением из стека флагов и регистров out SREG, saveF saveF pop pop tempi reti load: cbi PORTB, PBO nop nop nop > sbi PORTB, PBO rjmp spiout ;

.ORG 0x0800 cdind: ;

коды индикации цифр, начиная с нуля.dB 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f ;

endof file Фрагменты листинга программы, создаваемого компилятором AVR Stu­ dio, приведены ниже. Первые 5 символов - адрес FLASH, который при­ сваивается компилятором коду каждой команды в программе. Следующие 4 символа - код команды в hex-формате, далее в каждой строке следует ис­ ходный текст программы..LIST определить символические имена.DEF tempi = rl 6.DEF temph = rl7.DEF saveF = r4.DEF counT = rl8.DEF rent = r 19.EQU Mind = 0x100 ;

RAM для кодов индикации.EQU Made = 0x090 ;

RAM для кода АЦП.CSEG ;

вектора прерываний.ORG $ 000000 сОЮ rjmp init ;

прерывание по reset 000001 c035 rjmp key_cnt ;

прерывание intO.ORG $009 ;

прерывание таймера 0 для запуска цикла 000009 c055 rjmp cycle ;

прерывание SPI 00000a c0b2 rjmp spi_stc.ORG $00e OOOOOe c05e rjmp adc_cmt ;

прерывание АЦП.ORG $011 ;

инициализация 000011 e50f init: ldi tempi, low(RAMEND) ldi temph, high(RAMEND) 000012 е012 out SPH, temph 000013 bfle out SPL, tempi ;

определить 000014 bfOd RAMEND ;

порты ввода-вывода 000015 ec00 ldi tempi, 0b 11000000 000016 2711 clr temph в указателе стека адрес 000017 bblb 000018 bbOa out out PORTA, temph DDRA, tempi 000019 efOf sertempl 00001 a bb08 out PORTB, tempi 00001 b bb07 out DDRB, tempi порт В на вывод 00001 с bb02 out PORTD, tempi 00001 d bb 11 out DDRD, temph ;

порт D на ввод ;

внешнее прерывание INTO 0000le e002 ldi tempi, (1«ISC01)|(0«ISC00) 00001 f ЬЮ5 out MCUCR, tempi ;

INTO по падающему фронту 000020 e400 ldi tempi, (1 « I N T O ) 000021 ЬЮЬ out GIMSK, tempi ;

разрешение INTO ;

прерывание таймера 0 000022 e001 ldi tempi, (1 « T O I E 0 ) 000023 bfl)9 out TIMSK, tempi ;

параметры SPI 000024 ed09 ldi tempi, Obi 1011001 000025 b90d out SPCR, tempi ;

параметры АЦП 000026 2700 clr tempi 000027 b907 out ADMUX, tempi ;

канал РАО для АЦП 000028 e80d ldi tempi, 0b 000029 b906 00002a 9478 00002b d out sei rcall ADCSR, tempi ;

общее разрешение прерываний ;

выключение индикации температуры ind_off ;

бессодержательный бесконечный цикл, может быть заменен любой про­ граммой 00002с 0000 main: nop 00002d cffe rjmp main ind_off: ;

вывод нулевых байтов в SPI для отключения индикации 00002е2700 clr tempi O0002f eOaO 000030 eOb 1 000031 930d 000032 930d 000033 930d 000034 eOaO 000035 d087 000036 Idi XL, low(Mind) Idi XH, high(Mind) ;

начальный адрес RAM для кодов SPI st X+, tempi st X+, tempi st X+, tempi idi XL, iow(Mind);

восстановление в Х начального адреса rcall spi_stc ;

старт передачи байтов индикации ret ;

INT0, кнопки управления key_cnt: ;

сохранение в стеке регистров и флагов 000037 930f push tempi 000038 93If push temph 000039 924f push saveF 00003a b64f in saveF, SREG ;

обработка сигналов "Стоп", "Пуск" 00003b ЬЗОб in tempi, PINB контроль сигнала СТОП 00003c ff02 sbrs tempi, PB2 перейти к процедуре СТОН 00003d c012 rjmp cnt_off контроль сигнала ПУСК 00003effOl sbrs tempi, PB1 перейти к процедуре ПУСК 00003 f c005 rjmp cnt_on ;

если оба сигнала в 1, завершить без изменения режима key_out: ;

завершение с восстановлением из стека флагов и регистров be4f SREG, saveF out 904f saveF pop temph 91 if pop tempi 91 Of pop 9518 reti 000040 000041 000042 000043 cnt on: переход в режим ПУСК 000045 2333 tt rent s 000046 f7c9 keyout ;

завершить по признаку режима ПУСК brn sbrrcnt, 0x80 ;

установить признак режима ПУСК в rent 000047 6830 sbn 000048 eO 15 Ii temph, 0x05 d TCCR0, temph ;

запуск таймера циклов контроля out 000049 bfl3 00004a 2722 c r counT ;

сброс счетчика для формирования цикла l 00004b b927 ADMUX, counT ;

канал РАО для АЦП out 00004c 9a36 s i ADCSR, ADSC ;

запуск АЦП дня 1 цикла контроля b 00004d 98df c i PORTA, PA7 ;

выключение охлаждения b 00004e 98de c i PORTA, PA6 ;

выключение подогрева b rjmp keyout ;

завершение процедуры 00004fcff cnt_off: ;

переход в режим СТОП 000050 2333 tst rent 000051 f3 71 breq keyout ;

завершить по признаку режима СТОП 000052 2733 clr rent ;

сбросить признаки режима ПУСК в rent 000053 2711 clr temph 000054 ЬПЗ out TCCR0, temph ;

останов таймера циклов контроля 000055 bf!2 out TCNT0, temph ;

сброс таймера циклов контроля 000056 2722 clr counT ;

сброс счетчика для формирования цикла 000057 98df cbi PORTA, PA7 ;

выключение охлаждения 000058 98de cbi PORTA, PA6 ;

выключение подогрева waitspi: 000059 ЗОаО cpi XL, low(Mind);

контроль вывода байтов индикации 00005а Ю11 breq cnt_end продолжение процедуры, если вывод завершен 00005b 9478 00005с effe sei rjmp ;

разрешить прерывания при ожидании wait_spi ;

возврат к контролю завершения цикла вывода cntend: 00005d dfdO rcall 00005ecfel rjmp ind_off ;

выключить индикацию температуры для СТОП key_out ;

завершение процедуры ;

передача кодов управления индикацией spistc: 0000bd930f push temp"! 0000be924f push saveF OOOObf b64f in saveF, SREG 0000c0 30a3 0000c1 f051 0000c2 910d 0000c3 30a2 0000c4 f409 0000c5 6800 skip: ООООсб b90f 0000c7 b90f out out SPDR, tempi SPDR, tempi cpi XL, low(Mind+3) breq load ;

Id tempi, X+ ;

cpi XL, low(Mind+2) brne skip ;

sbr tempi, 0x80 ;

spiout: ;

завершение с восстановлением из стека флагов и регистров О000с8 be4f out SREG, saveF O000c9 904f pop saveF O000ca910f pop tempi O000cb9518 reti load: O O c 98c0 O Oc O O c 0000 O Od O O c 0000 O Oe O000cf9ac0 0OOOdOcff7 cbi PORTB, PBO nop nop ;

sbi PORTB, PBO ;

rjmp spi_out ;

.ORG 0x0800 cdind: ;

коды индикации цифр, начиная с нуля 000800 063f 000801 4f5b 000802 6d66 000803 077d 000804 6f7f.dB 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f ;

EndOfFile RESOURCE USE INFORMATION Notice: The register and instruction counts are symbol table hit counts, and hence implicitly used resources are not counted, eg, the 'lpm' instruction without operands implicitly uses rO and z, none of which are counted. x,y,z are separate entities in the symbol table and are counted separately from r26..r31 here..dseg memory usage only counts static data declared with.byte AT90S8535 register use summary: rO: 1 rl : 0 r2 : 0 r3 : 0 r4 : 16 r 8 : 0 r 9 : 0 rlO: 0 rll: 0 rl2: 0 rl6: 50 rl7: 29 rl8: 7 rl9: 6 r20: r24: 0 r25: 0 r26: 5 r27: 2 r28: x: 5 у: 0 z:0 Registers used: 11 out of 35 (31.4%) r5 : 0 rl3: 0 0 r21: 0 r29:

r6 : 0 rl4: 0 0 r22: 0 r30:

r7 : 0 rl5: 0 0 r23: 0 2 r31: AT90S8535 instruction use summary:

adc : 0 add : 4 adiw : 0 and : 0 bclr :: 0 bid ;

;

0 brbc : 0 brbs : 0 breq : 12 brge :0 brhc : 0 brhs : 0 brio : 0 brlt : 0 brmi : 0 brne : 4 brtc :: 0 brts : 0 brvc : 0 brvs : 0 clh : 0 clc : 0 cbi : 14 cbr : 0 clr : 20 clt : 0 civ : 0 els : 0 cp : 0 epe : 0 cpi : 18 cpse : 0 icall: 0 ijmp : 0 in : 16 inc : 6 Idi : 32 Ids : 2 1pm : 2 Isl : 0 2 ori : 0 neg : 0 nop : 6 or push : 20 rcall: 20 ret : 10 reti : 8 ror : 6 sbc : 0 sbci : 0 sbi : 14 sbiw : 0 sbr : 2 sbrc 0 sbrs : 4 sen : 0 ser : 2 ses : 0 sei : 4 sez : 0 std : 0 sleep : 0 st : 8 subi :: 4 swap : 0 tst : 10 wdr : 0 Instructions used: 37 out ofl 00 (37.0%) andi : 0 brcc : 4 brid : 0 brpl : 0 bset : 0 cli : 0 elz : 0 dec : 0 Id : 21 lsr : 4 out : 48 rjmp : 40 sbic : 4 sec : 0 set : 0 sts : 2 asr : 0 brcs : 8 brie :: 0 brsh : 0 bst : 0 cln : 0 com : 0 eor : 0 dd : 0 mov : 2 pop : 20 rol : 0 sbis : 4 seh : 0 sev : 0 sub : AT90S8535 memory use summary [bytes]: Segment Begin End Code Data Used Size Use% [xseg] 0x000000 0x00100a 394 10 400 8192 4.9% [.dseg] 0x000060 0x000060 0 0 0 512 0.0% [.eseg] 0x000000 0x000000 0 0 0 5J2 0.0% Assembly complete, 0 errors, 1 warnings В выходном сообщении компилятора указано, что программа содержит 394 команды, используя менее 5% адресного пространства FLASH. В алго­ ритме работы все необходимые функции управления реализованы вектора­ ми прерываний, основной программный цикл (метка main) при работе сис­ темы управления температурой не используется, с его помощью могут ре­ шаться любые дополнительные задачи. Управление аппаратными средст­ вами микроконтроллера, обеспечивающими выполнение всех необходимых функций, достаточно просто и эффективно производится программной об­ работкой прерываний, суммарное время загрузки процессора подпрограм­ мами обработки прерываний в каждом цикле работы составляет менее 1 %. Таким образом, суммарное использование программных ресурсов микро­ контроллера (процессора, памяти, регистров и т.п.) не превышает несколь­ ких процентов. Оценку использования аппаратных ресурсов микроконтроллера можно произвести по функциональной схеме (рис. 9). Для передачи сигналов не­ обходимы 10 линий ввода-вывода из 32. Большая часть входов АЦП сво­ бодна, также не используются внешнее прерывание INT1, таймеры 1 и 2, компаратор и интерфейс UART. Следует отметить, что значительный объ­ ем резервных ресурсов микроконтроллера не является признаком неэффек­ тивного решения задачи. Напротив, эти резервные ресурсы практически всегда должны оставаться для возможной модернизации: изменения алго­ ритмов работы или введения каких-либо дополнительных функций. Неко­ торые варианты модернизации функций системы управления приведены ниже. Программу несложно доработать при изменении и усложнении требуе­ мых алгоритмов управления. Например, управление нагревом и охлажде­ нием будет более эффективным, если использовать не релейное управление (включено/выключено), а ПИД-регулятор с управлением тепловой мощно­ стью по отклонению температуры. Аналоговый сигнал управления в этом случае можно формировать таймером 1 или 2 в режиме модулятора ШИМ. Пороговые значения температур в программе фиксированные, так как определены в виде констант. Несложно реализовать процедуру ввода, ин­ дикации и хранения в EEPROM изменяемых пороговых значений темпера­ туры. В этой процедуре можно использовать уже имеющийся цифровой индикатор температуры, а для управления вводом необходимо подключить дополнительные кнопки на свободные входы портов микроконтроллера по схеме, которая аналогична приведенной на рис. 7. Неиспользованный интерфейс UART позволяет создать средства обмена данными с другими устройствами управления. Например, в рассматривае­ мую систему управления температурой можно ввести средства поддержки дистанционного контроля работы через интерфейс UART. Функции дис­ танционного контроля могут выполняться из персонального компьютера с передачей команд управления параметрами и режимами работы и с запро­ сом данных о текущем состоянии системы. 5.3. Средства подготовки программ Подготовка файла программы микроконтроллера для процедуры внутри­ системного программирования может выполняться инструментальным па­ кетом AVR Studio 4.X. Пользовательский интерфейс пакета AVR Studio стандартный для Window's-приложений (рис. 10) и содержит полоску ме­ ню, панель инструментов и рабочую область. Для активизации функций AVR Studio, необходимых для работы с текстом программы, должны быть выполнены следующие операции: 1. Для работы с текстом программы необходимо создать проект (project). Проект создается с помощью меню Project (пункт New Project). В поя­ вившемся на рабочем поле окне (рис. 11) указать тип проекта - AVR Assembler, имя и путь папки, имя проекта. Кнопкой "Next" необходимо to РисЛО. Интерфейс A V R Studio Рис. 11. Окно "Create new Project" определить опции проекта: Debug Platform - AVR Simulator, тип мик­ роконтроллера Device - AT90S8535. Если проект уже существует, можно открыть его для работы тем же меню Project (или меню File). Окно с открытым для работы проектом появится в рабочем поле. 2. Если в открытом проекте уже есть файлы программ на ассемблере (с расширением.asm), они будут отображены в окне "Workspace" и их можно открыть в рабочем поле двойным щелчком левой кнопки мыши. Создать новые файлы (Create new file) или добавить к проекту создан­ ные ранее файлы (Add existing file) можно с помощью контекстного меню (или меню Project), доступ к контекстному меню открывается щелчком правой кнопки мыши в окне Workspace (рис. 10). Каждый файл на рабочем поле отображается отдельным окном. Работа с окна­ ми, подготовка и редактирование текстов выполняются стандартными средствами Window's-приложений. Компилятор ассемблера может работать только с одним файлом, поэто­ му необходимо указать для компилятора исходный файл в контекстном ме­ ню (Set as Entry File). После этого можно выполнить запуск компилятора из меню Project - пункт Build (F7) или соответствующей кнопкой панели инструментов. По завершении ассемблирования компилятор сформирует в окне "Output" (рис. 10) сообщение о результатах. Если синтаксических ошибок нет, выходной файл сформирован. Обнаруженные ошибки будут указаны компилятором (окно "Output"), в сообщении указываются тип ошибки и номер строки в исходной програм­ ме. Отметить строку с ошибкой в исходном тексте можно двойным щелч­ ком левой кнопки мыши на сообщении об ошибке. Предварительная проверка подготовленной программы после устране­ ния синтаксических ошибок производится с помощью симулятора (Debug Platform - AVR Simulator). Запуск симулятора производится из меню Pro­ ject - пункт Build and Run (Ctrl+F7) или соответствующей кнопкой пане­ ли инструментов. Включение различных функций симулятора, режимы их моделирования определяются различными меню пакета AVR Studio или кнопками панели инструментов (более подробную информацию об этом можно найти в меню Help).

Рис. 12. Окно I/O Отображение результатов работы программы в симуляторе производит­ ся в окне "Workspace" переключением в режим I/O (рис. 12). В этом окне можно отображать содержимое всех регистров и ячеек памяти микрокон­ троллера. При использовании пошагового режима выполнения программ на любом этапе можно производить изменение данных вводом с клавиату­ ры PC новых значений в двоичном, шестнадцатеричном или десятичном формате. Аналогичные операции можно выполнять с помощью окон "Watch", формируя в этих окнах произвольный и более удобный для рабо­ ты с программой набор отображаемых элементов микроконтроллера. После проверки корректности программы симулятором можно с помо­ щью программатора произвести запись подготовленного Hex-файла в па­ мять микроконтроллера. Необходимо учитывать, что симулятор не позво­ ляет моделировать все необходимые функции. Окончательное тестирова­ ние программы может проводиться только на лабораторном стенде с мик­ роконтроллером [2]. Для записи подготовленного Hex-файла в микроконтроллер необходимо подключить лабораторный стенд к СОМ-порту компьютера (в стенде ис­ пользуется разъем DB15F с надписью AVR studio Prog) и включить пита­ ние. После включения стенда программатор AVR Studio может работать, его запуск производится из меню Tools пунктом AVR Prog. Управление программатором производится в открывшемся после запуска окне AVRprog на рабочем поле. В окне программатора необходимо выбрать записываемый в микрокон­ троллер Нех-файл (кнопка Browse, файл после компиляции находится в папке проекта, с которым Вы работаете). В строке Device выбрать тип мик­ роконтроллера (AT90S8515) и запустить программатор в режиме програм­ мирования флэш-памяти программ кнопкой Program в области Flash окна программатора. Для управления программированием EEPROM в окне про­ грамматора предусмотрена специальная область. Устройство начинает ра­ ботать сразу после завершения программирования. 5.4. Особенности применения микроконтроллеров AVR Как устройство управления микроконтроллер должен обеспечивать при­ ем сигналов, характеризующих состояние объекта управления, обрабаты­ вать эти сигналы в соответствии с реализуемым алгоритмом управления, формировать и передавать управляющие воздействия, отображать в уст­ ройствах индикации информацию о текущем состоянии объекта и режимах его работы. Кроме этого, практически всегда необходимо управление па­ раметрами и режимами работы, которое производится с пульта управления, содержащего кнопки пуска, останова, сброса, изменения заданных значе­ ний рабочих параметров и т.п. Все необходимые элементы должны проек­ тироваться параллельно с разработкой общего алгоритма работы микро контроллерной системы управления. Пример такого решения задачи рас­ смотрен в разделе 5,2. Рекомендации по применению программно-аппаратных средств микро­ контроллера приведены ранее. Подключение к микроконтроллеру допол­ нительных внешних элементов и устройств должно производиться с согла­ сованием электрических и временных параметров сигналов, алгоритмов обмена, нагрузочной способности и т.п. Если в сигнальных цепях возможна передача напряжений, превышающих напряжение питания микроконтрол­ лера, применение устройств гальванической развязки обязательно. Приве­ денные далее параметры сигналов соответствуют стандартному напряже­ нию питания микроконтроллера +5 В. При выборе портов ввода-вывода микроконтроллера для приема или вы­ дачи логических сигналов необходимо учитывать альтернативные функции этих портов. Если определенные аппаратные средства применяются при решении задачи, соответствующие их функциям входы и выходы портов жестко закреплены. Поэтому перед распределением функций портов необ­ ходимо определить функции и режимы аппаратных средств микроконтрол­ лера и используемые ими линии ввода-вывода. Уровни сигналов микроконтроллера соответствуют стандартным логи­ ческим сигналам для напряжения питания +5 В. Нагрузочная способность портов в режиме вывода - 20 мА, однако не рекомендуется нагружать этим максимальным током более трех выходов одновременно. Входное сопро­ тивление в режиме ввода высокое, даже при использовании внутренних ре­ зисторов портов для задания пассивного высокого уровня сигнала допол­ нительный ток входных цепей не превышает нескольких мкА. Если требу­ ются логические сигналы с другими параметрами на входах или выходах микроконтроллера, должны использоваться схемы сопряжения (транзи­ сторные ключи, интегральные схемы преобразователей уровня, усилители мощности и т.п.) с необходимыми характеристиками преобразования. Логические сигналы для управления параметрами и режимами работы удобно формировать кнопками с замыкающими контактами. Если на входе управления задать пассивный высокий уровень и второй контакт кнопки подключить к общему проводу, то замыкание контактов кнопки легко идентифицируется низким уровнем сигнала на входе порта и не требуется подключения никаких дополнительных элементов. При обработке сигналов кнопок или других устройств с механическими контактами (реле, концевые выключатели, клавиатура и т.п.) необходимо учитывать "дребезг" контак­ тов- В микроконтроллере устранение "дребезга" можно выполнить без применения дополнительных внешних устройств, установив период по­ вторного опроса этих линий ввода около 100 мс с помощью одного из тай­ меров. Индикацию простых логических сигналов можно выполнить подключе­ нием светодиодов через токоограничивающие резисторы непосредственно к выходам портов микроконтроллера. Отображение более сложной инфор­ мации (цифровые, символьные или матричные индикаторы) целесообраз­ нее обеспечивать с помощью дополнительных внешних устройств и вы­ полнять вывод необходимых данных в последовательном формате, напри­ мер, через интерфейс SPI. Преобразование аналоговых сигналов, поступающих на линии ввода порта А, в цифровой формат производится 8-канальным десятиразрядным АЦП. Диапазон преобразуемых напряжений зависит от опорного напряже­ ния UREF, подаваемого на вход AREF микроконтроллера. Цифровой код N и амплитуда входного сигнала UBX определяются следующим образом:

U -и U BX U I 2l REF o ' Рекомендуется значение UR F ОКОЛО 4 В, тогда при изменении амплиту­ ды сигнала UBX от 0 до 4 В цифровой код N будет изменяться от $000 до $3FF, соответствие между амплитудой сигнала и цифровым кодом можно найти по приведенной выше формуле. Так как точность формирования UREF существенно влияет на точность преобразования АЦП, в качестве источни­ ков опорного напряжения необходимо применение специализированных прецизионных интегральных микросхем. Например, микросхема REF198E (Analog Devices) при напряжении питания 5 В позволяет получить напря­ жение 4,096 В с точностью ±2 мВ и весьма низким температурным и вре­ менным дрейфом. Нельзя подавать на входы микроконтроллера напряжение более 4,7 В, использование же слишком низких значений опорного напряжения приве­ дет к снижению точности преобразования особенно при малых уровнях сигналов. Рекомендуемое значение тактовой частоты АЦП 50 кГц - 200 кГц, при более высоких тактовых частотах работа возможна, но снижается точность преобразования. ЦАП для формирования аналоговых выходных сигналов в составе мик­ роконтроллера не предусмотрен. При необходимости можно использовать только внешний ЦАП, передавая для него цифровые сигналы через интер­ фейсы микроконтроллера. Однако в большинстве применений необходи­ мые аналоговые сигналы можно формировать с помощью таймеров микро­ контроллера в режиме модуляторов ШИМ. Как известно, при использова­ нии ШИМ усиление сигналов по мощности производится более простыми средствами, необходимы только дополнительные силовые сглаживающие фильтры для получения приемлемых уровней пульсаций аналоговых вы­ ходных сигналов.

ЗАКЛЮЧЕНИЕ Высокая эффективность современных средств автоматизации в значи­ тельной степени определяется применяемыми алгоритмами управления. Наиболее универсальны для выполнения разнообразных процедур преобра­ зования данных, лежащих в основе алгоритмов управления, микропроцес­ сорные устройства. Следует учитывать, что особенности программной реа­ лизации этих алгоритмов в микропроцессорных системах накладывают оп­ ределенные ограничения. Рациональное сочетание возможностей про­ граммной и аппаратной реализации позволяет существенно смягчить эти ограничения. Именно такое сочетание возможностей лежит в основе мик­ роконтроллеров - наиболее эффективных, универсальных и популярных компонентов современных средств автоматизации.

БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Каган Б.М., Сташин В.В. Основы проектирования микропроцессорных устройств автоматики. - М.: Энергоатомиздат, 1987. 2. Иванов Ю.И., Югай В.Я. Микропроцессорные устройства систем управления: Методическое руководство к лабораторным работам. Таганрог: Изд-во ТРТУ, 2004.

Регистр Адрес Бит Бит [ Бит Бит Бит Бит J Бит j Бит О SREG SPH SPL GIMSK GIFR TIMSK TiFR MCUCR MCUSR TCCPvO | TCNTO TCCRIA i TCCR1B TCNT1H 3F (5F) s I ] т ~Т~ н 4У s "У"v SP4 &, '*' v — — N z Г : ' « •;

'SP SP | с ЗЕ (5Е) - 'f ? " *«" * * ~ %, 3D(5D)1 ЗВ (5В) ЗА С5А) 39 (59) 38 (58) SP7 INTl INTFi OCIE2 OCF2 SP6 INTO j i H^piMfeapofe SP '* j SP j \ SP8 SPO j j % SP5 \Л?\С^;

«^** Йфда11СМ11^Й|^^ ;

;

fc/.4^uV|^|\| ! INTFO | j TOIC2 TOV2 SE i *" ICF1 SMI * \" ' OCF1A.fifeисдошьз$|&$ш>Д < *.;

Д -- "-'у* \ !

| 1ICIL | OCIE1A ! OC1L1B ' TOIEI I OCF1B ! ISC 11 TO VI ISC " *^%ri ISCOl iofE ° '..->•»„ г] TOV 35 (55) L c v i l r ^ j 34 (54) 33 (53) 32 (52) 2F (4F) 2E (4E) 2D (4D) СОМ! А! ICNC SMO i FSCOO i EXTRF : PORT Г\И1 ' f^Qflfi Регистр таймера 0 (8 биг) СОМ!АО j COM1B1 COM] BO : \'к<*4"\\ t PWM11 j PWM10 CI CI ICESI i::;

Y^rA:

csiiz CS | CS Регистр таймера I (старший байт) Регистр таймера 1 (младший байт) Регистр канала сравнения А таймера 1 (старший баш) Регистр канала сравнения А таймера I (младший байт) 2C (4C) | TCNT1L ! OCR1AH | 2B (4B) j j OCR1AL | 2A (4A) Продолжение прил. Регистр OCR1BH OCR1BL ICR1H ICR1L TCCR2 TCNT2 OCR2 ASSR WDTCR EEARH EEARL EEDR EECR PORTA DDRA PINA PORTB DDRB Адрес 29 (49) 28 (48) 27 (47) 26 (46) Бит 7 Бит 6 Бит 5 Бит 4 БитЗ Бит 2 Бит 1 Бит 0 Регистр канала сравнения В таймера 1 (старший байт) Регистр канала сравнения В таймера 1 (младший байт) Регистр режима захват таймера 1 (старший байт) Регистр режима захват таймера 1 (младший байт) CS22 CS21 [ CS20. TCN2UB OCR2UB | TCR2UB WDP1 WDPO : ]~iEAR8 ;

V"r> ' • 25 (45) !-& *'т\К'* 1 PWM2 | СОМ21 J COM20 СТС2 24 (44) Регистр таймера 2 (8 бит) 23 (43) 22(42) 21(41) j ^ : | ^ ^ 1F(3F) !vr^?^W': ;

^^V ;

"^ 1Е(ЗЕ) ID (3D) 1С(ЗС) ;

1В(ЗВ) 1А(ЗА) 19(39) | 18(38) ] 17(37) ;

Регистр режима захват таймера 2 (8 бит) AS2 WDTOE WDE ч :: ";

: j EEAR3 EERIE PORTA3 DDA3 PINA3 PORTB3 DDB3 WDP2 ;

^] ^^Щщъ^ EEAR4 \: j :

Z' •" EEAR EEAR J EEAR EEAR2 | EEAR1 pEEARO EEMWE PORTA2 DDA2 P1NA2 PORTB2 DDB2 EEWE | DDA1 EERE DDAO Регистр данных ППЗУ (EEPROM) \ А < -* Шъм^тяшутт, * DDA7 | PINA7 | DDB7 | DDA6 P1NA6 DDB6 ! DDA5 P1NA5 DDB s PORTA7| PORTA6 | PORTA5 ! PORTA4 DDA4 PINA4 DDB PORTA I j PORTAO PINA1 | PINAO PORTB 1 PORTBO DDB1 DDBO PORTB7 | PORTB PORTB5 | PORTB Регистр PINB j PORTC Адрес 16(36) 15(35) 14 (34) 13 (33) 12 (32) 11(31) 10 (30) OF (2F) 0E (2E) OD (2D) ОС (2С) OB (2B) 0A (2A) 09 (29) 08 (28) 07 (27) 06 (26) 05 (25) 04 (24) Бит 7 PINB7 DDC7 P1NC7 PORTD7 DDD7 PIND7 SPIF SP1E RXC RXCIE j Бит 6 1 PINB Бит 5 PINB5 PORTC5 DDC5 PINC5 PORTD5 DDD5 PIND Бит Бит ~~Бит 2~" Бит Бит!) PORTC7 | PORTC PINB3 PINB2 PINB1 PINB4 PORTC4 |PORTC3 PORTC2 PORTC1 DDC4 PINC4 PORTD4 DDD4 PIND4 | DDC3 DDC2 PINC2 DDD2 PIND2 DDC1 ( PJNC1 DDD1 PIND PINB0 PORTC0 DDC0 PINC0 PORTD0 DDD0 PIND0 | 1 DDRC j PINC PORTD DDRD PIND SPDR SPSR SPCR UDR USR UCR UBRR ACSR ADMUX ADCSR ADCH ADCL 1 DDC j PINC6 PORTD6 DDD6 PIND6 WCOL SPE ТХС TXCIE ;

ршсз DDD3 PIND PORTD3 PORTD2 PORTD Регистр данных SPI (8 бит) DORD UDRE UDRIE АСО MSTR FE RXEN ACI CPOL OR TXEN ACIE ADIE СРНА SPR1 SPR Регистр данных UART (8 бит) \ ч ч tfe нотол^^хЬ!^ 4}' \ CHR9 RXB8 ТХВ8 Регистр скорости UART (8 бит) 1 Ш^!г!ШШ1^Ш ADEN | ADC7 | ADSC ADC6 ADFR ADC <:

ADIF J ADC * '-<Д ACIC ACIS1 ACIS0 ADMUX2 ADMUX1 ADMUX0 ADPS2 ADPS1 ADC9 ADPS0 ADC8 ADC0 j ЩЖШШ$^^ 1 ADC ADC2 | ADC Иванов Юрий Иванович Югай Владислав Яковлевич МИКРОПРОЦЕССОРНЫЕ УСТРОЙСТВА СИСТЕМ УПРАВЛЕНИЯ Учебное пособие Ответственный за выпуск Югай В.Я. Редактор Кочергина Т.Ф.. Корректор Надточий З.И.

ЛП № 020565 от 23.06.1997 г. Подписано к печати **.оъ*г Офсетная печать Усл. п.л, - 8,3 Уч.-изд.л. - 8Д Заказ № -f"^ Тираж j$0 экз.

Pages:     | 1 ||





© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.