- •Аналоговые и цифровые устройства автоматики
- •Глава 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.5. Программирование последовательного порта
Применение последовательного порта оправдано в случае, когда необходимо передавать информацию на значительные расстояния (больше 5 м). Эта ситуация возникает в случае передачи из локальных микропроцессорных контроллеров в ЭВМ верхнего уровня собирающую и обрабатывающую информацию о параметрах исследуемого объекта. Однокристальный МК имеет выводы RxD и TxD приемника и передатчика информации в последовательном формате. Однако этого недостаточно, чтобы передавать и принимать информацию от удаленного источника. Для передачи/приема последовательной информации на удаленное расстояние необходимы специальные преобразователи уровня. Существуют стандартные интерфейсы RS232 и RS485. RS232 следует применять на расстояниях не более 15м, RS485 (промышленный) позволяет передавать/принимать информацию на расстояние до 1.2 км, при этом на один передатчик могут работать 32 приемника.
В данном разделе рассмотрим несколько примеров программирования последовательного порта, не касаясь схемотехники преобразователей уровня.
Пример 1. Разработать подпрограмму, обеспечивающую режим “бегущий огонь” (рис.26), использовать нулевой режим последовательного порта.
<1>TRANSMIT: MOV SCON,#00H; Настройка PS в режим 0
<2> MOV A,#01H ;
<3>AGAIN: MOV SBUF, A ; Посылка кода в сдвигающий регистр
<4>WAIT_OUT:JNB TI,WAIT_OUT ; Ожидание конца передачи байта
<5> CLR TI ; Сброс флага передатчика
<6> RL A ; Сдвиг единицы влево в байте
<7> CALL DELAY ; Вызов задержки, определяющей скорость
<8> JMP AGAIN ; “бегущего огня”
<9>DELAY: RET ; Подпрограмму DELAY выполните самостоя-
<10> ;тельно
В схеме использован восьмиразрядный сдвигающий регистр K555ИР8 с последовательным входом DS (DATA SERIAL) и параллельными выходами Q. Регистр предназначен для преобразования последовательного кода в параллельный. Вход С является стробирующим. Выход МК R x D подключен на вход DS регистра, выход T x D - на вход стробирования. На выходах Q получается параллельный код введенного по входу DS последовательного байта.
Рис. 26. Функциональная схема к примеру 1
Пример 2. Разработать подпрограмму, обеспечивающую передачу данных из 15 ячеек внутреннего ОЗУ МК в линию связи, режим работы последовательного порта 3, скорость передачи 9,6 кБод.
<1> ORG 0000H
<2>OUT_INF: MOV TMOD,#20H;Установка 2 режима работы таймера 1
<3> MOV TH1,#0FDH; Загрузка в TH1 таймера числа для 9,6 кБод
<4> MOV TL1,#0FDH; Загрузка в TL1 (только в первый раз)
<5> MOV SCON,#0C0H; Установка 3 режима работы PS
<6> SETB TR1; Включение таймера
<7> MOV R0,#20H; Загрузка указателя начала массива данных
<8> MOV R1,#0FH; Загрузка счетчика байтов в массиве
<9>AGAIN:MOV A,@R0; Посылка очередного байта
<10> MOV SBUF,A; в линию связи
<11>WAIT_OUT:JNB TI,WAIT_OUT; Ожидание завершения передачи
<12> CLR TI ; Сброс флага передатчика
<13> INC R0 ; Продвижение по массиву
<14> DJNZ R1,AGAIN ; Если не все байты высланы, то продолжить
<15> RET
Пример 3. Разработать подпрограмму, обеспечивающую получение 15 байт из последовательной линии связи и размещение их в ячейках внутреннего ОЗУ, скорость приема 9,6 кБод, 3 режим работы PS.
<1>PRIEM_INF:MOV TMOD,#20H; Установка 2 режима работы Т1
<2> MOV TH1,#0FDH ; Загрузка в регистр числа для 9,6 кБод
<3> MOV TL1,#0FDH ; Загрузка в TL1 (только в первый раз)
<4> MOV SCON,#0D0H; Установка 3 режима PS, REN=1
<5> SETB TR1; Запуск таймера 1
<6> MOV R0,#30H ; Загрузка указателя начала массива в ОЗУ
<7> MOV R1,#15 ; Загрузка счетчика байтов в массиве
<8>WAIT_IN:JNB RI,WAIT_IN ; Ожидание завершения приема
<9> CLR RI ; Сброс флага прерывания приемника
<10> MOV A,SBUF ; Получение байта и пересылка
<11> MOV @R0,A ; его во внутреннее ОЗУ
<12> INC R0 ; Продвижение по массиву
<13> DJNZ R1,WAIT_IN; Если не все байты получены, то продолжить
<14> RET
Пример 4. Разработать программу, обеспечивающую передачу 10 байт данных с контролем ошибок, передатчик записывает PSW.0 в бит TB8.
<1> N_BYTE EQU 10; Число байт передаваемого массива
<2> MOV TMOD,#00100000B; Настройка таймера 1 в режим 2
<3> MOV TH1,#0FDH; Загрузка кодов для получения скорости
<4> MOV TL1,#0FDH; 9,6 кБод
<5> MOV SCON,#11000000B; Настройка PS в режим 3
<6> MOV R7,#N_BYTE; Загрузка счетчика числа байтов в массиве
<7> MOV R0,#20H ; Загрузка указателя
<8> SETB TR1 ; Запуск таймера 1
<9>OUT_PS: MOV A,@R0 ; Получение байта из ОЗУ
<10> MOV C,PSW.0 ; Пересылка бита паритета Р в бит ТВ8
<11> MOV TB8,C ;
<12> MOV SBUF,A ; Высылка байта в линию связи
<13>WAIT_OUT: JNB TI,WAIT_OUT ;Ожидание окончания передачи
<14> CLR TI
<15> INC R0 ; Продвижение по массиву данных
<16> DJNZ R7,OUT_PS ;Если не все байты переданы, то продолжить
Пример 5. Разработать фрагмент программы, обеспечивающей прием 20 байт из линии связи с контролем правильности переданной информации, должен контролироваться бит RB8.
<1> MASS EQU 30H ; Начало массива с 30Н
<2>PRIEM_RB8: MOV TMOD,#00100000B;Настройка T/C1 в режим 2
<3> MOV TH1,#0FDH ;Загрузка регистров для получения
<4> MOV TL1,#0FDH ;скорости приема 9,6 кБод
<5>MOV SCON,#11010000B;Настройка PS в 3 режим работы, REN=1
<6> MOV R0,#MASS ;Загрузка указателя начала массива
<7> MOV 20H,#00H ;Обнуление 20Н
<8> MOV R7,#20 ; Загрузка счетчика числа байтов в массиве
<9> SETB TR1 ; Запуск таймера 1
<9>WAIT_PRIEM:JNB RI,WAIT_PRIEM ;Ожидание прихода очередного байта
<10> CLR RI ; Сброс флага приемника
<11> MOV A,SBUF ;Запись полученного байта в А из буфера
<12> PUSH ACC ; Сохранение в стеке полученного байта
<13> MOV C,RB8 ; Запись пришедшего с байтом бита RB8
<14> MOV 20H.0,C ;в нулевой бит 20Н ячейки
<15> MOV C,PSW.0 ;Получение бита паритета и сохранение
<16> MOV ACC.0,C ;в нулевом бите аккумулятора
<17> ANL A,#01 ; Выделение нулевого бита аккумулятора
<18> CJNE A,20H,ERROR; Сравнение А и 20Н, если не равны, то ошибка
<19> POP ACC ; Восстановление из стека содержимого А
<20> MOV @R0,A ; Запись полученного из линии связи байта в ОЗУ
<21> INC R0 ; Продвижение по массиву
<22> CLR C ; Сброс бита переноса
<23> CLR 20H.0 ; Сброс нулевого бита 20Н
<24> DJNZ R7,WAIT_PRIEM ;Если не все байты получены, то продолжить
<25> RET ;
<26>ERROR: ; Сообщение об ошибке принятого байта
Особенностью фрагмента является то, что при принятии информации содержимое бита RB8 контролируется и далее сравнивается с содержимым бита паритета Р. Если содержимое битов не равно (число единиц в аккумуляторе изменилось), это означает, что при передаче информации возникла ошибка. Если RB8 = P, то это значит, что число единиц в принятом байте равно числу единиц в посланном передатчиком байте. Таким образом, с определенной вероятностью можно сказать, что информация передана и получена без ошибок.
З а д а н и я д л я с а м о с т о я т е л ь н о й р а б о т ы
1. Разработать программу, обеспечивающую получение 10 байт из последовательной линии связи и размещение их в ячейках внутреннего ОЗУ (с ячейки 50Н), скорость приема 9,6 кБод, 3 режим работы PS.
2. Разработать программу, обеспечивающую передачу данных из 10 ячеек внутреннего ОЗУ ( с ячейки 50Н) МК в линию связи, режим работы последовательного порта 3, скорость передачи 9,6 кБод.