Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микропроцессорное управление устройствами преобразования электрической энергии и передачи электротехнической информации. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
В качестве примера будем использовать один из самых распространенных
PIC-контроллеров PIC16F84A (рис. 3.4).
Он является как бы «праматерью» более сложных МК, содержит мини­мальный «набор» модулей и как нельзя лучше подходит для первичного озна­комления.
Рис. 3.4. Расположение выводов PIC16F84A
Остановить (в буквальном смысле этого слова) исполнение программы
можно только прекратив работу тактового генератора.
Это происходит при переходе в режим пониженного энергопотребления
(SLEEP), который используется в работе достаточно специфических устройств.
Например, пультов дистанционного управления и т.д.
Регистры оперативной памяти
В PIC-контроллерах существуют две группы регистров:
регистры общего назначения (GRP); регистры специального назначения (SFR).
Все регистры, как общего, так и специального назначения, по своему «объ-
ему», являются однобайтными.
Регистры общего назначения — это «вотчина» программиста. Регистры общего назначения используются как однобайтная (или много-
байтная, если для этой цели используются несколько регистров) оперативная память. В основном, они используются для того, чтобы сохранить какие-либо числа с целью использования их в дальнейшем.
21
Откройте «Раздаточный материал РМ № 1».
Бит 7
IRP
Бит выбора групп банков. 0 — банк 0,1; 1 — банк 2,3 (100h ― 1FFh).
Бит 6
RP1
Бит выбора банка.
Бит 5
RPO
Бит выбора банка.
Бит 4
−TO
Флаг переполнения сторожевого таймера WDT: 1 — после сброса по включению питания (POR) или выполнения команд CLRWDT, SLEEP.
Бит 3
−PD
Флаг включения питания: 1 — после сброса по включению питания (POR) или выполнения команды CLRWDT.
Бит 2
Z
Флаг нулевого результата: 1 — нулевой результат выполнения операции; 0 — результат выполнения операции, отличный от нуля.
Бит 1
DC
Флаг переноса-заема (работа с младшим полубайтом) (для команд ADDWF, ADDLW, SUBWF, SUBLW): 1 — был перенос из младшего полубайта; 0 — не было переноса из младшего полубайта.
Бит 0
С
Флаг переноса-заема (работа с байтом) (для команд ADDWF,
ADDLW, SUBWF, SUBLW): 1 — был перенос из байта; 0 — не было переноса из байта.
На картинке РМ № 1 Вы видите область оперативной памяти PIC16F84A.
Регистры общего назначения находятся в пустых клеточках. Каждой такой кле­точке соответствует свой адрес. Они пустые (без названий), потому что назва­ния им назначает программист.
При составлении программы в пустые клетки этой таблицы можно зано­сить названия регистров общего назначения. Область оперативной памяти раз­делена на 2 так называемых банка. Сверху расположен самый «ходовой», ну­левой банк, в котором программы работают большую часть своего времени.
Таким образом, 68 регистров общего назначения в области оперативной памяти имеют адреса: банк 0 ― с 0Ch по 4Fh, банк 1 ― c 8Ch по CFh.
Регистры специального назначения (SFR)
Нумерация битов в байте происходит не слева направо, а справа налево. Это означает то, что бит младшего разряда (бит с номером ноль) ― крайний справа, седьмой бит ― самый старший.
Регистр STATUS
22
Флаги
Бит 7
GIE
Глобальное разрешение прерываний.
Бит 6
ЕЕIE
Разрешение прерываний по окончанию записи в EEPROM:
1 — прерывание разрешено; 0 — прерывание запрещено.
Бит5
TOIE
Разрешение прерывания по переполнению TMR0: 1 — прерывание разрешено; 0 — прерывание запрещено.
Бит 4
INTE
Разрешение прерывания по входу RB0/INT: 1 — прерывание разрешено; 0 — прерывание запрещено.
Бит 3
RBIE
Разрешение прерывания по изменению уровней сигналов на выводах RB4...RB7:
1 — прерывание разрешено; 0 — прерывание запрещено.
Бит 2
TOIF
Флаги к 5, 4, 3 прерываниям соответственно: 1 — произошло прерывание; 0 — не было прерывания.
Бит 1
INTF
Бит 0
RBIF
Самый часто применяемый из них — флаг нулевого результата (2-й бит с названием Z). Он показывает, является ли результатом проведенной операции нулевой результат (флаг поднят, что соответствует установке 2-го бита регистра STATUS в 1), или этот результат ненулевой (флаг опущен: во 2-м бите — 0).
Флаги переноса-заѐма С (0-й бит регистра STATUS) и десятичного перено­са-заѐма DC (1-й бит) показывают, было ли переполнение байта или младшего полубайта.
Например, наибольшее число в пределах байта (8 разрядов) ― > 255.
Если, например, складываются числа 200 и 100, то происходит переполне­ние, и флаг С устанавливается в 1 (поднимается).
Кроме того, при выполнении команд сдвига флаг С загружается старшим или младшим битом байта сдвигаемого регистра (в зависимости от направле­ния сдвига).
Регистр INTCON
23
Регистры PORTA и PORTB
Регистр PORTA
RA4/TOCKI
RA3
RA2
RA1
RA0
7 6 5 4 3 2 1
0
Регистр PORTA
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0
7 6 5 4 3 2 1
0
Регистр PORTA имеет всего пять бит. Бит 4 может использоваться как вход счетчика, Бит 0 порта PORTB тоже имеет две функции, он может исполь­зоваться как вход для внешнего прерывания.
Регистры TRISA и TRISB
Эти регистры имеют 5 и 8 рабочих бита соответственно (по количеству вы­водов портов А и В). Их адреса ― 85h и 86h (см. область оперативной памяти).
Биты регистров TRISA и TRISB управляют направлением работы выводов портов А и В. Если какой-нибудь из этих битов устанавливается в 1, то соот­ветствующий вывод порта работает «на вход», то есть принимает данные с выхода внешнего устройства, подключенного к этому выводу.
Если бит TRISA/TRISB устанавливается в 0, то соответствующий вывод порта уже сам является источником сигнала для подключенного к этому выво­ду входа внешнего устройства, и программа может управлять этим внешним устройством (рис. 3.5).
Так как регистры TRISA и TRISB находятся в 1-м банке, то при работе с ними необходимо перейти в 1-й банк.
Рис. 3.5. Определение направления работы портов
24
Регистр W
И наконец, самый часто используемый регистр ― регистр W, или его еще
называют аккумулятором.
Это тот же регистр общего назначения, только с определенным названием (в том смысле, что оно заранее определено так же, как и названия регистров специального назначения). Его адрес, в отличие от регистра общего назначе­ния, знать не обязательно и «прописывать» его адрес не нужно.
3.3. СИСТЕМА КОМАНД PIC16F84A
Таблица команд ассемблера для PIC-микроконтроллеров находится в
«РМ № 4». 
Команды разделены на 3 группы:
1) байт-ориентированные команды, то есть команды, производящие дейст-
вия с байтами;
2) бит-ориентированные команды, то есть команды, производящие дейст-
вия с битами;
3) команды управления, то есть команды, осуществляющие переходы и воз- враты, а также команды сброса сторожевого таймера WDT и перехода в спя­щий режим SLEEP.
Итого: 35 команд. Сначала приведем информацию по таблице команд. В первой колонке располагается название команды, а в рамке под этим на-
званием — краткое содержание команды.
Латинские буквы в конце команды обозначают:
f — название регистра (в общем виде), к которому эта команда обраща-
ется, и с содержимым которого будет производиться действие;
d — указатель места сохранения результата при операциях с байтами.
Если d = 0, то результат исполнения команды сохраняется в регистре W (в ак­кумуляторе). Если d = 1, то результат исполнения команды сохраняется в реги­стре f, то есть в том же самом регистре, с содержимым которого производится действие.
b — номер бита в регистре, с которым производится действие (для бит-
ориентированных команд).
k — константа, то есть некое число в пределах байта, которое задается
программистом.
Обратите внимание на то, что большая часть команд исполняется за 1 ма-
шинный цикл. Имеются также команды, выполняющиеся за 2 машинных цик­ла (в основном это команды управления).
25
Сразу отметим следующую особенность: значительная часть команд со-
стоит из 5 букв, причем корень слова команды, характеризующий ее суть, со­стоит, в большинстве случаев, из 3 букв, а последние 2 буквы показывают, от­куда и куда копируется (переписывается) число или с какими регистрами нуж­но произвести определяемое командой действие.
Например, команду ADDWF можно условно разделить на 2 части: корень
ADD, который обозначает операцию сложения, и часть WF, где первая буква обозначает регистр W (аккумулятор), а вторая — регистр F, то есть регистр, к которому обращается команда.
Следовательно, из самого названия команды становится понятным, что
складывается содержимое регистров W и F.
В качестве этого условного регистра F используются регистры общего или
специального назначения.
Рассмотрим команду ADDLW: ADD — операция сложения, L — признак того, что в ней участвует константа, W — признак того, что в ней участвует регистр-аккумулятор.
Например: ADDLW K.
Это означает то, что складывается содержимое регистра W и некая кон­станта, заданная программистом. Если она равна, например, числу 3, то это бу­дет выглядеть так: ADDLW 3.
Так как константа не является регистром, то место сохранения результата операции однозначно ― регистр W.
Аналогично: AND ― операция побитного «И» содержимого двух регист­ров, CLR ― сброс в ноль содержимого регистра, СОМ ― инверсия всех битов регистра, DEC ― декремент содержимого регистра (минус 1), INC ― инкре­мент содержимого регистра (плюс 1), IOR ― побитное «ИЛИ» содержимого двух регистров, NOP ― «пустой» машинный цикл (ничего не происходит), RLF ― циклический сдвиг содержимого регистра влево, RRF ― циклический сдвиг содержимого регистра вправо, SUB ― операция вычитания, XOR ― по­битное «исключающее ИЛИ» содержимого двух регистров, BTF ― команды ветвления по значению выбранного в регистре бита, RET ― возврат с за­грузкой константы в W, SWAP ― поменять местами полубайты регистра, CALL ― переход по условию (с задействованием стека), GOTO ― переход без условия, SLEEP ― уход в режим пониженного энергопотребления, RE- TURN ― возврат из подпрограммы, RETFIE ― возврат из подпрограммы об- работки прерываний.
26
3.4. ИНИЦИАЛИЗАЦИЯ
13
12
11
10 9 8 7 6 5 4 3 2 1 0
Не задействованы (набираем 1)
CP
−PWRTE
WDTE
FOSC1
FOSC0
Бит 4
СР
Бит защиты:
1 — защита выключена; 0 — защита включена.
Бит 3
−PWRTE
Бит разрешения работы таймера включения питания PWRT:
1 — выдержки производиться не будет; 0 — будет производиться выдержка при включении питания.
Бит 2
WDTE
Бит разрешения работы сторожевого таймера WDT: 1 — WDT включен; 0 — WDT выключен.
Бит 1, 0
FOSC1 FOSC0
Биты выбора типа генератора.
Выше текста программы, которая будет исполняться, расположена так на­зываемая «шапка» программы — инициализация.
Она нужна для того, чтобы можно было создать «прошивку» (HEX-файл). В «шапке» программы:
1. Указывается тип МК (в данном случае, PIC16F84A не с первой позиции)
list p = 16f84.
2. Биты конфигурации расположены в специальном «секторе» энергонеза-
висимой памяти микроконтроллера.
Значения битов конфигурации (не с первой позиции)
Для наших задач выбираем XT — стандартный кварцевый генератор с частотой 4 МГц (код 01). Биты конфигурации задаются с помощью директивы
CONFIG.
Набираем код: 0000 0011 1111 1111 0001.
В данном PIC-контроллере нужно просто соблюдать правило — 03F, а да­лее значимую часть. В тексте это будет выглядеть так: __CONFIG 03FF1h.
Перед словом CONFIG набираем два нижних подчеркивания!
3. В «шапке» программы «прописываются» названия и адреса регистров специального назначения (см. область оперативной памяти), которые задейст­вуются в работе программы. Далее в «шапке» программы «прописываются» адреса регистров общего назначения с помощью директивы EGU. С ними нуж­но определиться.
27
4. В конце «шапки» располагается директива, определяющая, с какого именно адреса памяти программ (PC) начать исполнение программы (обычно,
org 0).
3.5. АССЕМБЛЕР PIC-МИКРОКОНТРОЛЛЕРОВ
Программа-«переводчик» на машинный язык называется компилятор. Компилятор, работающий в реальном масштабе времени (на каждом ша-
ге выполнения программы) ― интерпретатор. Компилятор с языка ассемб­лера ― ассемблер.
Для ознакомления с ассемблером PIC откроем материал из ТУ (скачивает-
ся студентами самостоятельно).
3.6. СИНТАКСИЧЕСКИЕ ПРАВИЛА НАПИСАНИЯ ПРОГРАММЫ
Синтаксические правила написания программ можно свести к следующим
положениям:
1. Все, что находится правее точки с запятой (;), компилятор «не видит».
2. Активная часть программы и еѐ «шапка» разделены на 3 столбца. Левые буквы содержимого 1-го (левого) столбца должны занимать крайние левые по­зиции строк, на которых они находятся.
3.Последние символы содержимого столбца не должны «наезжать» на пер­вые символы соседнего справа столбца. Между ними должен быть хотя бы один пробел.
4. Завершается программа директивой END.
5. Директивы ассемблера END, EQU, INCLUDE, __CONFIG, ORG в отли­чие от команд, не включаются в выходной код (в содержимое HEX-файла).
Примеры программирования простых
программ для PIC-контроллеров
Задание 1. Ввести данные из порта А, вывести в порт В. List p = 16f84 __config 03FF1H Status equ 03h TrisB equ 06h PortB equ 06h TrisA equ 05h
28
PortA equ 05h Org 0 goto Start Start bsf Status,5 movlw .0 movwf TrisB movlw 0x1F movwf TrisA bcf Status,5 Pusk movf PortA,0 movwf PortB Zikl goto Zikl end
Байт-ориентированные команды ветвления: DECFSZ, INCFSZ
В подавляющем своем большинстве, эти команды обращаются к регистрам
общего назначения
.
Их алгоритмы представлены на рис. 3.6, 3.7.
Рис. 3.6. Алгоритм команды DECFSZ F,d
Самый распространенный случай: рабочая точка программы должна
«прокрутиться» по внутреннему циклу, например, 8 раз, чтобы после этого выйти на полный цикл программы.
29
MOVLW 08 MOVWF REG 52 DECFSZ REG,1 GOTO 52
Рис. 3.7. Алгоритм команды INCFSZ F,d
Так чаще всего организуют нужные задержки, зная, что цикл 1 команды для
нашего PIC16F84 составляет 1 мкс.
Зная длительность машинного цикла, можно точно просчитать время за­держки. Этот пример, конечно, простейший, так как для относительно больших задержек, при длительности машинного цикла = 1мкс (кварц 4 МГц), одного регистра недостаточно (необходимо несколько регистров с последовательным их декрементом).
Бит-ориентированные команды
Рассмотрим операции с одним битом. Имеются в виду команды BCF и BSF.
Вторая буква в этих командах является признаком операций с битом:
С — установить бит в 0; S — установить бит в 1; F — признак регистра.
Две команды ветвления BTFSC и BTFSS ориентированы на операции с
битами регистров.
При применении этих команд никаких действий с байтами не производится.
Критерием ветвления является значение выбранного бита (0 или 1).
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]