- •Аналоговые и цифровые устройства автоматики
- •Глава 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
5.1.4. Комбинированный способ организации клавиатуры
Комбинированный способ организации клавиатуры подразумевает одновременное сканирование дисплея и клавиш. Рассмотрим электрическую принципиальную схему динамической индикации на дисплее АЛС 318А, представленную на рис. 35. Динамическая индикация подразумевает постоянную регенерацию изображения на дисплее (приблизительно 50 раз в секунду). Поэтому ЭВМ при таком подключении должна один раз в 20 миллисекунд вывести информацию на дисплей. Порт Р1 управляет одновременно преобразователем кодов КР514ИД1 (BCD код на входе преобразуется в код семисегментных индикаторов на выходе) и демультиплексором знакомест дисплея К555ИД7 (двоичный код на входах преобразуется в унитарный на выходе). Транзисторы КТ315В и КТ361В предназначены для усиления по току сигнала запятой. Вторые выводы клавиш SB0 – SB7 клавиатуры соединены вместе и подключены к входу-запросу на прерывание INT0 (P3.2). Таким образом, работа клавиатуры организована по прерываниям. Код нажатой клавиши соответствует коду на разрядах Р1.5, Р1.6, Р1.7. Режим динамической индикации удобно построить с применением таймера, который будет работать в режиме прерывания через каждые 20 миллисекунд.
Рассмотрим алгоритмы, представленные на рис.32, 33, 34 и программу работы микроконтроллера по рассматриваемой схеме рис. 35.
Рис. 32. Алгоритм работы при нажатии на клавишу клавиатуры
Рис.33. Алгоритм выполнения основной программы
Рис. 34. Алгоритм работы при прерывании таймера
Рис. 35. Комбинированный способ организации клавиатуры и дисплея (динамическая индикация)
Конструктивные параметры и цоколевка светодиодного дисплея АЛС318 показаны на рис. 36.
Рис. 36. Параметры и цоколевка светодиодного дисплея АЛС 318
Рассмотрим программу, обеспечивающую вывод информации на линейный дисплей по прерыванию таймера через 20 мС и прерывание по INT0 при нажатии на клавишу клавиатуры.
<1> BUFF EQU 20H ; Адрес начала буфера дисплея
<2> NUM EQU 08H ; Восемь знакомест в дисплее
<3> ZAP EQU 02H ; Два числа после запятой
<4> HL EQU 00H ; Начать отображать с нулевого знакоместа
<5> ORG 0000H
<6> LJMP START ; Переход на инициализацию системы
<7> ORG 0003H
<8> JMP INT_KLAV ;Вектор прерывания INT0 при нажатии на клавишу
<9> ORG 000BH
<10> JMP INT_TIMER0 ; Вектор прерывания по переполнению Т0
<11>START:MOV TMOD,#01H;Настройка T/C0 в таймер, режим 1
<12> MOV IE,#00000011B ;Установка прерываний от INT0 и T/C0
<13> MOV IP,#01H ; у INT0 более высокий приоритет
<14> SETB IT0 ; Установка прерывания по перепаду
<15> SETB EA ; Установка всех разрешенных прерываний
<16> MOV TL0,#0DFH ; Загрузка в таймер числа 45535 = B1DFh
<17> MOV TH0,#0B1H ; до прерывания через 20 мС
<18> SETB TR0 ; Запуск таймера
<19> MOV R0,#BUFF ; Указание начала буфера дисплея
<20> MOV R2,#NUM ; Загрузка счетчика разрядов дисплея
<21> MOV R3,#ZAP ; Загрузка числа знаков после запятой
<22> MOV R4,#HL ; Код нулевого знакоместа в r4
<23>MAIN: ; Выполнение основной программы
<24> JMP MAIN
<25>INT_TIMER0:CLR TR0 ; Выключение таймера
<26> MOV A,R4 ; Текущий код знакоместа в А
<27> CLR C ;
<28> SUBB A,#07 ; Все ли знакоместа отображены?
<29> JZ INIT_REG ; Если да, то инициализировать регистры
<30> CALL DISPL ;Вызов подпрограммы индикации одного знакоместа
<31>LOAD_TIMER:MOV TL0,#0DFH ; Загрузка в таймер числа В1DFH
<32> MOV TH0,#0B1H ;
<33> SETB TR0 ; Включение таймера
<34> RETI ; Выход из прерывания по переполнению T/C
<35>DISPL: MOV A,R4 ; Начать отображать знакоместо
<36> SWAP A ;Поменять тетрады в А и сдвинуть содержимое А на раз ряд влево
<37> RL A ; для подготовки линий мультиплексора К555ИД7
<38> MOV R7,A ; Сохранить код в R7
<39> MOV A,R3 ; Число знаков после запятой в А
<40> JNZ FROM_MEM ;Если не 0, то взять цифру из буфера дисплея
<41> MOV A,#10H ; Подготовка маски для определения запятой
<42> ORL A,R7 ;
<43> MOV R7,A ;
<44>FROM_MEM: MOV A,@R0 ; Взять BCD код цифры из буфера дисплея
<45> ORL A,R7 ; Проверить на наличие запятой
<46> MOV P1,A ; Выслать на дисплей код цифры и код знакоместа
<47> INC R0 ; Установить адрес следующей цифры
<48> DEC R3 ; Декремент счетчика чисел после запятой
<49> INC R4 ; Указать на следующее знакоместо дисплея
<50> RET ; Возврат в процедуру INT_TIMER0
<51>INT_KLAV: CALL DELAY_50MS ; Задержка на 50 mS
<52> MOV A,R7 ; Получить код клавиши в А
<53> ANL A,#0E0H ; Маскирование трех старших битов
<54> SWAP A ; Код в младшую тетраду
<55> MOV 30H,A ; Сохранить код клавиши в ячейке 30h
<56> RETI ; Возврат из прерывания по INT0
<57>DELAY_50MS:CLR EA ; Запрет прерываний
; Программная задержка на 50 mS
<58> SETB EA ; Разрешение прерываний
<59> RET ; Возврат из подпрограммы задержки
<60>INIT_REG: MOV R0,#BUFF ;Указание начала буфера дисплея
<61> MOV R2,#NUM ; Загрузка счетчика разрядов дисплея
<62> MOV R3,#ZAP ; Загрузка числа знаков после запятой
<63> MOV R4,#HL ; Код знакоместа в А
<64> JMP LOAD_TIMER
Перед программой выполняется присваивание переменным символических обозначений. В начале программы указываются адреса векторов используемых прерываний (шаги с 5 по 10). В нашем случае применяются прерывание по запросу от INT0 и прерывание при переполнении таймера - счетчика нулевого. В разделе инициализации системы производится настройка в таймер, выбор режима 1, разрешаются прерывания и устанавливается высокий приоритет прерывания по входу INT0, загружается и запускается таймер (шаги с 11 по 18), инициализируются регистры (шаги с 19 по 23 ).
Основная программа должна размещаться между шагами 23 и 24. На ее выполнение отводится ровно 20 мс. Через 20 мс наступит переполнение таймера, и процессор закончит выполнение основной программы. Управление передается на метку INT_TIMER0. При входе в подпрограмму сразу же выключается таймер (шаг 25), вызывается подпрограмма индикации одного знакоместа DISPL (шаг 30) и осуществляется проверка, все ли знакоместа высвечены (с шага 26 по 29). С шага 31 по 34 осуществляется перезагрузка регистра и запуск таймера.
Информация, выводимая на дисплей, должна быть предварительно размещена в упакованном BCD формате (цифра должна находиться в младшей тетраде, например 05Н) в буфере дисплея, его начальный адрес 20Н. Шаги с 60 по 63 производят инициализацию регистров для работы с дисплеем. С 44 по 49 шаг информация передается из буфера на дисплей.
При нажатии на одну из клавиш конденсатор С разряжается, сигнал на Р3.2 принимает нулевое значение, наступает прерывание и управление передается на метку INT_KLAV (шаг 51). Конденсатор С устраняет неприятный эффект “дребезг контакта”. Шаги с 52 по 55 выделяют код нажатой клавиши и сохраняют его в ячейке 30Н внутреннего ОЗУ. При входе в подпрограмму обслуживания прерывания необходимо сделать временную задержку, этот фрагмент предлагается выполнить самостоятельно.