- •Аналоговые и цифровые устройства автоматики
- •Глава 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.4. Программирование прерываний в микропроцессорном устройстве
Работа устройства с применением прерываний позволяет сэкономить процессорное время и при использовании таймеров организовать многозадачный режим работы. Система прерываний однокристального МК, например К1830ВЕ51, имеет 5 источников, за каждым из которых жестко закреплен адрес - вектор прерывания. Для программирования прерываний имеются два регистра: разрешения прерываний IE и приоритетов прерываний IP. В разделе инициализации программы необходимо разрешить прерывания и установить приоритеты. По адресам векторов необходимо записать команды JMP, которые будут передавать управление на подпрограммы обслуживания прерывания. Каждая подпрограмма должна заканчиваться командой RETI.
Рассмотрим несколько примеров, поясняющих особенности программирования прерываний в микропроцессорном устройстве.
Пример 1. Пусть требуется инкрементировать порт Р1 через 50 мС.
<1> ORG 0000H ;
<2> JMP INIT ; Переход на инициализацию системы
<3> ORG 000BH ; Адрес вектор – прерывания T/C0
<4> JMP INT_TIMER0; Переход на подпрограмму
<5>INIT:MOV P1,#00 ; Обнуление порта Р1
<6> MOV TMOD,#00000001B; Настройка T/C0 в таймер, режим 1
<7> MOV IE,#00000010B ; Разрешение прерывания от таймера 0
<8> SETB EA ; Разрешить разрешенные прерывания
<9> MOV TL0,#0AFH ; В регистр таймера число 15535=3CAFh
<10> MOV TH0,#3CH ; для обеспечения 50мС
<11> SETB TR0 ; Включение таймера
<12>MAIN: ; Блок основной программы
<13> JMP MAIN ;
<14>INT_TIMER0: CLR TR0 ; Выключение таймера
<15> INC P1 ; Инкремент порта Р1
<16> MOV TL0,#0AFH; Перезагрузка таймера
<17> MOV TH0,#3CH;
<18> SETB TR0 ; Включение таймера
<19> RETI
Особенностью программы является то, что для выполнения блока основной программы процессору отводится 50 мС времени. В течение этого промежутка идет заполнение регистра таймера импульсами с числа 15535 до 65535, после чего наступает переполнение регистра и возникает прерывание. В счетчик команд записывается адрес 000ВН, где стоит команда JMP INT_TIMER0 (шаг 4), пересылающая управление на подпрограмму обслуживания прерывания (шаг 14). Далее происходит инкремент Р1 (шаг 15), перезагрузка регистра таймера (шаги 16 и 17), включение таймера (шаг 18) и выход из подпрограммы в основную программу.
Пример 2. Выполнить подсчет числа деталей (до 99), проходящих за 1 секунду, по схеме на рис. 20.
Выход приемника импульсов подключен к входу Т0 ( Р3.4 ) МК, настроим T/C0 в режим счетчика внешних импульсов, разрешим прерывания от переполнения счетчика и загрузим в него число FFFFH. В подпрограмме обслуживания прерывания в регистре будем считать импульсы в BCD коде. Таким образом, импульс, поступающий в регистр счетчика, будет вызывать прерывание в работе процессора. Таймер/счетчик 1 настроим в таймер в режим 1. Разрешим прерывания от переполнения таймера. При 15-ти переполнениях таймера будет сформирована временная задержка в 1 секунду.
<1> ORG 0000H
<2> JMP INIT ; Переход на инициализацию
<3> ORG 000BH ; Вектор прерывания от переполнения
<4> JMP INT_COUNT0 ; счетчика 0
<5> ORG 001BH ; Вектор прерывания от переполнения
<6> JMP INT_TIMER1 ; таймера 1
<7>INIT:MOV TMOD,#15H; Настройка T/C0 в счетчик, T/C1 в таймер, режим 1
<8> MOV IE,#0AH ;Разрешение прерываний от счетчика и таймера
<9> MOV IP,#00001000B ; Более высокий приоритет у таймера
<10> SETB EA ; Разрешение всех разрешенных прерываний
<11> MOV TL0,#0FFH ; Загрузка счетчика для организации режима
<12> MOV TH0,#0FFH ; прерываний при поступлении импульса
<13> SETB TR0 ; Включение счетчика
<14> SETB TR1 ; Включение таймера
<15> MOV R0,#20H ;Адрес ячейки для хранения числа импульсов
<16> MOV R7,#00 ; Обнуление счетчика переполнений таймера
<17>MAIN: ; Выполнение блока основной программы
<18> JMP MAIN
<19>INT_COUNT0: CLR TR0 ; Выключение счетчика
<20> CLR C ; Сброс флага переноса
<21> INC A ; Инкремент счетчика импульсов
<22> DA A ; Десятичная коррекция для перевода в BCD
<23> MOV TL0,#0FFH; Перезагрузка
<24> MOV TH0,#0FFH; счетчика
<25> SETB TR0 ; Включение счетчика
<26> RETI ; Выход из подпрограммы прерывания счетчика
<27>INT_TIMER1: INC R7;Инкремент счетчика прерываний Т1
<28> CJNE R7,#15,END_INT; Проверка на 15 переполнений Т1
<29> CLR TR1 ; Если 15 переполнений, то выключить таймер
<30> MOV @R0,A ;Сохранить количество деталей в ОЗУ
<31> MOV R7,#00; Обнуление счетчика переполнений таймера
<32> CLR A ; Обнуление счетчика импульсов
<33> SETB TR1 ; Включить таймер
<34>END_INT: RETI
Таким образом, в примере используются два вида прерывания - от переполнения счетчика и таймера. Приоритет таймера более высокий, поэтому при возникновении прерываний одновременно вначале будет обработано прерывание от таймера, формирующего временной интервал в 1 секунду.
Пример 3. Разработать программу, обеспечивающую следующий алгоритм работы. Если датчики D1 и D2 не замкнуты, то обеспечивается эффект “ двойной бегущий огонь”, если замкнут D1 – режим “ одинарный бегущий огонь”, если замкнут D2 – режим “ бегущая тень ”. Время задержки 1 секунда. После 20 циклов сдвига осуществляется возврат в первоначальный режим. Используйте аппаратные прерывания по входам INT0 и INT1.
Разработаем алгоритмы работы устройства (рис. 22, 23). Их будет 3:алгоритм основной программы, алгоритм при возникновении прерывания по входу INT0 и алгоритм при возникновении прерывания по входу INT1.
Рис. 22. Алгоритм основной программы
Рис. 23. Алгоритмы работы устройства в режимах прерываний по входам INT0 и INT1
Схема подключения датчиков и светодиодов представлена на рис.24.
Рис. 24. Электрическая принципиальная схема к примеру 3
Рассмотрим программу работы устройства.
<1> D1 BIT 20H.0 ; Обозначение битов
<2> D2 BIT 20H.1 ;
<3> ORG 0000H ;
<4> JMP INIT ; Начало программы
<5> ORG 0003H ;
<6> JMP DAT1 ; Вектор прерывания INT0
<7> ORG 0013H ;
<8> JMP DAT2 ; Вектор прерывания INT1
<9>INIT: MOV IE,#05H ; Разрешение прерываний по INT0 и INT1
<10> SETB EA ; Разрешение всех разрешенных прерываний
<11> MOV TMOD,#00000001B; T/C0 - таймер
<12> MOV R7,#20 ;Загрузка заданных сдвигов счетчика <13> MOV R6,#15 ;Загрузка счетчика переполнений таймера
<14>START: MOV A,#33H ; Код в порт
<15> MOV R0,#01 ; Код при D1=0
<16> MOV R1,#0FEH ; Код при D2=0
<17>BEGIN: JB D1,MOVE_1 ; Проверка признака D1=0
<18> JB D2,MOVE_0 ; Проверка признака D2=0
<19> MOV P2,A ; Выслать код в порт
<20> CALL DELAY_1S ; Вызов задержки 1 сек
<21> RL A ; Сдвиг А
<22> JMP BEGIN ;
<23>MOVE_1: MOV P2,R0 ; Выполнить действия, если D1=0
<24> CALL DELAY_1S ;
<25> MOV A,R0 ;
<26> RL A ;
<27> MOV R0,A ;
<28> DJNZ R7,BEGIN ;
<29> CLR D1 ;
<30> CLR D2 ;
<31> MOV R7,#20 ;
<32> JMP START ;
<33>MOVE_0: MOV P2,R1 ; Выполнить действия, если D2=0
<34> CALL DELAY_1S ;
<35> MOV A,R1 ;
<36> RL A ;
<37> MOV R1,A ;
<38> DJNZ R7,BEGIN ;
<39> CLR D1 ;
<40> CLR D2 ;
<41> MOV R7,#20 ;
<42> JMP START
<43>DAT1: SETB D1 ; Подпрограмма обслуживания
<44> CLR D2 ; прерывания по входу INT0
<45> CLR EX0 ;
<46> RETI ;
<47>DAT2: SETB D2 ; Подпрограмма
<48> CLR D1 ;обслуживания прерывания по входу INT1
<49> CLR EX1 ;
<50> RETI ;
<51>DELAY_1S:SETB TR0 ; Подпрограмма задержки в 1 секунду
<52>WAIT: JNB TF0,WAIT ;
<53> CLR TF0 ;
<54> DJNZ R6,WAIT ;
<55> CLR TR0 ;
<56> MOV R6,#15 ;Перезагрузка счетчика переполнений таймера
<57> RET ;
После инициализации процессор выполняет основную программу. Она ограничивается меткой BEGIN. В этом случае выполняется режим “ двойного бегущего огня ” (шаги с 17 по 22). При срабатывании одного из датчиков наступает режим прерывания, и управление передается на один из векторов прерывания: 0003Н при срабатывании D1 либо 0013H при срабатывании D2. При этом управление передается на подпрограммы обслуживания прерывания либо на шаг 43, либо на 47, где производится установка признака срабатывания датчиков, далее сбрасывается флаг прерывания по соответствующему входу и происходит выход из подпрограммы прерывания.
В шагах 17 и 18 проверяется установка признаков срабатывания датчиков D1 или D2 и выбор соответствующего режима. Задержка на срабатывание светодиодов выбрана равной 1 секунде и осуществляется таймером 0 (шаги 51- 57).
З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы
Разработать программу, обеспечивающую подсчет деталей на конвейере (рис.25) по входу INT0, проходящих за 1 минуту. Использовать режим прерываний.
Разработать программу, инкрементирующую на 2 порт Р3 через 2.5мС. Использовать прерывание по переполнению таймера 1.
Разработать программу, обеспечивающую зажигание соответствующего светодиода в младшей тетраде порта Р2 (при срабатывании датчика D1) и в старшей тетраде (при срабатывании D2) (рис. 23). Использовать режим прерываний.
Рис. 25. Функциональная схема к заданию 1