
- •Общие сведения о микроконтроллере с8051f340
- •Процессорное ядро cip-51тм
- •Система команд
- •Команды и тактирование
- •Организацияпамяти
- •Память программ
- •Память данных
- •Регистры общего назначения
- •Ячейки памяти с битовой адресацией
- •Команда movx и память программ
- •Память данных
- •Написание и отладка программ на лабораторном стенде.
- •Основы ассемблера
- •Методика работы со стендом
- •Настройка программного обеспечения
- •Редактирование и отладка программ.
- •Задание и порядок выполнения лабораторных работ
- •4.2 Лабораторная работа 2.«Работа с внешними устройствами»
- •Лабораторная работа 3.«Работа с таймерами и системой прерываний»
- •Система прерываний
- •Регистр масок прерывания (ie)
- •Регистр приоритетов прерываний
- •4.4 Лабораторная работа 4. «Работа с клавиатурой и семисегментными индикаторами»
- •Контрольные вопросы к лабораторной работе № 4
- •Литература
Лабораторная работа 3.«Работа с таймерами и системой прерываний»
Цель работы:
Изучения таймеров и особенностей их работы.
Приобретения навыков написания программ обработки прерываний .
Теоретические сведения
В любом современном микроконтроллере имеются контроллер прерываний и несколько таймеров. Программное формирование временных последовательностей и измерение времени имеет очень много недостатков. Поэтому в реальных системах для этих целей используют аппаратные возможности в виде таймер/счетчиков. По сути дела таймеры это устройства очень напоминающие секундомеры. Их можно запустить в определенный момент времени, их можно приостановить, продолжить счёт далее или сбросить на ноль. Инкрементируются таймеры в каждом машинном цикле. Максимальное значение до которого может считать таймер определяется его разрядностью и обычно составляет 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 |
Значениеприсбросе: |
||||||||
|
|
|
|
|
|
|
|
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.
Бит 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.
|
- |
- |
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.
|