- •Г.И.Загарий, н.О.Ковзель, в.С.Коновалов, в.И.Моисеенко, в.И.Поддубняк, а.И.Стасюк
- •Часть 2. Характеристики микроконтроллеров и плк
- •Рецензенты:
- •Isbn – 5–7763–0384–2
- •Isbn – 966–7561–23–2
- •Isbn – 966-7561-23-2
- •Isbn – 5–7763–0384-2
- •Содержание
- •Введение
- •Раздел 1
- •1 Микроконтроллеры фирмы Atmel
- •1.1 Микроконтроллеры серии ат89, совместимые с mcs-51™
- •1.2 Микроконтроллеры avr серии ат90 с risc-архитектурой
- •2. Микроконтроллер aDμC812 семейства MicroConverter™ фирмы analog devices
- •3 Микроконтроллеры sx18ac/sx28ac фирмы scenix
- •4 Микроконтроллеры фирмы motorola
- •5 Микроконтроллеры семейства z8 фирмы zilog
- •6 Микроконтроллеры фирмы holtek
- •7 Рiс – микроконтроллеры фирмы microchip
- •7.1 Микроконтроллер pic16f84
- •7.1.1 Архитектура микроконтроллера pic16f84
- •7.1.2 Типы корпусов и исполнения
- •7.1.3 Назначение выводов
- •7.1.4 Регистры pic16f84
- •7.1.5 Прямая и косвенная адресация регистров
- •7.1.6 Модуль таймера/счетчика
- •7.1.7 Предварительный делитель
- •7.1.8 Регистр слова состоянияStatus
- •7.1.8.1 Программные флаги регистра слова состояния
- •7.1.8.2 Аппаратные флаги состояния
- •7.1.9 Регистр option
- •7.1.11 Организация встроенного пзу
- •7.1.12 Программный счетчик и адресация пзу
- •7.1.13 Стек и возвраты из подпрограмм
- •7.1.14 Данные в eeprom
- •7.1.15 Управление eeprom Управляющие регистры для eeprom
- •Регистры eecon1 и eecon2
- •7.1.16 Организация прерываний
- •Внешнее прерывание
- •Прерывание от переполнения счетчика/таймера
- •Прерывание от порта rb
- •Прерывание от eeprom
- •7.1.17 Регистры (порты) ввода/вывода
- •7.1.18 Использование портов ввода/вывода ra и rb Организация двунаправленных портов
- •Последовательное обращение к портам ввода/вывода
- •7.1.19 Специальные функции
- •Сторожевой таймер wdt
- •Тактовый генератор
- •Таймер сброса dtr
- •Биты конфигурации
- •Защита программы от считывания
- •Режим пониженного энергопотребления
- •7.2 Обзор команд и обозначения
- •7.2.1 Описание команд
- •7.3Технология разработки и отладки рабочих программ для омк рiс16/17
- •7.3.1 Правила записи программ на языке Ассемблера
- •Операция
- •Операнд
- •Директивы Ассемблера
- •7.3.2 Структура рабочей программы
- •7.3.3 Преобразование исходного текста рабочей программы в объектный модуль
- •7.4 Интегрированная среда разработки рабочих программ mplab для омк pic
- •7.4.1 Назначение и основные функциональные возможности mplab
- •7.4.2 Краткая характеристика основных программ Редактор mplab
- •Ассемблер mpasm
- •Компилятор mplab-c
- •Программный симулятор-отладчик mplab-sim
- •7.4.3 Главное окно средыMplab Главное меню mplab
- •МенюFile
- •МенюProject
- •МенюEdit
- •МенюDebug (отладка)
- •Меню picstart plus (меню программирования)
- •МенюOptions (параметры)
- •МенюTools
- •7.4.4 Инструментальная панельMplab
- •7.4.5 Строка состояния mplab
- •7.5 Пример разработки программы с использованием mplab
- •7.5.1 Постановка задачи и разработка алгоритма ее решения
- •7.5.2 Написание исходного текста программы
- •Раздел 2
- •8. Характеристики программируемых логических контроллеров
- •8.1. Контроллеры семейства модикон
- •8.1.1. Контроллер tsx 07 Nano
- •Варианты конфигураций
- •Импульсные выходы
- •Программное обеспечение
- •Контрольные вопросы:
- •8.1.2. Контроллер tsx Momentum Общая характеристика
- •Концепция построения
- •Архитектура tsx Momentum
- •Подключение tsx Momentum к сети Modbus Plus
- •Коммуникационный адаптер для сети Interbus
- •Коммуникационный адаптер для сети Profibus dp
- •Коммуникационный адаптер для сети fipio
- •Коммуникационный адаптер для сети Ethernet I/o
- •Базовые модули ввода – вывода
- •Заключение
- •Контрольные вопросы
- •8.1.3. Микроконтроллер tsx 37 Micro Общая характеристика
- •Базовое исполнение tsx 37-10
- •Дисплейный блок
- •Базовое исполнение tsx 37-21 и tsx 37-22
- •Источники питания
- •Коммуникационные возможности
- •Заключение
- •Контрольные вопросы
- •8.2. КонтроллерыTsxQuantum Общая характеристика
- •Источники питания
- •Модули ввода-вывода
- •Модули интерфейса Quantum
- •Заключение
- •Контрольные вопросы
- •8.3. Контроллеры Siemens
- •8.3.1. КонтроллерSimaticS7-200
- •Центральные процессоры
- •Входы и выходы контроллеров s7-200
- •Коммуникационный модуль
- •8.3.2.Контроллер Simatic s7-300
- •Центральные процессоры
- •Сигнальные модули
- •Функциональные модули
- •Коммуникационные модули
- •Заключение
- •Контрольные вопросы
- •8.3.3. Контроллер Simatic s7-400
- •Центральные процессоры
- •Модули ввода-вывода
- •Функциональные модули
- •Коммуникационные процессоры
- •Блоки питания
- •Заключение
- •Контрольные вопросы
- •Раздел 3
- •9. Разработка микропроцессорных систем железнодорожной автоматики
- •9.1. Постановка задачи
- •9.2. Характеристика входных и выходных сигналов.
- •9.3. Разработка структуры системы
- •9.4. Конфигурация цепей ввода-вывода
- •9.5. Определение необходимого количества модулей ввода-вывода
- •9.6.Принципиальные и монтажные схемы
- •Индивидуальные задания
- •10. Примеры практической реализации микропроцессорных систем
- •10.1.Микропроцессорная диспетчерская централизация
- •Объекты контроля
- •Объекты управления
- •10.2.Микропроцессорный маршрутный набор электрической централизации
- •10.2.1 Постановка задачи
- •10.2.2 Общая структура системы управления.
- •10.2.3 Расчет количества входных и выходных сигналов.
- •Расчет потребного количества выходов
- •Управление стрелкой
- •Перечень объектов контроля
- •Расчет потребного количества входов
- •Выбор конфигурации программируемого логического контроллера
- •Разработка структуры информационного взаимодействия компонентов системы
- •Программируемые контроллеры для систем управления.
- •Часть 2. Характеристики микроконтроллеров и плк
- •61052, Харьков, ул. Красноармейская, 7, тел. 24-22-98.
- •61052, Харків, вул. Червоноармійська, 7, тел. 24-22-98.
Операнд
В этом поле помещаются операнды (или операнд), участвуюшие в операции. Операнды должны отделяться от мнемоники одним или более пробелов или меток табуляции. Списки операндов (операнды) должны отделяться запятыми.
Команды могут быть без-, одно-, или двухоперандными. Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом (например, MOVLWh'FF' гдеhобозначает шестнадцатиричное число или MOVLW В'01010011', где В – обозначает двоичное число) или символическим именем (MOVWFDATAPORT).
Используемые в качестве операндов символические имена и метки должны быть определены, а числа представлены с указанием системы счисления, для чего используется префикс (буква, стоящая перед числом):
В – для двоичной, Q– для восьмеричной,D– для десятичной, Н – для шестнадцатиричной. Число без префикса по умолчанию считается десятичным.
Директивы Ассемблера
Ассемблирующая программа транслирует исходную программу в объектные коды. Транслирующая программа берет на себя многие из рутинных задач программиста, такие как присвоение действительных адресов, преобразование чисел, присвоение числовых значений символьным переменным и т.п., но программист должен указать ей некоторые параметры: начальный адрес рабочей программы, конец ассемблируемой программы, форматы данных, их значения и т.п. Всю эту информацию задают в исходном тексте своей программы с помощью директив (псевдокоманд) Ассемблера, которые управляют процессом трансляции. Директивы не преобразуются в коды объектной программы.
Директива ORGзадает Ассемблеру адрес ячейки памяти (например, директиваORGh'100' задает шестнадцатиричный адрес 100), в которой должна быть расположена следующая за ней команда прикладной программы.
Директивой EQUможно любому символическому имени, используемому в программе, поставить в соответствие определенный операнд. Например, запись
TMR0EQUh'01'
приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя TMR0, оно будет заменено числом 1.
Директивой ENDпрограммист дает ассемблеру указание об окончании трансляции.
В результаге трансляции должна быть получена карта памяти программы, где каждой ячейке памяти поставлен в соответствие хранящийся в ней код.
Ниже приведен фрагмент исходного текста программы, содержащий операнды с различным способом задания, директиву ORGи директиву END:
ORGН'100'
MOVLW В'01010101' ; Загрузить двоичную константу
; 01010101 в регистр W
MOVLWDATAPORT;Записать содержимое регистра W
;в регистр DATAPORT
; (определенный ранее как порт В)
GOTO$ ; Бесконечный цикл, Выход
; только по прерыванию.
END;Конец трансляции и окончание программы
Перечень директив Ассемблера приведен в табл. 7.3.1.
Таблица 7.3.1
Список директив ассемблера MPASM
Директива |
Описание |
Синтаксис |
_ _BADRAM |
определяет расположение отсутствующей (ошибочной) оперативной памяти |
_ _badram <expr>[-<expr>] |
BANKISEL |
генерирует код номера банка RAM для косвенной адресации |
Bankisel <label> |
BANKSEL |
генерирует код номера банка RAM для прямой адресации |
Banksel <label> |
CBLOCK |
определяет блок констант |
Cblock [<expr>] |
CODE |
начинает секцию рабочей программы |
[<name>] code [<address>] |
_ _CONFIG |
специфицирует биты конфигурации |
_ _config <expr> OR _ _config <addr>, <expr> |
CONSTANT |
объявляет константу |
Constant <label> [=<expr>,...,<label> [=<expr>] ] |
DA |
определяет строковую величину в программной памяти |
[<label>] da <expr> [, <expr2>, ..., <exprn>] |
DATA |
определяет числовые и текстовые данные |
[<label>] data <expr>, [,<expr>,...,<expr>] [<label>] data "<text_string>" [,"<text_string>",...] |
DB |
определяет однобайтные данные |
[<label>] db <expr> [,<expr>,...,<expr>] [<label>] db "<text_string>" [,"<text_string>",...] |
DE |
определяет данные СППЗУ |
[<label>] de <expr> [,<expr>,...,<expr>] [<label>] de "<text_string>" [,"<text_string>",...] |
#DEFINE |
определяет идентификатор замены |
Label Define <name> [<value>] define <name> [<arg>,...,<arg>] <value> |
DT |
определяет таблицу |
[<label>] dt <expr> [,<expr>,...,<expr>] [<label>] dt "<text_string>" [,"<text_string>",...] |
Таблица 7.1.3 (продолжение)
DW |
объявляет однословные данные |
[<label>] dw <expr> [,<expr>,...,<expr>] [<label>] dw "<text_string>" [,"<text_string>",...] |
ELSE |
начать альтернативный блок ELSE директивы условия IF...ELSE |
Else |
END |
конец программы |
End |
ENDC |
конец блока констант |
Endc |
ENDIF |
конец блока условия |
Endif |
ENDM |
конец макроопределения |
Endm |
ENDW |
конец цикла While |
Endw |
EQU |
определяет константу |
<label> equ <expr> |
ERROR |
определяет сообщение об ошибках |
error "<text_string>" |
ERRORLEVEL |
задает уровень ошибок |
Errorlevel 0|1|2| <+|-><message number> |
EXITM |
выход из макрокоманды |
Exitm |
EXPAND |
"разворачивает" следующие за ней макрокоманды |
Expand |
EXTERN |
объявляет внешнюю метку |
Extern <label>[ ,<label>] |
FILL |
определяет загрузку памяти |
[<label>] fill <expr>, <count> |
GLOBAL |
экспортирует определен-ную внешне метку |
Global <label>[ ,<label>] |
IDATA |
начинает инициализи-рованный раздел данных |
[<name>] idata [<address>] |
_ _IDLOCS |
определяет расположение идентификатора |
_ _idlocs <expr> |
IF |
Начало блока условия "if ... then ... else" |
if <expr> |
IFDEF |
выполняется, если идент-ификатор ранее определен |
ifdef <label> |
IFNDEF |
выполняется, если идент-ификатор не определен |
ifndef <label |
#INCLUDE |
включает дополнительный исходный файл |
Include <<include_file>> |"<include_file>" |
Таблица 7.3.1 (продолжение)
LIST |
включает создание листинга |
list [<list_option>,..., <list_option>] |
LOCAL |
объявляет локальную переменную макроса |
local <label>[,<label>] |
MACRO |
объявляет макроопределение |
<label> macro [<arg>,...,<arg>] |
_ _MAXRAM |
определяет максимальный адрес ОЗУ |
_ _maxram <expr> |
MESSG |
создает определяемое пользователем сообщение |
messg "<message_text>" |
NOEXPAND |
выключает макрорасширение |
Noexpand |
NOLIST |
выключает вывод листинга |
Nolist |
ORG |
устанавливает начальный адрес программы |
<label> org <expr> |
PAGE |
устанавливает вывод номеров страниц листинга |
Page |
PAGESEL |
выбирает страницу программной памяти |
Pagesel <label> |
PROCESSOR |
выбирает тип процессора |
Processor <processsor_type> |
RADIX |
определяет заданное по умолчанию основание системы счисления |
radix <default_radix> |
RES |
определяет резервную память |
[<label>] res <mem_units> |
SET |
определяет переменную ассемблера |
<label> set <expr> |
SPACE |
вставляет пустые строки в листинг |
space <expr> |
SUBTITLE |
определяет подзаголовок программы |
Subtitle "<sub_text>" |
TITLE |
определяет заголовок программы |
title "<title_text>" |
UDATA |
начинает неинициализированный раздел данных |
[<name>] udata [<address>] |
UDATA_ACS |
начинает доступ к неинициализированному разделу данных |
[<name>] udata_acs [<address>] |
UDATA_OVR |
начало перекрывающего неинициализированного раздела данных |
[<name>] udata_ovr [<address>] |
Таблица 7.3.1 (продолжение)
UDATA_SHR |
начало совместно используемого неинициализированного раздела данных |
[<name>] udata_shr [<address>] |
#UNDEFINE |
удаляет определение идентификатора замены |
#undefine <label> |
VARIABLE |
объявляет переменную |
Variable <label> [=<expr>,...,<label> [=<expr>] ] |
WHILE |
исполняет цикл "ПОКА УСЛОВИЕ ИСТИННО" |
while <expr> |