- •Аналоговые и цифровые устройства автоматики
- •Глава 1. Архитектура и устройство
- •1.1. Внутренняя организация мк
- •1.2. Назначение выводов микросхемы мк
- •1.3. Организация памяти в мк
- •1.4. Регистр состояния программы psw
- •1.5. Таймеры/счетчики, регистры tmod и tcon
- •1. 6. Режимы работы таймеров/счетчиков
- •Структура прерываний мк
- •1.8. Блок последовательного интерфейса мк
- •1.8.1. Последовательная передача информации
- •1.8.2. Последовательный порт однокристального мк
- •1.8.3. Регистр управления последовательным портом scon
- •1.8.4. Режимы работы последовательного порта
- •1.8.5. Асинхронный обмен (режимы 1,2,3) данными
- •1.8.6. Скорость приёма/передачи
- •1.8.7. Работа мк в локальной сети
- •1.9. Системный сброс однокристального мк
- •1.10. Режим пониженного энергопотребления мк
- •1.11. Нагрузочная способность портов ввода/вывода
- •1. 12. Расширение портов ввода/вывода
- •Глава 2. Система команд однокристальных мк семейства mcs51
- •Способы адресации операндов
- •2.2. Команды мк
- •2.3. Правила написания программ на языке assembler
- •Метка операция операнд(ы) комментарии
- •2.3.1. Метка
- •2.3.2. Операция
- •2.3.3. Операнды
- •2.3.4. Комментарий
- •2.4. Директивы ассемблера
- •2.4.1. Директивы символических определений
- •Пример:
- •Ozu_org xdata 0800h; Адрес начала области внешнего озу.
- •2.4.2. Директивы резервирования и инициализации памяти
- •2.4.3. Директивы управления состоянием ассемблера
- •Глава 3. Обработка данных в однокристальных микроконтроллерах
- •3.1. Обращение к внутренней, внешней памяти данных и памяти программ
- •3.2. Арифметические операции
- •3.3. Логические операции
- •3.4. Операции с битами
- •Глава 4. Взаимодействие однокристального мк с объектом управления
- •4.1. Программный опрос и ожидание срабатывания позиционных датчиков
- •4.2. Ожидание импульсного сигнала
- •4.3. Программирование таймеров/счетчиков и формирование дискретных управляющих сигналов
- •4.4. Программирование прерываний в микропроцессорном устройстве
- •4.5. Программирование последовательного порта
- •Глава 5. Аппаратные средства
- •5.1. Ввод информации с клавиатуры
- •5.1.1. Прямое подключение клавиш к разрядам порта мк
- •В блоке основной программы происходит инициализация системы, разрешение прерываний, а затем выполняется основная программа.
- •Применение шифратора для организации клавиатуры
- •Шифратора
- •5.1.3. Матричный способ подключения клавиатуры
- •5.1.4. Комбинированный способ организации клавиатуры
- •5.2. Отображение информации в микропроцессорном устройстве
- •5.2.1. Контроллер клавиатуры и дисплея к580вв79 ( intel 8279 )
- •5.2.2. Матричные светодиодные индикаторы
- •5.2.3. Жидкокристаллический дисплей
- •Ввод аналоговых сигналов в микропроцессорный контроллер
- •Ацп с параллельными цифровыми выходами
- •5.3.2. Применение ацп с последовательным выходом
- •5.3.3. Применение таблиц для вычисления функций
- •5.4. Формирование управляющих аналоговых сигналов
- •5.5. Построение ацп с использованием цап
- •5.6. Микропроцессорный контроллер как управляющее устройство в системах автоматического регулирования
- •Согласование дискретных датчиков и исполнительных механизмов с однокристальным мк
- •5.8. Контроль напряжения питания в микропроцессорных системах
- •Глава 6. Отладка программного обеспечения и программирование однокристальных мк
- •6.1. Интегрированная система отладки программного обеспечения для мк ProView
- •6.1.1. Оптимизирующий кросс - компилятор c51
- •6.1.2. Макроассемблер a51
- •6.1.4. Отладчик/симулятор WinSim51
- •6.2. Запуск ProView и создание файла проекта
- •Если в системе задействованы таймеры-счетчики, то удобно промоделировать их работу при разворачивании соответствующих окон Timer (рис.76).
- •В окне указаны источники и адреса векторов прерываний, их состояние и приоритет. Разрешенные прерывания отмечены словом Enable, неразрешенные - Not Enable.
- •Рассмотрим основные пункты раздела debug (отладка), представлены на рис. 84. Эти функции предназначены для выполнения процесса отладки прикладной программы пользователя.
- •6.3. Программирование однокристальных мк
- •Контрольные вопросы для закрепления материала
- •Заключение
- •Библиографический список
- •Глава 1. Архитектура и устройство однокристальных мк семейства mcs51………………………..6
- •Глава 6. Отладка программного обеспечения и программирование однокристальных мк ……….203
- •162600, Г.Череповец , пр. Луначарского, 5
4.2. Ожидание импульсного сигнала
Ожидание импульсного сигнала можно организовать тремя способами. Первый способ - это программный опрос разряда порта, к которому подключен импульсный датчик. Второй вариант использует таймер-счетчик в качестве счетчика внешних импульсов. В регистр счетчика загружается число FFFFH, разрешаются прерывания по переполнению счетчика. Прямоугольный импульс, поступающий на вход Т0 или Т1, переполняет регистр счетчика, наступает прерывание, после чего выполняется подпрограмма обслуживания прерывания, в которой вновь необходимо загрузить регистр счетчика числом FFFFH. Третий вариант связан с использованием входов запросов на прерывание INT0 и INT1. Импульсный сигнал формы 1-0-1 поступает на один из входов, и в момент перепада из 1 в 0 наступает прерывание. Второй и третий способы рассмотрим позже.
Особенностью процедуры программного ожидания импульсного сигнала является то, что однокристальный МК должен зафиксировать не только момент появления, но и момент окончания сигнала. Если этим пренебречь, то МК, имеющий намного большее быстродействие, чем быстродействие импульсного датчика, зафиксирует множество поступивших импульсов, что будет являться ошибкой.
Рассмотрим процедуру ожидания и подсчета количества импульсных сигналов, подаваемых в разряд Р1.0. Максимальное число 99, после чего счет начинается сначала.
<1>WAIT_SIGNAL: CLR A ; Очистка аккумулятора
<2>WAIT_0: JB P1.0, WAIT_0;Программное ожидание сигнала 1-0-1
<3>WAIT_1: JNB P1.0, WAIT_1; Если импульс поступил, то
<4> CLR C
<5> INC A ; инкрементировать А
<6> DA A ; Десятичная коррекция результата А
<7> CJNE A,#99H,WAIT_0; Проверка на число 99H, если равно, то
<8> JMP WAIT_SIGNAL ; начать счет сначала
Анализ процедуры показывает, что все процессорное время тратится на ожидание импульсного сигнала. Чтобы организовать многозадачный режим, необходимо использовать прерывания.
З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы
Разработайте процедуру для ожидания и подсчета импульсных сигналов 0-1-0 формы, максимальное число 255.
Разработайте процедуру для ожидания и подсчета импульсных сигналов 1-0-1 формы, максимальное число 999.
4.3. Программирование таймеров/счетчиков и формирование дискретных управляющих сигналов
В современных однокристальных МК имеется 2 (К1830ВЕ51) и 3 (AT89S8252) таймера/счетчика / 5,11/. Они предназначены для подсчета числа внешних событий (счетчик) и для формирования времязадающих функций и задержек (таймер). Таймеры - счетчики содержат регистры, которые заполняются или внешними импульсами по входам Т0, Т1, Т2 ( Т2 только для AT89S8252, разряд Р1.0), или от внутреннего генератора в режиме таймера. Частота заполнения регистра зависит от собственной частоты кварцевого резонатора. Так, например, максимальная частота счета составляет fКВ/24 в режиме счетчика и fКВ/12 в режиме таймера. Каждый таймер/счетчик может работать в 4 режимах работы.
Рассмотрим примеры программирования таймеров/счетчиков.
Пример 1. Пусть на движущемся конвейере установлены детали. Необходимо подсчитывать, сколько деталей проходит в 1 секунду (рис. 20). В данном случае удобно настроить один таймер/счетчик как счетчик внешних импульсов по входу Т0, а второй настроить как таймер. Он должен обеспечить временной интервал в 1 секунду.
Рис. 20. Функциональная схема подсчета числа деталей за 1 секунду
Для подсчета деталей используется оптопара. При прохождении детали приемник пары затемняется, в результате на выходе приемника присутствуют прямоугольные импульсы. Рассмотрим программу.
<1>COUNT_IMP:MOV TMOD,#00010101B; T/C0–счетчик,T/C1- таймер
<2> MOV R7,#15; Загрузка счетчика переполнений таймера
<3> SETB TR0 ; Включение счетчика
<4> SETB TR1 ; Включение таймера
<5>WAIT_OV: JNB TF1,WAIT_OV ; Ожидание переполнения таймера
<6> CLR TF1 ; Очистка флага переполнения
<7> DJNZ R7,WAIT_OV ; Контроль 15 переполнений
<8> CLR TR0 ; Выключение счетчика
<9> CLR TR1 ; Выключение таймера
<10 MOV R0,#20H ; Запись количества деталей
<11> MOV @R0,TL0 ; из младшего и старшего байтов
<12> INC R0 ; счетчика в 20Н и 21Н ячейки ОЗУ
<13> MOV @R0,TH0 ;
В начале фрагмента осуществляется настройка T/C0 в режим счетчика и T/C1 в режим таймера, при этом выбран режим 1. В этом случае регистр таймера и счетчика является шестнадцатиразрядным. Второй шаг выполняет загрузку счетчика переполнений таймера числом 15. При частоте кварцевого резонатора, равной 12МГц, регистр таймера заполняется импульсами с частотой 1МГц, следовательно, до переполнения регистра таймера пройдет ровно 65535 мкС (если счет начался с 0). Таким образом, чтобы сформировать 1 секунду, потребуется приблизительно 15 переполнений регистра таймера. 3 и 4 шаги включают счетчик и таймер. Теперь необходимо дождаться, пока не настанет переполнения регистра (шаг 5). Признаком переполнения является установка TF1=1. После окончания 1 секунды произойдет выход из цикла WAIT_OV, теперь нужно выключить и таймер, и счетчик (шаги 8 и 9). Осталось только сохранить состояние счетчика в ячейках внутреннего ОЗУ (шаги с 10 по 13).
Пример 2. Разработать подпрограмму для формирования на выходе разряда Р1.0 серии из 10 симметричных прямоугольных импульсов, ширина импульса и паузы равна 1,5 мС.
Перед решением задачи необходимо определить число, которое нужно загрузить в регистр таймера, чтобы обеспечить временную задержку. Если начать счет с числа 64035 = FA23H (65535 – 1500 = 64035), то до переполнения регистра таймера пройдет ровно 1,5 мС.
<1>MEANDR : MOV TMOD,#00000001B;Настройка T/C0 в таймер
<2> MOV R5,#10 ; Загрузка количества импульсов
<3> MOV P1,#00 ; Обнуление порта
<4>GENERATE: SETB P1.0 ; Формирование фронта импульса
<5> CALL DELAY_1.5MS; Формирование ширины импульса
<6> CLR P1.0 ; Формирование спада импульса
<7> CALL DELAY_1.5MS; Формирование паузы
<8> DJNZ R5,GENERATE; Если не все сформированы, то про-
<9> RET ; должить
<10>DELAY_1.5MS: MOV TL0,#23H; Загрузка регистра таймера
<11> MOV TH0,#0FAH; числом 64035 = FA23H
<12> SETB TR0 ; Включение таймера
<13>WAIT: JNB TF0, WAIT ; Дождаться переполнения регистра
<14> CLR TF0; Сбросить флаг
<15> CLR TR0; Выключить таймер
<16> RET ;
З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы
Описание объекта. На конвейере установлены детали, которые контролируются фотодатчиком. Посредством диска с постоянным магнитом и геркона измеряется скорость конвейера.
1. Разработайте программу, обеспечивающую зажигание светодиода VD1 на каждую деталь на конвейере (рис. 21), если текущая скорость транcпортера меньше номинальной VТЕК < VНОМ, и зажигание светодиода VD2, если VТЕК > VНОМ. Номинальной считается скорость при поступлении 10 импульсов геркона за 1 секунду.
Рис. 21. Функциональная схема к задаче
Разработайте программу, которая обеспечивает подсчет импульсов, поступающих на входы Р3.4 и Р3.2 за одну минуту, при этом на каждый из поступающих импульсов должны зажигаться и гаснуть соответствующие светодиоды VD1 (от Р3.4) и VD2 (от Р3.2 ).