Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Соловьеву (Восстановлен).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.13 Mб
Скачать
    1. Лабораторная работа 3.«Работа с таймерами и системой прерываний»

Цель работы:

  1. Изучения таймеров и особенностей их работы.

  2. Приобретения навыков написания программ обработки прерываний .

Теоретические сведения

В любом современном микроконтроллере имеются контроллер прерываний и несколько таймеров. Программное формирование временных последовательностей и измерение времени имеет очень много недостатков. Поэтому в реальных системах для этих целей используют аппаратные возможности в виде таймер/счетчиков. По сути дела таймеры это устройства очень напоминающие секундомеры. Их можно запустить в определенный момент времени, их можно приостановить, продолжить счёт далее или сбросить на ноль. Инкрементируются таймеры в каждом машинном цикле. Максимальное значение до которого может считать таймер определяется его разрядностью и обычно составляет 8 или 16 бит. Но кроме этого, таймер можно заставить инкрементироваться и импульсами поступающими на внешний вход контроллера. Таким образом он из таймера превращается в счётчик событий, которые в виде импульсов поступают на вход. Отсюда и происходит их название – таймер/счётчик(timer/counter - T/C). Более подробное описание реализации таймера 51-совместимого микроконтроллера приведено ниже и может Вами использоваться как необходимая и достаточная информация для выполнения данной работы.

Таймеры микроконтроллеров фирмы Silabs C8051F340

Каждый МК имеет четыре встроенных таймера/счетчика (Т/С): три 16 разрядных Т/С, совместимые сТ/С стандартной архитектуры 8051, и один 16-разрядный таймер, предназначенный для использования совместно с АЦП, модулем SMBus или в качестве таймера общего назначения. Эти Т/С могут использоваться для измерения временных интервалов, подсчета внешних событий, а также для генерации периодических запросов прерываний. Таймер 0 и Таймер 1 почти идентичны и имеют четыре основных режима работы. Таймер 2 обладает дополнительными возможностями, отсутствующими у Таймеров 0 и 1. Таймер 3 аналогичен Таймеру 2, но не имеет режимов «захват» и «генератор скорости передачи данных».

Таймер 0 и Таймер 1:

Таймер 2:

Таймер 3:

13-разрядный Т/С

16-разрядный Т/С савтоперезагрузкой

16-разрядный таймер

с автоперезагрузкой

16-разрядный Т/С

16-разрядный Т/С с захватом

8-разрядный Т/С савтоперезагрузкой

Генератор скорости передачи данных

Два 8-разрядных Т/С (только Таймер 0)

Когда Т/С функционирует как таймер, регистры Т/С инкрементируются по каждому такту внутреннего сигнала тактирования Т/С. Частота внутреннего сигнала тактирования Т/С равна системной тактовой частоте, деленной либо на 1, либо на 12 (определяется битами T2M-T0M регистра CKCON). Возможность деления системной тактовой частоты на 12 обеспечивает совместимость с МК семейства 8051 более старшего поколения. Приложения, которым необходим более быстрый таймер, могут использовать для тактирования Т/С внутренний сигнал с частотой, равной системной тактовой частоте.

Когда Т/С функционирует как счетчик, регистры Т/С инкрементируются под воздействием перехода из 1 в 0 внешнего сигнала на выбранном входном выводе Т0, Т1 или Т2. Могут подсчитываться импульсы с частотой до 1/4 системной тактовой частоты. Входной сигнал не обязательно должен быть периодическим, но для его гарантированного прочтения он должен удерживаться на заданном уровне как минимум в течение двух полных системных тактовых циклов.

Таймер 0 и Таймер 1

ДлядоступакТ/С0и1иуправленияимииспользуютсярегистрыспециальногоназначения.Каждый

Т/С реализованввиде 16-разрядногорегистра,доступногокакдваотдельныхбайта: младшийбайт(TL0 или TL1)истаршийбайт(TH0илиTH1).РегиструправленияТ/С(TCON)используетсядлявключенияТ/С0и1, атакжедляопределенияихсостояния.Оба Т/С работаютводномиз четырехосновныхрежимов,задаваемых

битамивыборарежимаM1-M0регистрарежимаТ/С(TMOD).КаждыйТ/Сможетбытьнастроеннезависимоот другого.В следующихразделахприведеноподробное описаниекаждогорежимаработы.

Режим0:13-разрядныйтаймер/счетчик

Врежиме0Таймеры0и1работаюткак 13-разрядный таймер/счетчик. Нижеприводится описание настройкиифункционированияТаймера0.Однако,обатаймераидентичны,и Таймер1настраиваетсяточно также,каки Таймер0.РегистрTH0содержитвосемьстаршихбит13-разрядногозначенияТ/С.РегистрTL0содержитпятьмладшихбит13-разрядногозначенияТ/С в разрядахTL0.4-TL0.0. Три старшихбита регистра TL0 (TL0.7- TL0.5)неопределеныи должнымаскироватьсяили игнорироватьсяпри чтениирегистраTL0. При инкрементировании13-разрядноготаймераи переполненииегоизсостояния0x1FFF (всеединицы)в состояние0x0000устанавливаетсяв1флагпереполнениятаймераTF0(TCON.5) и будетсгенерировано прерывание,если оноразрешено.Бит C/T0 (TMOD.2) выбирает источник сигнала тактированияТ/С. Сбросом бита C/T0 осуществляетсявыборсистемноготактовогосигналавкачествевходногосигналатактированиятаймера. ЕслибитC/T0установленв1,тоинкрементрегистратаймераосуществляетсяподвоздействиемпереходаиз1в0внешнегосигналанавыбранномвходномвыводе. Установкав1битаTR0(TCON.4)включиттаймер,еслилибобитGATE0(TMOD.3)равеннулю, либонавнешнемвыводе/INT0присутствуетсигналсвысокимлогическимуровнем.Послеустановкив1 битаGATE0управлениетаймеромпередаетсявнешнему сигналу /INT0,чтопозволяетлегко осуществлять измерениешириныимпульсов.

TR0

GATE0

/INT0

Таймер/Счетчик

0

X

X

Отключен

1

0

X

Включен

1

1

0

Отключен

1

1

1

Включен

X=не имеетзначения

Установка TR0 не сбрасывает регистр таймера. Регистр таймера следует инициализировать необходимым значением до включения таймера.

TL1 и TH1 образуют 13-разрядный регистр Таймера 1 точно так же, как описано выше для регистровTL0 и TH0. Для настройки Таймера 1 и управления им используются соответствующие биты регистров TCONи TMOD таким же образом, как и для Таймера 0.

Режим1:16-разрядныйТаймер/Счетчик

Режим 1 аналогичен режиму 0 с тем лишь исключением, что регистры Т/С используют все 16 бит.Таймеры/счетчики включаются и настраиваются в режиме 1 точно так же, как в режиме 0.

Режим2:8-разрядныйтаймер/счетчиксперезагрузкой

Врежиме2Таймеры0и1настраиваютсядляработывкачестве8-разрядныхтаймеров/счетчиковс автоматическойперезагрузкойначальногозначения.РегистрTL0содержитзначениесчетчика,арегистрTH0содержитперезагружаемоезначение.КогдасчетчикврегистреTL0переполняется(переходитизсостояния0xFFвсостояние0х00),флаг переполнениятаймераTF0(TCON.5)устанавливаетсяв1и значениерегистра TH0загружаетсяврегистрTL0.ПриустановкефлагаTF0будетсгенерированопрерывание,если оно разрешено. ПерезагружаемоезначениеврегистреTH0неизменяется.Чтобы первый отсчетбыл корректным, необходимопроинициализироватьрегистрTL0требуемымзначениемдовключениятаймера. Таймер1 в режиме2работаетточнотакже,какТаймер0.Врежиме2обаТ/Свключаютсяинастраиваютсяточнотак же,какврежиме0.

Режим3:Два8-разрядныхтаймера/счетчика(толькоТаймер0)

Врежиме3Таймер0иТаймер1функционируютразличнымобразом.Таймер0настраивается какдваотдельных8-разрядныхтаймера/счетчикаTL0иTH0.Дляуправлениятаймером/счетчикомTL0

используютсябитыуправления/состоянияТаймера0(врегистрахTCONиTMOD):TR0,C/T0,GATE0иTF0.Вкачествеисточникатактированияон можетиспользовать либосистемныйтактовыйсигнал,либо внешнийвходной сигнал.Таймер/счетчикTH0можетиспользовать длятактированиятолько системный тактовыйсигнал.Длявключениятаймера/счетчикаTH0используетсяуправляющийбитзапускаТаймера1(TR1).Таймер/счетчикTH0припереполненииустанавливаетфлагпереполненияТаймера1TF1и,такимобразом,управляетпрерываниемот Таймера1.

Врежиме3Таймер1неактивен,поэтому,если Таймер0используетсяврежиме3,Таймер1 можетбытьотключенпутемпереводаеговсобственныйрежим3и включенпутемвыходаизрежима3. КогдаТаймер0работаетврежиме3,Таймер1можетработатьврежимах0,1или 2,нонеможет тактироватьсявнешнимисигналами,устанавливатьфлаг TF1 и генерировать прерывание. Однако, переполнениеТаймера1можноиспользоватьдлягенерациискоростипередачиданных.

TCON: Регистр управления Таймерами 0 и 1

R/W R/W R/W R/W R/W R/W R/W R/W

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

(доступенв битовом режиме адресации)

Значение присбросе: 00000000

SFR Адрес: 0x88

Бит 7: TF1: Флаг переполненияТаймера1.

Устанавливаетсяаппаратнопри переполненииТаймера1.Сбрасываетсяаппаратнопри переходекпроцедуреобслуживанияпрерыванияотТаймера1,номожетбыть сброшен и программно.

0: ПереполненияТаймера1необнаружено.

1: Таймер1переполнился.

Бит6: TR1: УправлениезапускомТаймера1.

0: Таймер1отключен(остановлен).

1: Таймер1включен(запущен).

Бит 5: TF0: Флаг переполненияТаймера0.

Устанавливаетсяаппаратнопри переполненииТаймера0.Сбрасываетсяаппаратнопри переходекпроцедуреобслуживанияпрерыванияотТаймера0,номожетбыть сброшен и программно.

0: ПереполненияТаймера0необнаружено.

1: Таймер0переполнился.

Бит4: TR0: УправлениезапускомТаймера0.

0: Таймер0отключен(остановлен).

1: Таймер0включен(запущен).

Бит 3: IE1: Внешнеепрерывание1.

Этотфлагаппаратноустанавливаетсяв 1при обнаруженииактивногофронта/уровня (определяетсябитомIT1)внешнегосигнала.Можетбытьсброшенпрограммно, но при переходекпроцедуреобслуживаниявнешнегопрерывания1сбрасываетсяаппаратно,если

IT1=1. При IT1=0 этот флаг является инверсией логического уровня входного внешнегосигнала/INT1.

Бит 2: IT1: Выбортипавнешнегопрерывания1. Этот битопределяет,какоесобытиебудетвызыватьвнешнеепрерывание1: срезили низкий уровеньвнешнегосигнала/INT1.

0: Внешнеепрерывание1вызываетсянизкимуровнемсигнала/INT1.

1: Внешнеепрерывание1вызываетсясрезомсигнала/INT1.

Бит 1: IE0: Внешнеепрерывание0.

Этотфлагаппаратноустанавливаетсяв 1при обнаруженииактивногофронта/уровня (определяетсябитомIT0)внешнегосигнала.Можетбытьсброшенпрограммно, но при переходе к процедуре обслуживаниявнешнегопрерывания0 сбрасываетсяаппаратно, если IT0=1. При IT0=0 этот флаг является инверсией логического уровня входного внешнего сигнала/INT0.

Бит 0: IT0: Выбортипавнешнегопрерывания0.

Этот битопределяет,какоесобытиебудетвызыватьвнешнеепрерывание0: срезили низкий уровеньвнешнегосигнала/INT0.

0: Внешнеепрерывание0вызываетсянизкимуровнемсигнала/INT0.

1: Внешнеепрерывание0вызываетсясрезомсигнала/INT0.

TMOD: Регистр режима Таймеров 0 и 1

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значениеприсбросе:

GATE1

C/T1

T1M1

T1M0

GATE0

C/T0

T0M1

T0M0

00000000

Бит7

Бит6

Бит5

Бит4

Бит3

Бит2

Бит1

Бит0

SFR Адрес: 0x89

Бит 7:GATE1:Управлениеблокировкой Таймера1.

0: Таймер1включен,если TR1=1,независимо от логическогоуровняна входе/INT1.

1: Таймер1включентолькотогда,когдаTR1=1и на входе/INT1высокийуровень.

Бит 6: C/T1: Выборрежиматаймераили счетчикадляТ/С1.

0: Т/С1работает как таймер: Таймер 1 инкрементируется от внутреннего сигнала тактирования,который задаетсябитомT1M (CKCON.4).

1:Т/С1работаеткаксчетчик:Таймер1инкрементируетсяподвоздействиемпереходаиз1в0

внешнеговходногосигнала(T1).

Биты 5-4: T1M1-T1M0: ВыборрежимаработыТаймера1.

Эти биты определяютрежимработыТаймера1.

T1M1

T1M0

Режим

0

0

Режим 0: 13-разрядныйтаймер/счетчик

0

1

Режим 1: 16-разрядныйтаймер/счетчик

1

0

Режим 2: 8-разрядныйтаймер/счетчикс перезагрузкой

1

1

Режим 3: Таймер1неактивен/остановлен

Бит 3:GATE0:Управлениеблокировкой Таймера0.

0: Таймер0включен,если TR0=1,независимо от логическогоуровняна входе/INT0.

1: Таймер0включентолькотогда,когдаTR0=1и на входе/INT0высокийуровень.

Бит 2: C/T0: Выборрежиматаймераили счетчикадляТ/С0.

0: Т/С0работает как таймер: Таймер 0 инкрементируется от внутреннего сигнала тактирования,который задаетсябитомT0M (CKCON.3).

1:Т/С0работаеткаксчетчик:Таймер0инкрементируетсяподвоздействиемпереходаиз1в0

внешнеговходногосигнала(T0).

Биты 1-0: T0M1-T0M0: ВыборрежимаработыТаймера0.

Эти биты определяютрежимработыТаймера0.

T0M1

T0M0

Режим

0

0

Режим 0: 13-разрядныйтаймер/счетчик

0

1

Режим 1: 16-разрядныйтаймер/счетчик

1

0

Режим 2: 8-разрядныйтаймер/счетчикс перезагрузкой

1

1

Режим 3: Таймер1неактивен/остановлен

-

-

T2M

T1M

T0M

Reserved

Reserved

Reserved

CKCON: Регистр управления тактированием Таймеров 0, 1 и 2

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение присбросе:

00000000

Бит7

Бит6

Бит5

Бит4

Бит3

Бит2

Бит1

Бит0

SFR Адрес: 0x8E

Биты 7-6: Неиспользуются.Читаютсякак00b.

Бит5: T2M:Выборкоэффициентаделениясистемнойтактовой частотыдляТаймера2.

ЭтотбитопределяетчастотусигналатактированияТаймера2.БитT2M игнорируется, еслиТаймер2работаетврежимегенератораскоростипередачииливрежимесчетчика (т.е.C/T2=1).

0: ЧастотасигналатактированияТаймера2равна 1/12системнойтактовой частоты.

1: ЧастотасигналатактированияТаймера2равнасистемнойтактовой частоте.

Бит4: T1M:Выборкоэффициентаделениясистемнойтактовой частотыдляТаймера1.

Этот битопределяетчастоту сигналатактированияТаймера1.

0: ЧастотасигналатактированияТаймера1равна 1/12системнойтактовой частоты.

1: ЧастотасигналатактированияТаймера1равнасистемнойтактовой частоте. Бит3: T0M:Выборкоэффициентаделениясистемнойтактовой частотыдляТаймера0.

Этот битопределяетчастоту сигналатактированияТаймера/счетчика0.

0: ЧастотасигналатактированияТаймера/Счетчика0равна 1/12системнойтактовой частоты.

1: ЧастотасигналатактированияТаймера/Счетчика0равнасистемнойтактовой частоте.

Биты 2-0: Зарезервированы.Читаютсякак 000b.Должныбыть записаныкак 000b.