МОТОРОЛЛА
ПОРТЫ
В регистры DDRx вводится управляющий код, программирующий направление передачи для каждого вывода порта: если i-ый бит DDRxi имеет значение 0, то соответствующий вывод порта PTxi является входом, если DDRxi = 1 - то выходом. В процессе начального запуска микроконтроллера в регистрах DDRx устанавливается нулевое значение всех битов, т.е. в исходном состоянии порты запрограммированы на выполнение ввода данных. Обращение к портам производится с помощью команд LDA, LDX и STA, STX. При выполнении команд STA, STX содержимое регистра A или X записывается в регистр PTx адресуемого порта. Если все или часть выводов порта запрограммированы в качестве выходов, то соответствующие разряды содержимого PTx поступают на эти выводы порта. При выполнении команд LDA, LDX производится считывание в регистр A или X данных, поступающих на выводы порта, которые запрограммированы на работу в качестве входов. Если же все или часть выводов данного порта запрограммированы как входы, то считывается содержимое соответствующих разрядов регистра данных PTx. Таким образом, регистры PTx могут использоваться для временного хранения данных.
АЦП
Модуль аналого-цифрового преобразователя ADC08. В состав микроконтроллеров MC68HC908GP32 входит модуль 8-разрядного аналого-цифрового преобразователя ADC08, который содержит входной мультиплексер, выбирающий один из 8 входов аналоговых сигналов, АЦП, работающий по принципу последовательного приближения, регистр управления-состояния ADSCR, регистр управления тактированием ADCLK и регистр результата ADR.
Функционирование АЦП определяется содержимым регистр ADSCR, который содержит следующие биты (рис. 10,а):
COCO – признак окончания преобразования 1 (доступен только для чтения), принимает значение COCO = 1 после выполнения очередного цикла преобразования, если установлено значение бита AIEN=0;
AIEN – разрешает при значении AIEN = 1 формирование запроса прерывания после каждого цикла преобразования;
ADCO – определяет режим работы АЦП: однократное преобразование при значении ADCO = 0, непрерывная работа преобразователя при ADCO = 1;
ADCH4-0 - осуществляют выбор аналогового входа в соответствии с табл. 24 или выключение модуля ADC08 при установке значения ADCH4-0 = 11111.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
COCO |
AIEN |
ADCO |
ADCH4 |
ADCH3 |
ADCH2 |
ADCH1 |
ADCH0 |
а). ADSR (адрес $003C)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
ADIV2 |
ADIV1 |
ADIV0 |
ADICLK |
0 |
0 |
0 |
0 |
б). ADCLK (адрес $003E)
Рис. 10. Формат содержимого регистров ADSCR (а) и ADCLK (б) модуля ADC08
Запуск АЦП производится при выборе необходимого аналогового входа путем записи соответствующего значения битов ADCH4-0 в регистр ADSСR. В процессе работы АЦП принимает потенциал, установленный на выбранном входе ADi, и формирует 8-разрядное число, соответствующее величине этого потенциала, которое записывается в регистр результата ADR (адрес $003D). Считывание результата в регистр A или X для последующей обработки производится командой LDA или LDX.
Поступающий на аналоговый вход потенциал Vвх должен находиться в диапазоне Vr>Vвх>0, где Vrf – величина опорного потенциала, который в микроконтроллерах MC68HC908GP32 равен Vап - напряжению питания АЦП, для подключения которого используются отдельные выводы аналогового питания и “земли”. Между этими выводами обязательно следует включить высокочастотный керамический конденсатор для фильтрации помех. При значении Vrf = Vап = 5 В разрешающая способность АЦП составляет около 20 мВ, а погрешность преобразования 10 мВ.
При установке соответствующих значений битов ADCH4-0 производится измерение потенциала Vrf или потенциала на входе аналоговой «земли» (табл. 9). Такое измерение выполняется для контроля значений этих потенциалов.
Таблица 9. Выбор аналоговых входов модуля ADC08
ADCH4-0 |
Аналоговый вход |
ADCH4-0 |
Аналоговый вход |
00000 |
AD0 (PTB0) |
00101 |
AD10 (PTD2/PTD1**) |
00001 |
AD1 (PTB1) |
00110 |
AD11 (PTD3/PTD0**) |
00010 |
AD2 (PTB2) |
00111 |
AD12 (PTD4) |
00011 |
AD3 (PDTB) |
01000 |
AD13 (PTD5) |
00100 |
AD4 (PTB4) |
01001 |
AD14 (PTD6) |
00101 |
AD5 (PTB5) |
01010-11100 |
Не используются |
00110 |
AD6 (PTB6) |
11101 |
Потенциал Vrf |
00111 |
AD7 (PTB7) |
11110 |
Аналоговая «земля» |
01000 |
AD8 (PTD0/PTD3*) |
11111 |
Отключение АЦП |
01001 |
AD9 (PTD1/PTD2*) |
|
|
В зависимости от значения бита ADCO в регистре ADSCR (рис. 18,а), обеспечиваются следующие режимы работы АЦП:
режим однократного преобразования (ADCO = 0), при котором АЦП автоматически выключается (в регистре ADSCR устанавливается значение битов ADCH4-0 = 11111) после выполнения очередного преобразования и записи результата в регистр ADR;
режим непрерывного преобразования (ADCO = 1), при котором АЦП продолжает многократно выполнять преобразования и выдавать значения потенциала на выбранном аналоговом входе до записи в регистр ADSCR нового содержимого.
При любом режиме работы после выполнения очередного цикла преобразования модуль ADC08 выдает запрос прерывания, если в регистре ADSCR установлено значение бита AIEN = 1. При этом производится обращение к вектору, который размещается в таблице векторов прерываний по адресу $FFDE-DF.
Если прерывания по запросу АЦП запрещены (бит AIEN=0), то после каждого цикла преобразования в регистре ADSCR устанавливается значение признака COCO = 1. В этом случае процессор должен производить программный опрос признака COCO и выполнять считывание результата из регистра ADR, если COCO = 1. Сброс COCO в состояние 0 производится автоматически после чтения содержимого регистра ADR или после записи нового значения в регистр ADSCR.
В состав модуля ADC08 входит схема тактирования, работающая под управлением регистра ADCLK, который содержит следующие биты (рис. 10,б):
ADICLK – определяет выбор сигналов для тактирования АЦП: тактовые импульсы с частотой Ft при установке значения ADICLK = 1 или импульсы с частотой кварцевого резонатора Fq при ADICLK = 0;
ADV2-0 – задает коэффициент деления частоты Ka при формировании тактовых сигналов АЦП (табл. 10).
Таблица 10. Коэффициент деления частоты Ka для модуля ADC08
ADIV2-0 |
Ka |
000 |
1 |
001 |
2 |
010 |
4 |
011 |
8 |
1xx |
16 |
Для получения необходимой точности АЦП должен тактироваться импульсами с частотой Fa = (0,5…1) МГц, причем оптимальным является значение Fa, близкое к 1МГц. Эта частота обеспечивается путем деления тактовой частоты Ft (при значении бита ADICLK = 1) или частоты кварцевого резонатора Fq (при значении бита ADICLK = 0). Необходимое значение коэффициента деления Ka=Ft/Fa или Fq/Fa задается установкой битов ADV2-0 в регистре ADCLK (табл. 10). Нормальная работа АЦП обеспечивается при значениях частоты Ft или Fq не менее 1 МГц.
Для выполнения одного цикла преобразования требуется 17 тактов, поэтому время преобразования составляет около 17 мкс при значении Fa=1 МГц.
Сторожевой таймер
Все микроконтроллеры семейства 68HC08/908 содержат сторожевой таймер COP08 (Computer Operating Properly – 08), с помощью которого производится контроль выполнения текущей программы. При работе сторожевого таймера COP08 программа должна периодически производить запись произвольного байта в регистр управления COPCTL. Этот регистр имеет адрес $FFFF (совпадает с адресом младшего байта вектора запуска) и доступен только для записи (при чтении будет считан младший байт вектора запуска). Если запись в регистр COPCTL не будет произведена в течение определенного периода времени Tw, то сторожевой таймер вызывает перезапуск микроконтроллера . Таким образом, при работе модуля COP08 текущая программа будет выполняться только в том случае, если она будет производить запись в регистр COPTL не реже одного раза за время Tw. Такую запись удобно производить с помощью команды STA $FFFF, которая должна быть включена в текст программы и периодически выполняться.
Сторожевой таймер реализован в виде 18-разрядного счетчика, который образован путем последовательного соединения 12-разрядного счетчика, входящего в состав модуля SIM08, и 6-разрядного счетчика в модуле COP08. Переключение счетчика производится сигналами с частотой кварцевого резонатора Fq. При записи произвольного байта в регистр COPTL старшие разряды счетчика (с 5-го по 18-ый) сбрасываются в 0. Если такого сброса не происходит, то при переполнении счетчика формируется сигнал, вызывающий начальный запуск микроконтроллера.
Включение сторожевого таймера производится при установке значения бита COPD = 0 в регистре конфигурации CONFIG1 (рис. 19,а). При этом бит COPRS в регистре CONFIG1 задает разрядность используемого счетчика: 18 разрядов (полная разрядность) при значении COPRS = 0; 13 разрядов (сокращенная разрядность) при COPRS = 1. В зависимости от значения этого бита устанавливается период срабатывания сторожевого таймера Tw, которое определяется моментом переполнения 18- или 13-разрядного счетчика:
Tw = (2*18 – 2*4)/Fq = 262128Tq при установке значения COPRS =0,
Tw = (2*13 – 2*4)/Fq = 8176Tq при установке значения COPRS=1.
Таким образом, при использовании кварца с резонансной частотой Fq = 4 МГц период срабатывания сторожевого таймера составит Tw = 65,5 мс или 2,04 мс.
В режиме ожидания модуль COP08 продолжает свою работу и может вызвать переход микроконтроллера в рабочий режим (запуск) по истечении времени Tw или ранее (в зависимости от содержимого счетчика при поступлении команды WAIT). Если перед выполнением команды WAIT произвести сброс сторожевого таймера, то спустя время Tw произойдет выход из режима ожидания путем запуска микроконтроллера.
В режиме останова модуль COP08 прекращает работу, но сохраняет свое состояние. После выхода из этого режима возможно срабатывание сторожевого таймера через промежуток времени существенно меньший, чем заданное значение Tw. Поэтому целесообразно производить сброс сторожевого таймера непоcредственно перед выполнением команды STOP, переводящей микроконтроллер в режим останова.
АВр АВР АВР
Таймер
5 Таймеры/счетчики т0 и т2
Восьмиразрядный таймер/счетчик Т0 присутствует во всех моделях микроконтроллеров семейства Mega, а таймер/счетчик Т2 — во всех, кроме ATmega85l5x. Всего в микроконтроллерах семейства реализовано три исполнения восьмиразрядных таймеров/счетчиков, отличающихся набором выполняемых функций. В состав таймеров/счетчиков первого исполнения (Т0 в модели ATmega8x) входят два регистра ввода/вывода: счетный регистр TCNT0 и регистр управления TCCR0. В состав таймеров/счетчиков второго исполнения (в используемом в стенде МК отсутствует такое исполнение) входят уже 3 регистра ввода/вывода: счетный регистр TCNT0 (TCNT2), регистр управления TCCR0 (TCCR2) и регистр сравнения OCR0 (OCR2). В третьем исполнении (Т2 в модели ATmega8x) добавляется регистр ASSR, служащий для управления модулем таймера/счетчика в асинхронном режиме. Таким образом, таймер/счетчик Т0 в ATmega8 (1-ое исполнение) выполняет функции восьмиразрядного счетчика и счетчика внешних событий, а таймер/счетчик Т2 (3-е исполнение) – восьмиразрядного счетчика, ШИМ, формирователя сигналов, часов реального времени.
Количество прерываний, которые могут генерировать таймеры/счетчики Т0 и Т2, также зависит от исполнения. Таймер/счетчик Т0 первого исполнения может генерировать прерывание только при переполнении счетного регистра. В таймерах/счетчиках второго и третьего исполнения прерывание может генерироваться также при равенстве счетного регистра и регистра сравнения. Флаги обоих прерываний находятся в регистре TIFR, а разрешение/запрещение этих прерываний осуществляется установкой/сбросом соответствующих флагов регистра TIMSK.
Счетный регистр таймера/счетчика TCNT0 (TCNT2) входит в состав основного блока модуля — блока реверсивного счетчика. В зависимости от режима работы модуля содержимое счетного регистра сбрасывается, инкрементируется или декрементируется по каждому импульсу тактового сигнала таймера/счетчика clkТ0 (clkТ2). Независимо от того, присутствует тактовый сигнал или нет, регистр доступен в любой момент времени как для чтения, так и для записи. Однако следует помнить, что любая операция записи в счетный регистр блокирует работу блока сравнения на время одного периода тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNT0 (TCNT2) находится нулевое значение. При некоторых изменениях состояния таймера/счетчика, определяемых режимом его работы, устанавливается флаг TOV0 (TOV2) регистра TIFR. Разрешение прерывания осуществляется установкой в «1» разряда TOIE0 (TOIE2) регистра TIMSK (разумеется, флаг I регистра SREG также должен быть установлен в «1»).
Регистр сравнения OCR0 (OCR2) входит в состав блока сравнения модуля. Во время работы таймера/счетчика производится непрерывное (в каждом машинном цикле) сравнение этого регистра с регистром TCNT0 (TCNT2). В случае равенства содержимого этих регистров в следующем машинном цикле устанавливается флаг OCF0 (OCF2) регистра TIFR и генерируется прерывание (если оно разрешено). Кроме того, при наступлении этого события может изменяться состояние вывода ОС0 (ОС1) микроконтроллера. Чтобы таймер/счетчик мог управлять состоянием вывода ОС0 (ОС2), он должен быть сконфигурирован как выходной (соответствующий разряд регистра DDRх должен быть установлен в «1»).
Регистр TCCR0 (TCCR2) предназначен дли управлении модулем таймера/счетчика. Формат этого регистра приведен на рисунке 1.2, а описание его разрядов в таблице ниже.
7 6 5 4 3 2 1 0
- |
- |
- |
- |
- |
CS02 |
CS01 |
CS00 |
Read/Write R R R R R R/W R/W R/W