Таймер счетчик мк51 программа
Секундомер на базе микроконтроллера МК51
Главная > Контрольная работа >Информатика, программирование
В данном курсовом проекте разработан секундомер на базе микроконтроллера МК51. Проанализированы алгоритмы работы устройства и микроконтроллера. По алгоритму работы микроконтроллера на языке Ассемблер написана программа и разработана принципиальная электрическая схема устройства.
ВВЕДЕНИЕ
Секундомер – прибор для измерения промежутков времени (в секундах и долях секунды, минутах, часах); механические или электронные часы с кнопочно-рычажной системой для пуска и остановки механизма и возврата указателя (стрелки, цифрового индикатора) в исходное положение.
В данном проекте разработан секундомер на базе микроконтроллера МК51. Проанализировано техническое задание, разработаны алгоритмы работы устройства и микроконтроллера. На основе алгоритма работы микроконтроллера написана программа на языке Ассемблер. Также построена принципиальная схема и рассчитаны ее элементы.
1 АНАЛИЗ ТЕХНИЧЕСКОГО ЗАДАНИЯ
В данной работе требуется разработать секундомер на основе микроконтроллера серии МК51. Микроконтроллер обеспечивает отсчёт временного интервала с отображением на индикаторах.
В соответствии с техническим заданием разрабатываемое устройство должно отображать на индикаторах минуты, секунды и сотые доли секунд. Ограничимся временем счета 100 минут. Поэтому в качестве устройства отображения информации целесообразно использовать 6 семисегментных индикаторов.
Согласно техническому заданию блок управления должен состоять из 4 кнопок.
Кнопка “Старт” используется для включения секундомера в режим счета, кнопка “Сброс” – для перехода секундомера в начальный режим (на индикаторах высвечиваются нули, память обнуляется), кнопка “Стоп” – для остановки счета (на индикаторах высвечивается время остановки счета), кнопка “Промежуточный результат” – для вывода на индикаторы текущего времени (секундомер продолжает счет).
СТРУКТУРНАЯ СХЕМА УСТРОЙСТВА
По результатам анализа технического задания построим структурную схему разрабатываемого устройства. Структурная схема устройства изображена на рисунке 1.
Рисунок 1 – Структурная схема устройства
Блок управления состоит из четырех кнопок. С блока управления информация о нажатой кнопке подается на микроконтроллер. Микроконтроллер обрабатывает полученный сигнал и начинает выполнять определенную последовательность действий, соответствующих нажатой клавише.
Микроконтроллер ведет отсчет времени, путем счета тактовых импульсов. Данные, полученные в процессе работы микроконтроллера, передаются на устройство отображения информации.
При нажатии кнопки “Сброс” происходит сброс счетчика в ноль, при этом на индикаторах высвечиваются нули.
При нажатии кнопки “Старт” микроконтроллер начинает отсчет времени, при этом информация о текущем состоянии выводится на устройство отображения.
При нажатии кнопки “Стоп” происходит остановка счета, и вывод текущего времени на индикаторы.
При нажатии кнопки “Промежуточный результат” информация о моменте нажатия кнопки выводится на устройство отображения, счет продолжается.
АЛГОРИТМ РАБОТЫ УСТРОЙСТВА
Опираясь на структурную схему устройства и анализ технического задания, построим алгоритм работы заданного устройства (рисунок 2).
Рисунок 2 – Алгоритм работы секундомера
АЛГОРИТМ РАБОТЫ МИКРОКОНТРОЛЛЕРА
На основе полученного алгоритма работы устройства необходимо описать алгоритм работы микроконтроллера.
В основной программе необходимо провести инициализацию переменных и таймеров-счетчиков.
Для организации необходимых задержек необходимо воспользоваться двумя встроенными таймерами-счетчиками. Таймер-счетчик TC0 будет использоваться для организации счета, а таймер-счетчик TC1 – для динамической индикации.
Чтобы при динамической индикации не было заметно мерцание, необходимо частоту смены кадров выбрать более 50 Гц. Выберем частоту смены изображения 50 Гц. Так как, согласно анализу технического задания, в модуле индикации будут применяться шесть разрядов, то частота переключения всех разрядов составит Гц. Именно с такой частотой таймер-счетчик TC1 должен формировать прерывания, то есть каждые 3,3 мс.
Оба таймера-счетчика настроим в качестве шестнадцатиразрядных таймеров (режим работы 1 таймеров-счетчиков), для этого необходимо в регистр TMOD записать значение #00010001b.
Частота процессора f такт = 11,0592 МГц. Поскольку машинный цикл состоит из 12 периодов частоты синхронизации f такт , то частота счета будет равна f такт /12. Таким образом, на вход таймеров-счетчиков будут поступать импульсы с частотой МГц.
Так как таймеры-счетчики настроены как 16-разрядные таймеры, то максимальное значение в них равно 65535, что соответствует максимальному времени мс.
Чтобы таймер-счетчик TC1 обнулялся каждые 3,3 мс, необходимо, чтобы отсчитал раза. Поэтому, начальное значение, заносимое в этот таймер-счетчик должно быть равно 65535 – 3042 = 62493 или F41Dh в шестнадцатеричной системе.
Таймер счетчик TC0 должен обеспечивать счет времени с точностью 0,01 с. Таким образом, прерывания должны формироваться каждую сотую долю секунды. Поэтому необходимо, чтобы таймер-счетчик отсчитал . Начальное значение, заносимое в TC0 должно быть равно 65535 – 9126 = 56409 или DC59 в шестнадцатеричной системе.
Используемые переменные приведены в таблице 1.
Intel 8051
Intel 8051 — это однокристальный микроконтроллер гарвардской архитектуры, который был впервые произведен Intel в 1980 году для использования во встраиваемых системах. В течение 1980-х и начале 1990-х годов был чрезвычайно популярен, однако позже устарел и был вытеснен более современными устройствами, также с 8051-совместимыми ядрами, производившимися более чем 20 независимыми производителями, такими, как Atmel, Maxim IC (дочерняя компания Dallas Semiconductor), NXP , Winbond, Silicon Laboratories, Texas Instruments и Cypress Semiconductor). Официальное название 8051-семейства микроконтроллеров Intel — MCS 51. Существует также советский клон данной микросхемы, КР1816ВЕ51.
Первые из 8051-семейства Intel производились с использованием n-МОП технологии, но следующие версии, содержащие символ «C» в названии, такие, как 80C51, использовали КМОП-технологию и потребляли меньшую мощность, чем n-МОП предшественники (это облегчало их применение для устройств с батарейным питанием).
Содержание
- 1 Особенности
- 1.1 Родственные контроллеры
- 2 Программирование
- 3 Применение
- 4 Литература
- 5 Ссылки
- 6 Примечания
Особенности [ править | править код ]
- Состоит из процессорного ядра (CPU), ОЗУ, ПЗУ, последовательного порта, параллельного порта, логики управления прерываниями, таймера и т. д.
- Шина данных — 8-битная шина данных. Возможность обработки 8 бит данных за одну операцию. Обуславливает название 8-битныймикропроцессор
- Шина адреса — 16-битная адресная шина. Возможность доступа к 2 16 адресам памяти, то есть 64 кБ адресное пространство в ОЗУ и ПЗУ
- Встроенное ОЗУ — 128 байт (Памяти данных)
- Встроенное ПЗУ — 4 КБ (Памяти программ)
- Четыре порта ввода-вывода: один двунаправленный и три квазидвунаправленных
- Последовательный интерфейс UART (Универсальный асинхронный приёмопередатчик)
- Два 16-битных таймера
- Два уровня приоритета прерываний
- Порядка 60 тысяч транзисторов на кристалле площадью 5,85 мм² [1]
- Энергосберегающий режим
Общей особенностью в современных 8051-совместимых микроконтроллерах стало встраивание улучшенных и дополнительных схем, таких, как: автоматический сброс по падению питающего напряжения; встроенные тактовые генераторы; внутрисхемное программирование памяти программ; автозагрузчики долговременной памяти данных на основе EEPROM; I²C ; SPI (стандарт 3-проводной последовательной шины); USB хост-интерфейс; ШИМ-генераторы; аналоговых компараторов; АЦП и ЦАП преобразователей; часов реального времени; дополнительных таймеров и счетчиков; внутрисхемных отладчиков, дополнительных источников прерываний; расширенных энергосберегающих режимов.
8051-совместимые микроконтроллеры обычно имеют один или два УАПП (UART), два или три таймера, 128 или 256 байт встроенной ОЗУ (16 байт которой имеют побитовую адресацию), от 512 байт до 128 Кбайт встроенной памяти программ (ПЗУ), и иногда встречается использование EEPROM, адресуемой через «регистры специального назначения» (SFR = special function register). УАПП/UART может быть настроен для использования в режиме 9-бит данных, что делает возможным адресную приёмопередачу в многоточечном подключении на основе RS-485 аппаратного протокола.
Один машинный цикл оригинального 8051-ядра занимает 12 временных тактов, а большинство инструкций выполняется за один или два машинных цикла. При частоте тактового генератора, равной 12 МГц, 8051-ядро может выполнять 1 миллион операций в секунду, выполняемых за один цикл, или 500 тысяч операций в секунду, выполняемых за два цикла. Улучшенное 8051-совместимое ядро, которое в настоящее время распространено, выполняет машинный цикл за шесть, четыре, два или даже за один временной такт, и позволяет использовать тактовые генераторы с частотой до 100 МГц, что позволило увеличить количество выполняемых операций в секунду.
Еще более быстрые 8051-ядра, с 1 тактом на машинный цикл, организуются с использованием ПЛИС, таких, как FPGA (скорость в диапазоне 130—150 МГц) или ASIC (скорость в диапазоне нескольких сотен МГц), при помощи специальной прошивки [2] . Все 8051-совместимые устройства, производимые SILabs, некоторые из производимых Dallas и немногие из производимых Atmel имеют ядро с 1 тактом на машинный цикл.
Чрезвычайно полезной особенностью 8051-ядра является обработка булевых данных, что позволило ввести бинарную логику, оперирующую напрямую с битами внутренней ОЗУ (области из 128 прямоадресуемых битов) и регистров. Данная особенность была востребована в приложениях промышленной автоматики. Еще одна ценная особенность состояла в 4 независимых наборах регистров, которые значительно уменьшали задержки при обработке прерываний в сравнении с классическим использованием стека, применявшимся ранее.
Родственные контроллеры [ править | править код ]
Предшественником контроллера 8051 был Intel 8048, который был применён в клавиатуре первого компьютера IBM PC — он конвертировал сигналы о нажатиях клавиш в поток данных, передававшийся по последовательной линии в системный блок компьютера. Контроллер 8048, а также контроллеры, спроектированные на его базе, всё ещё применяются в клавиатурах.
Контроллер 8031 является урезанной версией Intel 8051: у него отсутствует встроенная память для хранения программы.
Контроллер 8052 является расширенной версией оригинального Intel 8051: он оснащён 256 байтами внутреннего ОЗУ (вместо 128 байт 8051), 8 КБ ПЗУ (вместо 4 КБ), также ему добавлен третий 16-разрядный таймер.
Контроллер 8058 отличается от 8052 увеличенным до 32 КБ ПЗУ.
Контроллер 8032 аналогичен 8052, но не имеет встроенной памяти для хранения программы. Контроллеры 8052 и 8032 считаются устаревшими, так как почти все современные варианты 8051 оснащены теми расширениями, которыми обладает 8052.
Программирование [ править | править код ]
Для 8051 доступно несколько компиляторов для языка программирования Си, большинство из которых поддерживают расширения языка для более эффективного использования особенностей 8051. Например, программист может указать, в каком из шести типов памяти 8051 необходимо хранить переменную; компилятору можно указать, каким образом использовать переключаемые регистровые блоки и инструкции для манипулирования отдельными разрядами регистров.
Для программирования 8051 используются и другие языки высокого уровня: Форт, Бейсик, Паскаль, PL/M и Modula-2, однако они не получили такого широкого распространения, как Си и ассемблер.
Применение [ править | править код ]
Вычислительное ядро до сих пор широко применяется в различных микроконтроллерах общего и специального назначения с различным набором периферии.
Каким образом таймер-счетчик отсчитывает интервалы времени?
Ответ: При работе таймера-счетчика а режиме таймера его содержимое инкрементируется в каждом машинном цикле, то есть с частотой Fbq/12 (1 Мгц), где Fbq — частота внешней синхронизации микроконтроллера (12 Мгц). Ещё можно сказать, что отсчитываемый интервал времени надо писать как ноль минус интервал, т.е. чтобы отсчитать 10 мкс надо записать FFF6.
Как таймер-счетчик сообщает об истечении заданного промежутка времени?
Ответ: Выработкой флага переполнения TF, который может восприниматься как запрос на прерывание.
18.Какова в зависимости от режима работы может быть разрядность счетчика в таймере-счетчике микроконтроллера МК-51?
Ответ: в режиме «0» — 13 разрядов, в режиме «1» — 16 разрядов, в режиме «2» — 8 разрядов, в режиме «3» — тоже 8 разрядов.
22.Для чего обычно используется режим счета таймера-счетчика с автоматической перезагрузкой (режим «2»)?
Для того что-бы мерять нестандартные интервалы времени Или производить прерывание процессора с заданной частотой
23.Какое максимальное количество устройств может быть реализовано на T/C0, работающем в режиме «3» ?
Ответ: 2. Мы можем на TC0 организовать либо 2 таймера, либо таймер и счетчик (8-разрядные).
Какое количество источников прерываний используется в микроконтроллере МК-51?
Ответ: 5. Два внешних прерывания, поступающих по входам INT0 и INT1 (линии порта P3: P3.2 и P3.3 соответсвенно); двух прерываний от таймеров-счетчиков T/C0 и T/C1; прерывание от последовательного порта.
Каковы источники прерываний в МК-51?
Ответ: Всего их 5. Два внешних прерывания, поступающих по входам INT0 и INT1 (линии порта P3: P3.2 и P3.3 соответсвенно); двух прерываний от таймеров-счетчиков T/C0 и T/C1; прерывание от последовательного порта.
Сколько уровней приоритетов прерываний имеется в микроконтроллере МК-51?
Ответ: 2 уровня (0-низший и 1-высший).
Состояние каких флагов проверяется при разрешении прохождения запроса прерывания на обработку МК-51?
Ответ: IE0, IE1, TF0, TF1, TI, RI
Как микроконтроллер выбирает запрос на обслуживание в случае одновременного поступления нескольких запросов прерываний МК-51?
Ответ: При одновременном поступлении запросов прерывания от источников, имеющих различные приоритеты, сначала обрабатывается запрос от более приоритетного источника. Т.е. сначала обрабатываются прерывания с приоритетом 1, затем с приоритетом 0 (программно задаются в регистре IP). Если пришло одновременно несколько запросов от источников с одинаковым приоритетом, то обработка в аппаратно-заданном порядке.
Как микроконтроллер МК-51 выбирает запрос на обслуживание в случае одновременного поступления нескольких запросов прерываний с одинаковыми приоритетами в регистре IP?
Ответ: Порядок обработки в таком случае определяется аппаратными средствами микроконтроллера и не может быть изменен программно. Этот порядок соответсвует последовательности опросов флагов прерываний, имеющий следующий вид: IT0(IE0)-> TF0-> IT1(IE1)-> TF1-> (RI, TI)
Как микроконтроллер находит программу — обработчик прерываний?
Ответ: Точки входа в обработчик прерываний программно зафиксированы. INT0(03h), TF0(0Bh), INT1(13h), TF1(1Bh), (RI или TI)(23h).
В каких случаях в МК-51 возможны вложенные прерывания?
Ответ: В случае, если низкоприоритетное прерывание (имеющее «0» в соответствующем разряде IP) прерывается высокоприоритетным прерыванием (имеющее «1! в соответствующем разряде IP). Вложенные прерывания с равным уровнем приоритета запрещены. Обслуживание высокоприоритетного прерывания не может быть прервано другим источником.
Сколько портов для последовательной передачи информации имеет в своем составе микроконтроллер МК-51?
Ответ: 1 порт. Это порт P3. Только не весь порт P3, а всего две его линии.
Какой регистр используется для управления работой последовательного порта МК-51?
В скольких режимах может работать последовательный порт МК-51?
Для чего используется линия TxD последовательного порта МК-51 в различных режимах работы?
Ответ: Режим «0»: Через выход TXD выдаются синхроимпульсы, стробирующие принимаемые или выдаваемые биты. Режим «1»: Информация передается через выход TxD. Режим «2,3»: Информация передается через выход TxD.
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой.
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).
Как ждать одну секунду на 8051 microcontroller?
Я должен написать программу, которая отправит некоторые значения в регистры, затем подождет одну секунду, а затем изменит значения. Дело в том, что я не могу найти инструкцию, которая остановит операции на одну секунду.
3 ответа
- преобразование из .c в .hex для 8051 microcontroller
Мне нужна программа или сайт, который может конвертировать из файла .c в файл .hex для 8051 microcontroller ?
При сбросе 8051 microcontroller все защелки портов устанавливаются на значения ‘1. Теперь я читаю эту книгу Embedded C, и в ней говорится, что проблема с приведенным ниже кодом заключается в том, что он может усыпить разработчика ложным чувством безопасности: // Assume nothing written to port.
Как насчет настройки прерывания таймера ?
Некоторые полезные советы и фрагменты кода в этом примечании к приложению Keil 8051.
Я бы настроил таймер так, чтобы он прерывался каждые 10 мс. В этом прерывании увеличьте переменную.
Вам также нужно будет написать функцию, чтобы отключить прерывания и прочитать эту переменную.
В вашей основной программе вы прочитаете переменную таймера, а затем подождете, пока она не станет на 10 100 больше, чем при запуске.
Не забывайте следить за тем, чтобы переменная таймера не перевернулась.
Нет такого ‘instruction’. Однако, несомненно, существует по крайней мере одно периферийное устройство аппаратного таймера (точный набор периферийных устройств зависит от конкретной используемой части). Достаньте техническое описание/руководство пользователя для используемой детали и выясните, как запрограммировать таймер; затем вы можете опросить его или использовать прерывания. Обычно вы настраиваете таймер для генерации периодического прерывания, которое затем увеличивает переменную счетчика.
Две вещи, которые вы должны знать о прерываниях таймера: Во-первых, если ваша переменная счетчика больше 8 бит, доступ к ней не будет атомарным, поэтому вне контекста прерывания вы должны либо временно отключить прерывания, чтобы прочитать ее, либо прочитать ее дважды подряд с одним и тем же значением, чтобы проверить ее. Во-вторых, переменная счетчика таймера должна быть объявлена volatile , чтобы компилятор не оптимизировал доступ к ней; это верно для всех переменных, совместно используемых прерываниями и потоками.
Другой альтернативой является использование режима с низким энергопотреблением ‘sleep’, если он поддерживается; вы настраиваете таймер для пробуждения процессора после желаемого периода и выдаете необходимую команду сна (это может быть предоставлено как ‘intrinsic’ вашим компилятором, или вы можете управляться периферийным регистром. Это общий совет, а не конкретный 8051; Я не знаю, поддерживает ли ваша часть даже спящий режим.
В любом случае вам нужно ознакомиться с документацией по конкретной детали. Если бы вы могли рассказать нам точную часть, вы могли бы получить помощь в этом.
Третье решение заключается в использовании специфичного для 8051 RTOS kernel, который обеспечит именно ту функцию периодической задержки, которую вы ищете, а также многопоточность и IPC.
Похожие вопросы:
У меня есть фрагмент кода C в заголовочном файле, используемом для 8051 microcontroller, как показано ниже — #define Sfr(x, y) sfr x = y #define Sbit(x, y, z) sbit x = y^z #define Sfr16(x,y) sfr16 x.
каждый Мне нужна большая помощь от всех Мне нужно знать, как использовать инфракрасный датчик температуры с 8051 microcontroller Я очень благодарен, если вы можете поделиться C кодом я использую.
Не мог бы кто-нибудь сказать мне, можно ли записать 8051 microcontroller с помощью программы C++? Я пробовал искать об этом в интернете, но, похоже, не могу точно выяснить, возможно это или нет.
Мне нужна программа или сайт, который может конвертировать из файла .c в файл .hex для 8051 microcontroller ?
При сбросе 8051 microcontroller все защелки портов устанавливаются на значения ‘1. Теперь я читаю эту книгу Embedded C, и в ней говорится, что проблема с приведенным ниже кодом заключается в том.
Хорошо, у меня есть генератор случайных чисел в кости. и у него будет for loop, и внутри цикла мне трудно понять, как ждать одну секунду, как это показано ниже. Погрузка. подождите одну секунду.
Мы знаем, что размер указателя зависит от адресной шины,так каков же будет размер указателя на 8-битном microcontroller, например 8051?
Несколько лет назад я разработал проект для AT89C51 microcontroller. Я все еще использую устройство с этим аппаратным обеспечением проекта. Но мягкая копия (код .asm ) отсутствует в моем ноутбуке, и.
У меня есть проект из колледжа, я должен сделать Keypad to LCD interference using 8051 microcontroller. Пояснил: означает, что когда я нажму клавишу 1, она покажет мое имя на ЖК-дисплее, а нажав.
У меня есть следующая последовательность кодов операций hex для 8051 microcontroller 785679107A247BFD7C347D407E51745568F869F96AFA6BFB6CFC6DFD6EFE Я нашел это РЕПО, которое преобразует hex в.
Русские Блоги
Внешнее прерывание и прерывание по таймеру
1. Что такое прерывание
2. Какая польза от прерывания
3. Двойной контакт P3
Система прерываний 4.8051
5. Специальный регистр прерываний
6. Приоритет прерывания
7. Написание программы обслуживания прерываний
8. Код реализации внешнего прерывания
9. Принцип работы таймера / счетчика прерываний
10. Расчет времени таймера / счетчика
11. Код реализации таймера / счетчика
1. Что такое прерывание
Прерывание означает, что ЦП выполняет задачу A, а затем внезапно останавливает задачу A для выполнения задачи B, а затем возвращается, чтобы продолжить процесс задачи A после выполнения задачи B.
Например: вы смотрите телевизор, а затем звонит телефон, вы прекращаете смотреть телевизор, отвечаете на звонок, а затем продолжаете смотреть телевизор после ответа на звонок. Этот процесс называется прерыванием.
Прерывание связано с аппаратным обеспечением. Можно сказать, что аппаратное обеспечение прерывает микроконтроллер.
2. Какая польза от прерывания
1. Прерывание позволяет центральному процессору выполнять несколько задач одновременно. Например, когда на центральном процессоре запущена бегущая программа, она не может быть выполнена. При нажатии кнопки звучит зуммер.
2. Конечно, вышеприведенный пример может быть реализован с помощью программного опроса, нажата ли кнопка трения, но это потребляет часть ресурсов ЦП для опроса, чтобы определить, нажата ли кнопка, поэтому еще одним преимуществом прерывания является
Экономьте ресурсы процессора
3. Двойной контакт P3
В соответствии с принципиальной схемой самой маленькой системной платы контакты P3.0
P3.7 соответствуют RXD, TXD, INTO, INT1, T0, T1 и т. Д., Указывая, что вывод P3 является не только портом ввода-вывода, но также имеет другие функции. Эта функция является функцией прерывания.
4.8051 Система прерываний
Микроконтроллер 8051 имеет 5 источников прерываний и 2 уровня приоритета.
Как видно из рисунка выше, INT0 проходит через вывод P3.2, INI1 проходит через вывод P3.3, а таймеры T0 и T1 проходят через выводы P3.4 и P3.5 соответственно.
Источники прерываний: INT0 (внешнее прерывание 0), INT1 (внешнее прерывание 1), T0 (таймер 0), T1 (таймер 1), RXD и TXD (одно и то же прерывание последовательного порта)
Специальные регистры, связанные с прерываниями:
(1) Регистр управления разрешением прерываний (IE) ——— Контролирует открытие и экранирование каждого прерывания
(2) Регистр управления таймером / счетчиком (TCON) — управление таймером и внешним прерыванием
(3) Регистр управления последовательным портом (SCON) — управление серийным прерыванием
(4) Регистр управления приоритетом прерывания (IP) ——- установить приоритет каждого прерывания
Диапазон управления каждого регистра следующий:
Из вышеприведенного рисунка видно, что процесс от запроса источника прерывания до запроса на вход в ЦП:
Взяв INT0 в качестве примера, INT0 генерирует источник прерывания.После того, как IT0 в регистре TCON используется для выбора, запускает ли нижний фронт триггеры или запрос прерывания триггера низкого уровня (конечно, IT0 устанавливается вручную программой), когда запрос прерывания достигает IE0,
IE0 будет установлен на 1 аппаратно (когда процессор отвечает на этот запрос прерывания, IE0 устанавливается на 0 аппаратно), а затем переходит в регистр IE, EX0 — это переключатель для внешнего прерывания INT0, а EA — это общий коммутатор для всех прерываний, которые По IE зарегистрироваться
Управляйте и, наконец, устанавливайте приоритет через регистр IP. Обычно он используется меньше. Приоритет по умолчанию — INT0> T0> INT1> T1> прерывание последовательного порта. Наконец, запрос на прерывание передается в ЦП.
5. Специальный регистр прерываний
IE зарегистрироваться
EA: главный переключатель прерывания, EA = 1, чтобы позволить прерыванию передаваться в CPU
ES: прерыватель последовательного порта
EX1: переключатель внешнего прерывания 1
EX0: переключатель внешнего прерывания 0
Регистр приоритета IP (соответствующий значению 1 означает, что приоритет установлен на высокий уровень, 8051 имеет только два уровня приоритета)
6. Приоритет прерывания
У 8051 есть только два уровня приоритета: высокий и низкий. По умолчанию приоритет от высокого до низкого: INT0> T0> INT1> T1> последовательное прерывание.
1. Прерывания с высоким приоритетом могут прерывать прерывания с низким приоритетом.
2. Прерывание, на которое выполняется ответ, не может быть прервано прерыванием того же или более низкого уровня.
3. Несколько прерываний происходят одновременно, сначала реагируют на прерывания с высоким приоритетом
7. Написание программы обслуживания прерываний
Процедура обслуживания прерывания — это функция, которую ЦПУ выполняет после возникновения прерывания.
1. Сервисная функция прерывания не имеет возвращаемого значения
2. Сервисная функция прерывания не может передать параметры
void имя функции (void) прерывание x с использованием y
диапазон x составляет 0
4, представляя 5 источников прерываний, например, внешнее прерывание INT0 равно 0, T0 равно 1, INT1 равно 2, T1 равно 3, последовательное прерывание равно 4
Диапазон y составляет 0
3, что означает 4 группы рабочих регистров, используйте 0, если вы не пишете это.
8. Код реализации внешнего прерывания
Подключите P3.2 платы разработки к GND с помощью провода Дюпона, он вызовет прерывание и обнаружит, что светодиод включен. (Почему P3.2? Потому что верхняя схема показывает, что вывод INT0 это P3.2)
9. Принцип работы таймера / счетчика прерываний
1. Как видно из верхней минимальной принципиальной схемы системы, выводы, соответствующие таймерам T0 и T1, представляют собой P3.4 и P3.5 соответственно
2. Источник импульсов счетчика таймера / счетчика может иметь два, один — импульс выходного импульса внутреннего кварцевого генератора, деленный на 12, а другой — внешний импульс, подключенный извне
3. Регистры TLx и THx, x = 0, 1.
Взяв TL0 и TH0 в качестве примеров, TL0 и TH0 являются 8-битными регистрами (регистры 8051 являются 8-битными), поэтому TL0 и TH0 образуют старшие восемь битов и младшие восемь битов для подсчета, всего 16 бит.
2 ^ 16 = 65536, поэтому максимальное счетное значение TL0 и TH0 вместе составляет 0
65536, всего 65536.
4. Два регистра таймера / счетчика: TCON и TMOD, из которых TCON используется для запуска прерывания таймера / счетчика, TMOD используется для установки режима работы таймера / счетчика (выше TCON Уже сказано)
TMOD зарегистрироваться:
(Из рисунка: младшие восемь битов — таймер T0, верхние восемь битов — таймер T1)
ВОРОТА: управление дверью.
Когда GATE = 1: вывод INTx высокий и TRx должен быть равен 1, таймер Tx запустится.
Когда GATE = 0: пока TRx = 1, таймер Tx запускается независимо от уровня контакта INTx.
C / T: решить, использовать ли функцию таймера или функцию подсчета
Когда C / T = 0: функция синхронизации. Счетчик «плюс 1» подсчитывает импульсы, деленные на 12. кварцевого генератора кристалла.Когда импульс приходит, он увеличивается на единицу, пока TFx не заполнится и не переполнится. (TFx находится в реестре TCON)
Когда C / T = 1: функция подсчета. Счетчик с повышением частоты считает внешние импульсы с входного контакта T0 (P3.4) или T1 (P3.5). Один импульс увеличивается на один, пока TFx не заполнится и не переполнится.
M1 и M0: бит выбора режима работы
M0 M1 Метод работы Описание функции
0 Режим 0 0 13-битный таймер / счетчик, максимальное количество составляет 2 ^ 13 = 8192
0 Метод 1 Метод 16 16-разрядный таймер / счетчик, максимальное количество составляет 2 ^ 16 = 65536
1 Метод 2 Способ 2 Автоматически перезагружает 8-битный таймер / счетчик, максимальное количество составляет 2 ^ 8 = 256
1 Метод 1 Метод 3 T0 делится на 2 независимых 8-разрядных независимых счетчика, T1 перестает работать
10. Расчет времени таймера / счетчика
Пример: я хочу время 10 мс. Частота кристалла составляет 12М, а рабочий режим находится в режиме 1.
f = 12M / 12 = 1M (потому что его нужно разделить на 12), что означает, что 1 секунда составляет 1000000 машинных циклов, а 10ms — 10000 машинных циклов.
65536-10000 = 55536, что означает, что время, необходимое для уменьшения счетчика с 65536 до 55536, составляет 10 мс.
55536 шестнадцатеричный 0xD8F0
Поэтому установите TH0 = 0XD8, TL0 = 0XF0
Код приведен ниже
Или загрузите таймерный калькулятор C51 напрямую: