КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Краткие сведения. 7.6.1 Где расположен стек и чем ограничена его величина?
Цель работы Контрольные вопросы
7.6.1 Где расположен стек и чем ограничена его величина? 7.6.2 Что надо сделать, чтобы подпрограмма обработки прерывания выполнялась только один раз, если параметром входного сигнала, вызывающего прерывание является низкий уровень. 7.6.3 По какому принципу организован стек и где он используется? 7.6.4 Зачем нужны прерывания? 7.6.5 Какие источники прерывания используются в микроконтроллере AT90S8535? 7.6.6 Какие действия в программе необходимо предусмотреть для выполнения прерывания? 7.6.7 Какова последовательность выполнения процедуры прерывания в микроконтроллере? 7.6.8 Какие регистры необходимо программировать при использовании внешних прерываний? 7.6.9 Какие выводы (линии портов) микроконтроллера AT90S8535 используются для внешних прерываний?
8 ЛАБОРАТОРНАЯ РАБОТА «ПРОГРАММИРОВАНИЕ ТАЙМЕРОВ/СЧЕТЧИКОВ»
Изучение функционирования и освоение приемов программирования таймеров/счетчиков.
В составе любого микроконтроллера содержится хотя бы один таймер/счетчик. В микроконтроллерах они используются для задания интервалов времени и для подсчета внешних событий. Многие таймеры могут работать в режиме широтно-импульсного модулятора. Эти действия можно осуществить и программным путем, но в этом случае замедляется выполнение других действий, а в некоторых случаях делает их невозможным. Использование для выполнения каких-то действий дополнительных устройств увеличивает быстродействие программы и расширяет возможности микроконтроллера. Взаимодействие основной программы с дополнительными устройствами наиболее рационально строить с использованием системы прерываний. Микроконтроллер АТ90S8535 содержат три таймера/счетчика: Т0, Т1, Т2 общего назначения и один сторожевой таймер. Все таймеры/счетчики суммирующие. Таймер/счетчик Т0 8-разрядный. Входной сигнал может поступать с внешнего вывода – порта РВ0 (Т0) или от внутреннего тактового генератора микроконтроллера. При использовании внутреннего тактового генератора переключающим перепадом является перепад тактовой частоты с низкого уровня на высокий (с 0 на 1). В состав таймера/счетчика Т0 входит предварительный делитель, позволяющий делить тактовую частоту ступенчато в 8, 64, 256 или 1024 раз. Максимальный коэффициент деления тактовой частоты при использовании предварительного делителя - 262144. При использовании таймером/счетчиком внешнего сигнала этот сигнал синхронизируется с тактовой частотой микроконтроллера. Для обеспечения правильной синхронизации внешнего сигнала необходимо, чтобы минимальное время между двумя входящими тактовыми циклами было не менее одного периода внутреннего тактового сигнала микроконтроллера. Переключающий перепад от внешнего сигнала можно задавать программно. Максимальный модуль счета (коэффициент деления внешней входной частоты) – 256. Перечень векторов прерывания, используемых таймером/счетчиком Т0, представлен в таблице 8.1.
Таблица 8.1.Векторы прерывания таймера/счетчика Т0
Счет таймера/счетчика Т0 осуществляется в регистре TCNT0. Регистр таймера/счетчика – TCNT0 ( $32 ($52))
Регистр содержит текущее состояние таймера/счетчика Т0. Считать данные из регистра или записать новые данные в регистр можно программным путем в любой момент. При записи некоторого значения в регистр программным путем счет продолжается с этого значения. Исходное состояние битов 7…0 после включения питания – 0.
Режим работы таймера/счетчика Т0 определяет регистр TCCR0 Регистр управления таймером/счетчиком Т0 - TCCR0 ( $33 ($53))
Биты 2,1,0 - CS02, CS01, CS00 биты выбора режима работы таймера/счетчика Т0. Режимы работы, задаваемые этими битами, представлены в таблице 8.2.
Таблица 8.2. Режимы работы таймера/счетчика Т0
При комбинации битов CS02… CS00 – 000 счет таймера/счетчика Т0 остановлен, при остальных комбинациях разрешен. При комбинациях 001…101 таймер/счетчик Т0 подключен к внутреннему тактовому генератору через предварительный делитель. При комбинациях 110…111 таймер/счетчик Т0 подключен к внешнему выводу РВ0. Исходное состояние битов 7…0 после включения питания – 0.
Регистры SREG, TIMSK и TIFR отвечают за прерывания от таймера/счетчика Т0. Регистр состоянияSREG ( $3F ($5F))
Бит 7 – I разрешение всех прерываний. Для разрешения всех прерываний этот бит должен быть установлен в 1. Аппаратно очищается после возникновения прерывания и устанавливается и устанавливается автоматически командой RETI. Исходное состояние бита 7 после включения питания – 0. Регистр состояниямасок прерываний по таймерам/счетчикам TIMSK ($39 ($59))
Бит 0 – TOIE0, разрешение прерывания при переполнении таймера/счетчика Т0. При установленном в 1 бите TOIE0 и установленном в 1 бите I регистра статуса SREG прерывание разрешается. Исходное состояние бита 0 после включения питания – 0. Регистр флагов прерываний по таймерам/счетчикам TIFR ($38 ($58))
Бит 0 - TOV0, флаг переполнения таймера/счетчика Т0. Бит TOV0 устанавливается при переполнении таймера/счетчика Т0. Он аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1. При установленном бите I в регистре SREG, установленных битах TOIE0 и TOV0 выполняется прерывание при переполнении таймера/счетчика Т0. Программно установить флаг таймера счетчика невозможно. Исходное состояние бита 0 после включения питания – 0.
Таймер/счетчик Т1 16-разрядный. Входной сигнал может поступать с внешнего вывода – порта РВ1 (Т1) или от внутреннего тактового генератора микроконтроллера. Возможна работа в качестве широтно-импульсного модулятора. Таймер/счетчик Т1 имеет выходы PD4 (ОС1В) и PD5 (ОС1А). При использовании внутреннего тактового генератора переключающим перепадом является перепад тактовой частоты с низкого уровня на высокий (с 0 на 1). В состав таймера/счетчика Т1 входит предварительный делитель, позволяющий делить тактовую частоту ступенчато в 8, 64, 256 или 1024 раз. Максимальный коэффициент деления тактовой частоты при использовании предварительного делителя - 67108864. В состав таймера/счетчика Т1 входит компаратор, содержащий регистры сравнения А и В, с которыми сравнивается состояние счетчика. При использовании таймером/счетчиком Т1 внешнего сигнала этот сигнал синхронизируется с тактовой частотой микроконтроллера. Для обеспечения правильной синхронизации внешнего сигнала необходимо, чтобы минимальное время между двумя входящими тактовыми циклами было не менее одного периода внутреннего тактового сигнала микроконтроллера. Переключающий перепад от внешнего сигнала можно задавать программно. Максимальный модуль счета (коэффициент деления внешней входной частоты) – 65536. При работе в режиме широтно-импульсного модулятора (ШИМ) таймер/счетчик Т1 и регистры сравнения выхода A и B образуют сдвоенный 8, 9 или 10-разрядный автономный генератор ШИМ с правильным чередованием фаз, отсутствием ложных выбросов и выходами с выводов PD5(OC1A) и PD4(OC1B). В данной лабораторной работе режим ШИМ не используется, и поэтому особенности его не рассматривается. Перечень векторов прерывания, используемых таймером/счетчиком Т1, представлен в таблице 8.2.
Таблица 8.2.Векторы прерывания таймера/счетчика Т1
Счет таймера/счетчика Т1 осуществляется в 16-разрядном регистре TCNT1.
Регистр таймера/счетчика – TCNT1
Регистр содержит текущее состояние таймера/счетчика Т1. С тем, чтобы CPU могло считывать/записывать и старший и младший байты этого регистра одновременно, обращение реализовано посредством 8-разрядного регистра временного хранения (TEMP). Если основная программа и подпрограммы обработки прерываний используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время обращения из основной программы (и из прерывающей подпрограммы, когда прерывания разрешаются изнутри прерывающей подпрограммы). Запись в таймер/счетчик Т1 (TCNT1). Когда CPU производит запись в старший байт (TCNT1H), записываемые данные размещаются в регистре TEMP. Затем, когда CPU производит запись в младший байт (TCNT1L) данные младшего байта объединяются с байтом данных регистра TEMP и все 16 битов одновременно переписываются в регистр таймера/счетчика TCNT1. Следовательно, при 16-разрядных операциях обращение к старшему байту (TCNT1H) должно выполняться первым. Чтение таймера/счетчика Т1 (TCNT1). Когда CPU считывает младший байт (TCNT1L), то содержимое TCNT1L направляется непосредственно, содержимое старшего байта (TCNT1H) размещается в регистре TEMP и при считывании старшего байта (TCNT1H) его содержимое CPU принимает из регистра TEMP. Следовательно, при 16-разрядных операциях первым должно выполняться обращение к младшему байту (TCNT1L). Считать данные из регистра или записать новые данные в регистр можно программным путем в любой момент. При записи некоторого значения в регистр TCNT1 программным путем счет продолжается с этого значения. Исходное состояние битов 15…0 после включения питания – 0.
Регистры сравнения A выхода таймера/счетчика Т1 – OCR1A
Регистры сравнения B выхода таймера/счетчика Т1 – OCR1B
16-разрядные регистры сравнения выхода обеспечивают возможность и чтения и записи. Значение регистров сравнения выхода таймера/счетчика Т1 постоянно сравнивается с состоянием таймера/счетчика Т1. При достижении их равенства устанавливается флаг прерывания по совпадению в тактовом цикле CPU, следующем за самим совпадением. Действие, запускаемое при совпадении, определяется регистрами управления TCCR1А и TCCR1В. Если в регистры TCNT1 и OCR1A или OCR1B программно будут записаны одинаковые значения, то совпадение при сравнении сформировано не будет. Поскольку регистры сравнения выхода OCR1A и OCR1B являются 16-разрядными, то для обеспечения одновременного занесения старшего и младшего байтов данных в регистры OCR1A/B используется регистр временного хранения TEMP. Когда CPU записывает старший байт, то данные временно сохраняются в регистре TEMP. Когда же CPU записывает младший байт OCR1AL или OCR1BL, то одновременно содержимое регистра TEMP переписывается в OCR1AH или OCR1BH. Следовательно, при 16-разрядных операциях старшие байты регистров OCR1A/B должны записываться первыми. Если основная программа и подпрограммы обработки прерываний используют обращение к регистрам посредством TEMP, то прерывания должны быть запрещены на время этого обращения, Исходное состояние битов 15…0 после включения питания – 0.
Режим работы таймера/счетчика Т1 определяют регистры TCCR1А и TCCR1В. Регистр управления А таймером/счетчиком Т1 – TCCR1А ( $2F ($4F))
Биты 7,6 - COM1A1, COM1A0 определяют характер сигнала выхода на выводе PD5 (OC1A) в случае совпадения текущего состояния таймера/счетчика Т1 (регистр TCNT1) и регистра OCR1A сравнения A выхода таймера/счетчика Т1. Режимы работы выхода PD5 (OC1A) при совпадении представлены в таблице 8.3.
Таблица 8.3.Режимы работы выхода PD5 (OC1A) при совпадении
Биты 5,4 - COM1В1, COM1В0 определяют характер сигнала выхода на выводе PD4 (OC1В) в случае совпадения текущего состояния таймера/счетчика Т1 (регистр TCNT1) и регистра OCR1В сравнения В выхода таймера/счетчика Т1. Режимы работы выхода PD4 (OC1В) при совпадении представлены в таблице 8.4.
Таблица 8.4.Режимы работы выхода PD4 (OC1В) при совпадении
В ШИМ режиме функции этих битов отличаются. При изменении битов COM1А1,COM1А0 или COM1В1,COM1В0 прерывания TIMER1 COMPA и TIMER1 COMPВ по сравнению выхода таймера/счетчика Т1 должны быть запрещены очисткой битов разрешения прерывания в регистре TIMSK. В противном случае при изменении битов COM1А1,COM1А0 или COM1В1,COM1В0 может произойти прерывание Биты 1,0 - PWM11, PWM10 биты выбора режима ШИМ. В данной лабораторной работе режим ШИМ не используется и должен быть отключен. Поэтому значение этих битов должно быть нулевым. Исходное состояние битов 7…0 после включения питания – 0.
Регистр управления В таймером/счетчиком Т1 – TCCR1B ( $2Е ($4Е))
Биты 7,6 - ICNC1,ICES1 управляют режимом захвата. В данной лабораторной работе режим захвата не используется и должен быть отключен. Поэтому значение этих битов должно быть нулевым.
Бит 3 - CTC1 очистка (сброс в 0) таймера/счетчика Т1 при совпадении. При установленном в состояние 1 бите CTC1, таймер/счетчик Т1 сбрасывается в состояние 0 в течение тактового цикла, следующего за совпадением содержимого регистра OCR1A и таймера/счетчика Т1. Если бит CTC1 очищен (0), таймер/счетчик Т1 продолжает счет и не реагирует на совпадение. Биты 2,1,0 – CS12, CS11, CS10 биты выбора режима работы таймера/счетчика Т1. Режимы работы, задаваемые этими битами, представлены в таблице 8.5.
Таблица 8.5. Режимы работы таймера/счетчика Т1
При комбинации битов CS12… CS10 – 000 счет таймера/счетчика Т1 остановлен, при остальных комбинациях разрешен. При комбинациях 001…101 таймер/счетчик Т1 подключен к внутреннему тактовому генератору через предварительный делитель. При комбинациях 110…111 таймер/счетчик Т1 подключен к внешнему выводу РВ1 (Т1). Исходное состояние битов 7…0 после включения питания – 0.
Регистры SREG, TIMSK и TIFR отвечают за прерывания от таймера/счетчика Т1. Регистр состоянияSREG ( $3F ($5F))
Бит 7 – I разрешение всех прерываний. Для разрешения всех прерываний этот бит должен быть установлен в 1. Аппаратно очищается после возникновения прерывания и устанавливается и устанавливается автоматически командой RETI. Исходное состояние бита 7 после включения питания – 0.
Регистр масок прерываний по таймерам/счетчикам TIMSK ($39 ($59))
Бит 4 - OCIE1A разрешение прерывания при совпадении регистра OCR1A с таймером/счетчиком Т1. При установленном бите OCIE1A и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $006) выполняется, если произойдет совпадение содержимого регистра OCR1A с состоянием таймера/счетчика Т1. В регистре флагов TIFR устанавливается флаг OCF1A. Бит 3 - OCIE1B разрешение прерывания при совпадении регистра OCR1B с таймером/счетчиком Т1 При установленном бите OCIE1B и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $007) выполняется, если произойдет совпадение содержимого регистра OCR1B с состоянием таймера/счетчика Т1. В регистре флагов TIFR устанавливается флаг OCF1B. Бит 2 - TOIE1 разрешение прерывания при переполнении таймера/счетчика Т1. При установленном бите ТOIE1 и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $008) выполняется, если произойдет переполнение таймера/счетчика Т1. В регистре флагов TIFR устанавливается флаг TOV1. Исходное состояние битов 4…2 после включения питания – 0. Регистр флагов прерываний по таймерам/счетчикам TIFR ($38 ($58))
Бит 4 - OCF1A флаг прерывания при совпадении регистра OCR1A с таймером/счетчиком Т1. Бит OCF1A устанавливается при совпадении состояния таймера/счетчика Т1 и содержимого регистра OCR1A. Бит OCF1A аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1. Бит 3 - OCF1В флаг прерывания при совпадении регистра OCR1В с таймером/счетчиком Т1. Бит OCF1В устанавливается при совпадении состояния таймера/счетчика Т1 и содержимого регистра OCR1В. Бит OCF1В аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1.
Бит 2 - TOV1 флаг переполнения таймера/счетчика Т1 Бит TOV1 устанавливается при переполнении таймера/счетчика Т1. Он аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1 Программно установить флаг таймера счетчика невозможно. Исходное состояние битов 4…2 после включения питания – 0.
Таймер/счетчик Т2 8-разрядный. Входной сигнал может поступать с внешнего вывода – порта РС6 (TOSC1) или от внутреннего тактового генератора микроконтроллера. Возможна работа в качестве широтно-импульсного модулятора. Таймер/счетчик Т2 имеет выход PD7 (ОС2). Переключающим перепадом от тактового генератора является перепад с низкого уровня на высокий (с 0 на 1). В состав таймера/счетчика Т2 входит предварительный делитель, позволяющий делить внешнюю входную и тактовую частоту ступенчато в 8, 32, 64, 128, 256 или 1024 раз. Максимальный коэффициент деления таймера/счетчика Т2 при использовании предварительного делителя - 262144. Таймер/счетчик Т2 содержит компаратор с регистром сравнения, с которыми сравнивается состояние счетчика. При использовании внешнего сигнала c входа РС6 таймер/счетчик Т2 работает в асинхронном режиме, т. е. вне зависимости тактовой частоты микроконтроллера. Такой режим в данной лабораторной работе не используется, и поэтому особенности его не рассматриваются. При работе в режиме широтно-импульсного модулятора (ШИМ) таймер/счетчик Т2 и регистр сравнения выхода OCR2 образуют 8-разрядный генератор ШИМ с правильным чередованием фаз, отсутствием ложных выбросов и выходом с выводов PD7 (OC2). В данной лабораторной работе режим ШИМ не используется, и поэтому особенности его не рассматривается. Перечень векторов прерывания, используемых таймером/счетчиком Т2, представлен в таблице 8.5.
Таблица 8.5.Векторы прерывания таймера/счетчика Т2
Счет таймера/счетчика Т2 осуществляется в регистре TCNT2. Регистр таймера/счетчика – TCNT2 ( $24 ($44)) Регистр содержит текущее состояние таймера/счетчика Т2. Считать данные из регистра или записать новые данные в регистр можно программным путем в любой момент. При записи некоторого значения в регистр TCNT2 программным путем счет продолжается с этого значения. Исходное состояние битов 7…0 после включения питания – 0.
Регистры сравнения выхода таймера/счетчика Т2 – OCR2 ( $23 ($43))
8-разрядный регистр сравнения выхода обеспечивает возможность и чтения и записи.
Значение регистра сравнения выхода таймера/счетчика Т2 постоянно сравнивается с состоянием таймера/счетчика Т2. При достижении их равенства устанавливается флаг прерывания по совпадению в тактовом цикле CPU, следующем за самим совпадением. Программная запись одного и того же значения в таймер/счетчик Т2 и в регистр сравнения выхода OCR2 не приведет к формированию совпадения при сравнении. Исходное состояние битов 7…0 после включения питания – 0.
Режим работы таймера/счетчика Т2 определяет регистр TCCR2 Регистр управления таймером/счетчиком Т2 – TCCR2 ( $25 ($45))
Биты 5,4 – COM21, COM20 определяют характер сигнала выхода на выводе PD7 (OC2) в случае совпадения текущего состояния таймера/счетчика Т2 (регистр TCNT2) и регистра OCR2 сравнения выхода таймера/счетчика Т2. Режимы работы выхода PD7 (OC2) при совпадении представлены в таблице 8.6.
Таблица 8.6.Режимы работы выхода PD7 (OC2) при совпадении
В ШИМ режиме функции этих битов отличаются.
Бит 3 - CTC1 очистка (сброс в 0) таймера/счетчика Т2 при совпадении. При установленном в состояние 1 бите CTC2, таймер/счетчик Т1 сбрасывается в состояние 0 в течение тактового цикла, следующего за совпадением содержимого регистра OCR2 и таймера/счетчика Т2. Если бит CTC2 очищен (0), таймер/счетчик Т2 продолжает счет и не реагирует на совпадение. Биты 2,1,0 – CS22, CS21, CS20 биты выбора коэффициента деления предварительного делителя таймера/счетчика Т2. Режимы работы, задаваемые этими битами, представлены в таблице 8.7.
Таблица 8.7. Режимы работы таймера/счетчика Т1
При комбинации битов CS22… CS20 – 000 счет таймера/счетчика Т2 остановлен, при остальных комбинациях разрешен. Исходное состояние битов 7…0 после включения питания – 0.
Регистры SREG, TIMSK и TIFR отвечают за прерывания от таймера/счетчика Т2. Регистр состоянияSREG ( $3F ($5F))
Бит 7 – I разрешение всех прерываний. Для разрешения всех прерываний этот бит должен быть установлен в 1. Аппаратно очищается после возникновения прерывания и устанавливается и устанавливается автоматически командой RETI. Исходное состояние бита 7 после включения питания – 0. Регистр масок прерываний по таймерам/счетчикам TIMSK ($39 ($59))
Бит 7 – OCIE2 разрешение прерывания при совпадении регистра OCR2 с таймером/счетчиком Т2. При установленном бите OCIE2 и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $003) выполняется, если произойдет совпадение содержимого регистра OCR2 с состоянием таймера/счетчика Т2. В регистре флагов TIFR устанавливается флаг OCF2. Бит 6 – TOIE2 разрешение прерывания при переполнении таймера/счетчика Т2. При установленном бите ТOIE2 и установленном бите I регистра статуса SREG прерывание разрешается. Соответствующее прерывание (с вектором $004) выполняется, если произойдет переполнение таймера/счетчика Т2. В регистре флагов TIFR устанавливается флаг TOV2. Исходное состояние битов 7,6 после включения питания – 0.
Регистр флагов прерываний по таймерам/счетчикам TIFR ($38 ($58))
Бит 7 – OCF2 флаг прерывания при совпадении регистра OCR2 с таймером/счетчиком Т2. Бит OCF2 устанавливается при совпадении состояния таймера/счетчика Т2 и содержимого регистра OCR2. Бит OCF2 аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1. Бит 2 – TOV2 флаг переполнения таймера/счетчика Т2. Бит TOV2 устанавливается при переполнении таймера/счетчика Т2. Он аппаратно очищается при обработке соответствующего вектора прерывания. Возможна очистка бита записью во флаг логической 1 Программно установить флаг таймера счетчика невозможно. Исходное состояние битов 7,6 после включения питания – 0.
Дата добавления: 2014-11-18; Просмотров: 374; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |