- •Г.И.Загарий, н.О.Ковзель, в.С.Коновалов, в.И.Моисеенко, в.И.Поддубняк, а.И.Стасюк
- •Часть 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.
7.3.2 Структура рабочей программы
Рабочая программа для ОМК PIC16/17 состоит из трех основных секций:
– секция заголовка;
– рабочая секция;
– секция окончания.
В секции заголовка определяются имена всех используемых в программе ресурсов: портов, битовых и байтовых переменных, регистров. Это начальная часть исходной программы до строки с выражением ORG 0 (для PIC 16F84). Для других типов микроконтроллеров семейств PIC 16/17 адрес начала следующей секции (сегмента) рабочей программы можт быть другим (см. организацию памяти программ конкретного типа ОМК).
Рабочая секция программы начинается с выражения ORG 0, которое является указателем для Ассемблера о том, что код, следующий за этим выражением, начинается с нулевого адреса памяти программ. Пример исходного текста рабочей программы для PIC 16F84 приведен ниже.
; ЗАГОЛОВОК ПРОГРАММЫ
TITLE "ПРИМЕР ПРОГРАММЫ ДЛЯ PIC16F84"
LIST P=16F84 ;ОПРЕДЕЛИТЬ ПРОЦЕССОР
RADIX DEC ;ОПРЕДЕЛИТЬ СИСТЕМУ СЧИСЛЕНИЯ
;ПО УМОЛЧАНИЮ - ДЕСЯТИЧНАЯ
#include <P16F84.INC> ;ВКЛЮЧИТЬ ФАЙЛ СПЕЦИФИКАЦИЙ ПРОЦЕССОРА
; ЗАДАТЬ СЛОВО КОНФИГУРАЦИИ
__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC
;****************************************************
; ЗАДАТЬ КОНСТАНТЫ
;****************************************************
; 76543210 БИТЫ
INITA EQU B'11111111' ;ОПРЕДЕЛИТЬ НАСТРОЙКУ
;ПОРТА A НА ВВОД
INITB EQU B'00000000' ;ОПРЕДЕЛИТЬ НАСТРОЙКУ
;ПОРТА В НА ВЫВОД
CONST0 EQU 0 ;КОНСТАНТА 0
CONST1 EQU 255 ;КОНСТАНТА 1
; ОПРЕДЕЛИТЬ БИТЫ РЕГИСТРА СОСТОЯНИЯ - STATUS
#DEFINE _Z STATUS,Z
#DEFINE _C STATUS,C
#DEFINE _DC STATUS,DC
#define _PD STATUS,3
#define _TO STATUS,4
#define _RP0 STATUS,5
#define _PA0 STATUS,5
#define _RP1 STATUS,6
#define _PA1 STATUS,6
#define _IRP STATUS,7
#define _PA2 STATUS,7
;***** ОПРЕДЕЛИТЬ ПЕРЕМЕННЫЕ
Cblock 0x10
Count1
Count2
Count3
endc
;****************************************************
; СЕКЦИЯ КОДА ПРОГРАММЫ
;****************************************************
ORG 0x000 ;НАЧАЛЬНЫЙ АДРЕС ПРОГРАММНОЙ
;ПАМЯТИ
GOTO START ;ПЕРЕДАТЬ УПРАВЛЕНИЕ НА
;НАЧАЛО ПРОГРАММЫ
ORG 0x004 ; ПОДПР. ОБРАБОТКИ ПРЕРЫВАНИЯ
; НАЧИНАЯ С АДРЕСА 004 МОЖЕТ БЫТЬ РАЗМЕЩЕНА
; ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ
retfie ; ВЫХОД ИЗ ПОДПРОГРАММ
; ОБРАБОТКИ ПРЕРЫВАНИЯ
;****************************************************
; СОБСТВЕННО ПРОГРАММА
;****************************************************
START:
BSF STATUS,RP0 ;УСТАНОВИТЬ 1-ю СТАНИЦУ ОЗУ
MOVLW INITA
MOVWF TRISA ;PORT A НАСТРОИТЬ НА ВВОД
MOVLW INITB
MOVWF TRISB ;PORT B НАСТРОИТЬ НА ВЫВОД
BCF STATUS,RP0 ;УСТАНОВИТЬ 0-ю СТАНИЦУ ОЗУ
ST1:
MOVLW CONST0 ; W := CONST0
BTFSC PORTA,0 ; ЕСЛИ PORTA,0 = 0,
; ПРОПУСТИТЬ СЛЕДУЮЩУЮ
; КОМАНДУ
MOVLW CONST1 ; W := CONST1
MOVWF PORTB ;ВЫДАТЬ W В ПОРТ В
MOVWF Count1 ;ЗАПИСАТЬ W В РЕГИСТР Count1
MOVF PORTA,W ;СОДЕРЖИМОЕ PORTA ПЕРЕСЛАТЬ В W
MOVWF Count2 ; ЗАПИСАТЬ W В РЕГИСТР Count2
GOTO ST1 ;ЗАВЕРШИТЬ ЦИКЛ
END ; ДИРЕКТИВА'end of program'
На приведенном примере объясним основные особенности и правила написания исходных текстов программ для ОМК PIC на языке Ассемблера. Для этого будем анализировать строку за строкой приведенной программы. После ассемблирования исходного текста, кроме исполняемого кода, Ассемблером создается также листинг, в котором отображаются все произведенные преобразования. Листингом удобно пользоваться при отладке и анализе программы.
Все строки, которые начинаются со знака ";", воспринимаются Ассемблером как комментарии.
Директивой TITLE Ассемблеру задан текст"ПРИМЕР ПРОГРАММЫ ДЛЯ PIC16F84", который будет повторен во второй строке на каждой странице листинга.
Следующая директива LIST P=16F84 задает Ассемблеру тип микроконтроллера, для которого производится ассемблирование исходного текста.
Директива RADIX DEC задает Ассемблеру использование по умолчанию десятичной системы счисления при задании числовых величин.
Директива #include <P16F84.INC> подключает файл спецификаций (определений) стандартных идентификаторов для микроконтроллера типаPIC16F84.
Директива __CONFIG _CP_OFF & _WDT_OFF & _HS_OSC задает ассемблеру биты слва конфигурации.
Следующие далее строки с директивой EQUприсваивают идентификаторамINITA,INITB,CONST0 иCONST1 числовые значения. Во всех местах программы, где используются эти идентификаторы, при ассемблировании будут подставлены заданные числовые значения.
Строки с директивой #DEFINEопределяют идентификаторы замены. Например, директива#DEFINE _Z STATUS,Zопределяет замену идентификатора бита состоянияSTATUS,Zидентификатором_Z, и программист в программе вместо идентификатораSTATUS,Zможет вписывать более короткий и удобный идентификатор_Z.
Далее директивы CBLOCKиENDCопределяют список адресных констант Count1, Count2, Count3, которые соответствуют адресам ОЗУ:Count1 –0x10, Count2 – 0x11, Count3 - 0x12. Таким образом, во всех местах, где в программе встречается идентификаторCount1, Ассемблер подставляет вместо него адрес0x10, а вместоCount2– адрес0x11 и т.д.
Директива ORG 0x000задает начальный адрес размещения программных кодов.
Первая инструкция, выполняемая процессором, это команда GOTO START, которая передаст управление на адрес, соответствующий меткеSTARTи дальнейшая работа продолжится с этого адреса.
Блок команд, расположенных начиная с метки START, до метки ST1 выполняет настройку портов: порта А – на ввод информации, а порта В – на вывод. Для этого с помощью команды BSF STATUS,RP0 бит STATUS,RP0 регистра состояния устанавливается в единичное состояние (для того, чтобы можно было обратиться к первому банку данных). Затем последовательным выполнением команд MOVLW INITA (регистру W присваивается значение INITA) и MOVWF TRISA (регистру TRISA присваивается значение W) регистр TRISA устанавливается в состояние, описываемое величиной INITA. Состояние регистра TRISA после этого станет равным в двоичном представлении "11111" с учетом того, что регистры PORTA и соответствующий ему регистр настройки TRISA – пятиразрядные (см. структурную схему микроконтроллера). Аналогично – установкой регистра TRISB в состояние "00000000" производится настройка порта В на вывод двоичной информации.
Команда BCF STATUS,RP0устанавливает битSTATUS,RP0регистра состояния в нулевое состояние. Нулевое состояние битаSTATUS,RP0регистра состояния считается исходным потому, что ОЗУ пользователя микроконтроллераPIC16F84 размещается в нулевом банке данных, начиная с адреса0x0C.
Команда MOVLW CONST0установит регистрWв состояние, равное величинеCONST0(в программе она определена равной "0").
Если разряд 0 порта А равен нулю, то следующая команда пропускается (это проверяется и исполняется командой BTFSC PORTA,0). Если разряд 0 порта А равен единице, то выполняется следующая команда –MOVLW CONST1,которая заменяет содержимое регистраWвеличинойCONST1.
Следующая выполняемая команда MOVWF PORTB выведет содержимое регистра W в порт В. Будет выведено значение CONST0 или CONST1 в соответствии с тем, введен 0 в нулевом разряде порта А или 1.
Команда MOVWF Count1запомнит значение выведенной величины в ячейкеCount1,а следующие две командыMOVF PORTA,WиMOVWF Count2запомнят значение порта А в ячейкеCount2.
Команда GOTO ST1завершает цикл опроса – анализа – вывода передачей управления на начало этого цикла.