[257]Лабораторные_МС_68HC11 (8-разрядные микроконтроллеры семейства M68HC11 фирмы Motorola), страница 11
Описание файла
Файл "[257]Лабораторные_МС_68HC11" внутри архива находится в папке "8-разрядные микроконтроллеры семейства M68HC11 фирмы Motorola". PDF-файл из архива "8-разрядные микроконтроллеры семейства M68HC11 фирмы Motorola", который расположен в категории "". Всё это находится в предмете "цифровые устройства и микропроцессоры (цуимп)" из 8 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "цифровые устройства и микропроцессоры" в общих файлах.
Просмотр PDF-файла онлайн
Текст 11 страницы из PDF
ВведениеВ данной работе изучается таймер микроконтроллера MC68HC11E1 и функциональносвязанные с ним устройства.2. Система таймераВстроенный таймер обеспечивает работу нескольких внутренних систем микроконтроллера, в число которых входят:- система обеспечения функции входного захвата;- система обеспечения функции выходного сравнения;- прерывания реального времени;- счетчик пульсаций.Основу таймера составляет 16-разрядный счетчик, источником синхронизации которого является выход предделителя частоты E (эта частота в 4 раза меньше внешней частотысинхронизации и в отладочном модуле HC11EVB составляет 2 МГц).
В предделителе можнопрограммно задать один из четырех коэффициентов деления: 1, 4, 8 или 16. Установка нужного коэффициента производится посредством битов PR1 и PR0 регистра TMSK2 (см.рис. 8.4). Соответствие между состоянием этих битов и коэффициентом деления приведено втабл. 8.1.Таблица 8.1.PR1 PR0 Коэффициент деления001*0141081116* Автоматически устанавливается после сброса.В нормальных режимах работы микроконтроллера модификация этих битов возможнатолько в течение первых 64 циклов E после сброса. В специальных режимах работы этогоограничения нет.Состояние счетчика инкрементируется на 1 с каждым импульсом синхронизации.
Этосостояние можно прочитать из 16-битного регистра TCNT, представленного в виде двух8-битных регистров, находящихся по адресу $100E (старший байт) и $100F (младший байт).Регистр TCNT не доступен для модификации (исключение составляет режим теста) и такимобразом пользователь может только считывать его состояние. При переходе состояния таймера от $FFFF к $0000 устанавливается флаг переполнения таймера TOF (бит 7) регистрафлагов таймера TFLG2 (см. рис.
8.3.). Прерывание по установке этого бита можно разрешитьустановкой бита TOI регистра маскирования прерываний TMSK2.Рассмотрим пример использования прерывания по переполнению таймера для реализации программы динамического управления светодиодами - бегущих огней. Запишите в память следующую подпрограмму:cpu6811tflg2equ$25; регистр флагов таймера 2org$00d0jmpto;;;;вектор прерывания по переполнениютаймерапереход на подпрограмму обслуживанияпрерыванияСистема таймера.48toj1Лабораторная работа №8; начало подпрограммы обслуживания; прерыванияorg$d100ldybset#$1000tflg2,y,#%10000000ldaalslabccoraastaa$1f04; сброс флага переполнения; таймера; циклический сдвиг влево; состояния светодиодовj1#1$1f04rti; возврат из прерыванияЗапишите в регистр порта B (адрес $1f04) какое-либо число, например, $49.
При этом онодолжно отобразиться на светодиодах. Запишите по адресу $1024 (регистр TMSK2) число $83(%10000011), установив таким образом коэффициент деления для таймера 16 (при этом частота переполнений таймера будет составлять 2000000/(65535(16) C 1.9 Гц) и разрешив прерывания по переполнению таймера. При этом на светодиодах будет происходить циклическое перемещение исходного состояния влево.
Попробуйте изменить коэффициент предделителя, обратите внимание на изменение скорости переполнения таймера.Примечание. В предлагаемой лабораторной работе после выполнения каждого примеражелательно производить сброс микроконтроллера с последующим восстановлением связидля инициализации состояния внутренних регистров.3. Функция входной фиксацииФункцию входной фиксации обеспечивают 16-битовые регистры, доступные толькодля чтения. При обнаружении заданного перепада на входной линии одного из каналоввходной фиксации, происходит запись содержимого счетчика таймера в соответствующийрегистр входной фиксации.
Также при этом устанавливается соответствующий флаг в регистре флагов TFLG1 (первому каналу входной фиксации соответствует бит 2, второму - бит1, третьему - бит 0 и четвертому - бит 3, см. рис. 8.1.) и происходит генерация прерывания,если установлен соответствующий бит регистра TMSK1 (см. рис. 8.2.).$10237OC1F6OC2F5OC3F4OC4F3I4O5F2IC1F1IC2F0IC3FСостояниепосле сброса00000000TFLG1Рис. 8.1.
Регистр флагов прерывания TFLG1.$10227OC1I6OC2I5OC3I4OC4I3I4O5I2IC1I1IC2I0IC3IСостояниепосле сброса00000000TMSK1Рис. 8.2. Регистр маскирования прерывания TMSK1.Система таймера.49Лабораторная работа №8$10257TOF6RTIF5PAOVF4PAIF30201000Состояниепосле сброса00000000TFLG2Рис. 8.3.
Регистр флагов прерывания TFLG2.$10247TOI6RTII5PAOVI4PAII30201PR10PR0Состояниепосле сброса00000000TMSK2Рис. 8.4. Регистр маскирования прерывания TMSK2.$1021Состояниепосле сброса76543210EDG4B EDG4A EDG1B EDG1A EDG2B EDG2A EDG3B EDG3A TCTL200000000Рис. 8.5. Регистр управления таймером TCTL2.Входами четырех каналов входной фиксации могут служить линии 0-3 порта A. Первыетри линии порта A (PA0-PA2) соответствуют каналам IC3, IC2 и IC1 входной фиксации, линия PA3 , в зависимости от состояния бита I4/O5 регистра PACTL (см.
рис. 8.10), может использоваться для обеспечения функции входной фиксации IC4 (I4/O5 = “1”) или выходногосравнения OC5 (I4/O5 = “0”).Перепад, вызывающий активизацию функции входной фиксации для заданного каналакодируется в регистре управления TCTL2 (см. рис. 8.5). Каждая пара линий EDGxB иEDGxA соответствует каналу входной фиксации x.
В табл. 8.2 представлено соответствиемежду состоянием пары и видом активного перепада на соответствующей линии.Таблица 8.2EDGxB EDGxAКонфигурация00Функция вводного захвата запрещена01Захват только по положительному фронту входного сигнала10Захват только по отрицательному фронту входного сигнала11Захват только по любому фронту входного сигналаРассмотрим пример программы, использующей функцию входной фиксации для определения быстроты реакции человека.
Правила работы с программой следующие: после запуска программы необходимо дождаться зажигания светодиода B0 и затем, как можнобыстрее нажать на кнопку PA0. После этого на светодиодах появится (в двоичном коде) время реакции в сотых долях секунды. В случае фальшстарта загорятся все светодиоды.cpu6811portaequ$00; регистр порта Atic3equ$14; регистр входной фиксации 3tflg1equ$23; регистр флагов таймера 1tflg2equ$25; регистр флагов таймера 2tctl2equ$21; регистр управления таймера 2tmsk2equ$24; регистр маскирования прерываний от; таймера 2tcntequ$0e; регистр счетчика таймераСистема таймера.50tmpj1j2Лабораторная работа №8; дополнительная ячейкаequ$00org$00d0jmptoorgldyclr$d000#$1000$1f04; начало основной программыlddtcnt,y; определить псевдослучайную величину; начальной задержкиandborabstab#$1f#$40tmpldaastaa#%10000000tmsk2,y;;;;вектор прерывания по переполнениютаймерапереход на подпрограмму обслуживанияпрерывания; погасить светодиоды; разрешить прерывания по переполнению; таймера, входной коэффициент деления; для таймера - 1cli; разрешить I-прерыванияbrclr porta,y,1,j3; Задержка на 2...3 секунды с проверкой; на фальшстартldabbnetmpj1ldaastaa#%00000011tmsk2,yldaastaastaaincastaa#$1tflg1,y$1f04tctl2,y; разрешить входной захват 3 по; отрицательному фронтуlddstdtcnt,ytmp; записать текущее состояние таймера; в ячейке tmpbrsetlddincacmpabnetflg1,y,#%00000001,j4 ; выход, если произошел захватtcnt,y; цикл на обнаружения превышения 0.5 с;;;;;;установить входной коэффициентделения для таймера 16 (следует иметьв виду, что установка коэффициентаделения в нормальных режимах работыдолжна производится в течение 64первых циклов E после сброса); сброс флага входного захвата 3; зажечь светодиод B0tmpj2Система таймера.51Лабораторная работа №8j3j4toldaa#$ffstaabra$1f04*lddsubatabclraldxidivxgdxstabbratic3,ytmp#5ldaastaadecbneclr#$80tflg2,ytmpto_1tmsk2,y$1f04*; зажечь все светодиоды в случае; фальшстарта или при превышении 0.5 с; расчет задержки; отобразить задержку на светодиоды; сброс флага переполнения таймера; уменьшить счетчик на 1; запретить прерывания по переполнению; таймераto_1rti; возвратРассмотрим более подробно работу программы.
Для осуществления задержки на 2...3секунды используются прерывания по переполнению таймера, которые происходят с частотой 2000000/65536 C 30.51Гц (коэффициент деления устанавливается равным 1). Следовательно для задержки C на 1 сек требуется возникновение 31 прерывания по переполнению.Исходное число требуемых прерываний определяется следующим образом: после стартапрограммы считывается состояние регистра счетчика таймера (TCNT). Поскольку это значение непрерывно меняется с момента аппаратного сброса, на момент старта программы тамнаходится некоторое псевдослучайное значение.
У младшего байта счетчика, записанного ваккумуляторе B, обнуляются старшие три бита, таким образом в аккумуляторе B содержитсяпсевдослучайная величина задержки на 0 ... 32 цикла, или на 0 ... 1.05 секунды. Для смещения этой величины на C 2 секунды, к содержимому B добавляется 64 (%01000000). Содержимое регистра B сохраняется в ячейке tmp, после чего разрешаются прерывания по переполнению таймера. В подпрограмме обслуживания прерывания (to) значение tmp уменьшаетсяна 1 и проверяется на 0. Если значение tmp обнулилось (т.е. произошло заданное количествопрерываний), то прерывания по переполнению запрещаются. В цикле ожидания задержки j1постоянно проверяется не нажата ли кнопка PA0; в этом случае индицируется фальшстарт.Далее после определения и разрешения входного захвата 3 (соответствует линии PA0) зажигается светодиод B0, частота синхронизации таймера уменьшается в 16 раз (т.е.
становитсяравной 2000000/16 = 125000Гц) и запускается цикл ожидания до возникновения входногозахвата 3 (по анализу бита 0 регистра TFLG1). Кроме этого, перед началом цикла запоминается старшая тетрада счетчика таймера, которая сравнивается в цикле с текущим значением старшей тетрады счетчика для определения превышения допустимого времени, котороеопределяется как 16 ( 65536/2000000 C 0.524 с (для того, чтобы исключить срабатывание индикатора превышения сразу после входа в цикл текущее значение счетчика увеличиваетсяна 1). После нажатия на клавишу PA0 происходит входная фиксация, вычисляется разностьмежду старшими байтами конечного и начального содержимого счетчика таймера.