close

Вход

Забыли?

вход по аккаунту

?

ivanov prohorov

код для вставкиСкачать
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
САНКТПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
ПРИМЕНЕНИЕ МИКРОКОНТРОЛЛЕРОВ
В СИСТЕМАХ УПРАВЛЕНИЯ И КОНТРОЛЯ
Методические указания
к выполнению лабораторных работ
СанктПетербург
2007
Составители: кандидат технических наук, доцент Н. М. Иванов;
кандидат технических наук, доцент В. М. Прохоров
Рецензент кандидат технических наук, доцент Г. С. Бритов
Методические указания предназначены для выполнения лабораторных
работ по дисциплине «Проектирование центральных и периферийных уст
ройств» студентами дневного отделения специальности 220500 «Проекти
рование и технология электронновычислительных средств» и других смеж
ных специальностей.
Подготовлены кафедрой вычислительных систем и сетей и рекомендо
ваны к изданию редакционноиздательским советом СанктПетербургского
государственного университета аэрокосмического приборостроения.
Редактор А. Г. Ларионова
Верстальщик С. В. Барашкова
Сдано в набор 02.02.07. Подписано в печать 13.03.07. Формат 60 × 84 1/16.
Бумага офсетная. Печать офсетная. Усл. печ. л. 3,0. Уч.изд. л. 3,0.
Тираж 150 экз. Заказ №
Редакционноиздательский центр ГУАП
190000, СанктПетербург, Б. Морская ул., 67
© ГУАП, 2007
2
Лабораторная работа № 1
СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРА PIC16С7Х
Цель работы: изучение системы команд микроконтроллера (МК)
PIC16С7Х; получение навыков программирования МК на языке Ас
семблер.
Краткие теоретические сведения и методические указания
PIC16CXX – это 8разрядные МК с RISCархитектурой, произво
димые фирмой Microchiр Technology. Это семейство МК отличается
низкой ценой, низким энергопотреблением и высокой скоростью.
Микроконтроллеры имеют встроенное ЭППЗУ программы, ОЗУ дан
ных и выпускаются в 18 и 28 выводных корпусах.
PIC OTP – это однократно программируемые пользователем кон
троллеры, предназначенные для полностью протестированных и за
конченных изделий, в которых не будет происходить дальнейших
изменений кода. Эти контроллеры выпускаются в дешевых пласти
ковых корпусах с предварительно заданным типом внешнего генера
тора – кварцевым или RC. Для отладки программ и макетирования
выпускается вариант контроллеров с ультрафиолетовым стиранием.
Эти контроллеры допускают большое число циклов записи/стира
ния и имеют очень малое время стирания (обычно 1–2 мин). Однако
цена таких контроллеров существенно выше, чем однократно про
граммируемых, поэтому их невыгодно устанавливать в серийную про
дукцию.
Для изделий, программа которых может меняться либо содержит
какиелибо переменные части, таблицы, параметры калибровки,
ключи и т. д., выпускается электрически стираемый и перепрограм
мируемый контроллер PIC16F84. Он также содержит электрически
перепрограммируемое ПЗУ даных.
Основным назначением МК PIC16/17, как следует из аббревиа
туры PIC (Periрheral Interface Controller), является выполнение ин
3
терфейсных функций. Этим объясняются особенности их архитек
туры:
– RISCсистема команд, характеризующаяся малым набором од
ноадресных инструкций (33, 35 или 55), каждая из которых имеет
длину в одно слово (12, 14 или 16 бит) и большинство выполняется
за один машинный цикл. В системе команд отсутствуют сложные
арифметические команды (умножение, деление), предельно сокращен
набор условных переходов;
– высокая скорость выполнения команд: при тактовой частоте
20 МГц время машинного цикла составляет 200 нс (быстродействие
равно 5 млн операций/с);
– наличие мощных драйверов (до 24 мА) на линиях портов ввода/
вывода;
– низкая потребляемая мощность;
– ориентация на ценовую нишу предельно низкой стоимости, оп
ределяющая использование дешевых корпусов с малым количеством
выводов (8, 14, 18, 28), отказ от внешних шин адреса и данных (кро
ме PIC17C4X), использование упрощенного механизма прерываний
и аппаратного (программно недоступного) стека.
Анализ архитектуры МК PIC с точки зрения их программирова
ния и отладки систем позволяет сделать следующие выводы.
RISCсистема команд обеспечивает высокую скорость выполнения
инструкций, но вызывает затруднения и снижение производитель
ности при программировании нетривиальных алгоритмов. Посколь
ку все инструкции в системе команд являются одноадресными, заг
рузка константы в любой из регистров требует двух инструкций. Вна
чале нужно загрузить константу в рабочий регистр W, а затем пере
слать его содержимое в нужную ячейку памяти данных:
movw 12h
movwf REG
Аналогично, все бинарные арифметикологические операции при
ходится выполнять с привлечением рабочего регистра W.
Высокое быстродействие в значительной степени достигается за
счет использования конвейера команд.
Микроконтроллеры семейства PIC имеют очень эффективную сис
тему команд, состоящую всего из 35 инструкций. Все инструкции
выполняются за один цикл, за исключением условных переходов и ко
манд, изменяющих программный счетчик, которые выполняются за
2 цикла. Один цикл выполнения инструкции состоит из 4 периодов
тактовой частоты. Таким образом, при частоте 4 МГц время выпол
4
нения инструкции составляет 1 мкс. Каждая инструкция состоит из
14 бит, которые разделяются на 2 поля: код операции и операнд (воз
можна манипуляция с регистрами, ячейками памяти и непосредствен
ными данными).
Высокая скорость выполнения команд в PIC достигается за счет
использования двухшинной гарвардской архитектуры вместо тра
диционной одношинной фоннеймановской. Гарвардская архитекту
ра основывается на наборе регистров с разделенными шинами и ад
ресным пространством для команд и для данных. Hабор регистров
означает, что все программные объекты, такие как порты ввода/вы
вода, ячейки памяти и таймер, представляют собой физически реа
лизованные аппаратные регистры.
Память данных (ОЗУ) для PIC16CXX имеет разрядность 8 бит,
память программ (ЭППЗУ) имеет разрядность 12 бит для PIC16C5X
и 14 бит для PIC16C7X. Использование гарвардской архитектуры
позволяет достичь высокой скорости выполнения битовых, байто
вых и регистровых операций. Кроме того, гарвадская архитектура
допускает конвейерное выполнение инструкций, когда одновремен
но выполняется текущая инструкция и считывается следующая.
В традиционной же фоннеймановской архитектуре команды и дан
ные передаются последовательно во времени через одну разделяемую
или мультиплексируемую шину, тем самым снижая быстродейст
вие МК.
Набор команд PIC
Перейдем к описанию всего набора команд МК семейства PIC. Пред
варительно cделаем некоторые замечания.
Вопервых, синтаксис написания команды предусматривает ука
зание двух полей: мнемоническое обозначение кода операции и опе
ранд, для которого используется обобщенное обозначение в виде сим
вола f. Это значит, что в зависимости от способа адресации в поле
операнда может находиться:
1) адрес операнда (прямая адресация); очень часто вместо адреса
указывается символическое имя операнда, однако в этом случае с по
мощью псевдокоманды equ этому имени ставится в соответствие ад
рес свободной ячейки памяти, например: Cnt equ 20h;
2) имя регистра INDF (косвенная адресация); в этом случае адрес
операнда находится в специальном регистре косвенной адресации FSR;
3) операнд (непосредственная адресация).
5
Вовторых, в командах, в которых предусмотрена операция с дву
мя операндами, первый операнд находится в ячейке памяти, указан
ной с помощью символа f, второй операнд всегда содержится в рабо
чем регистре W.
Втретьих, в ряде команд кроме результата формируются призна
ки результата, которые записываются в специальный регистр
STATUS. Признак С (CARRY) устанавливается в 1 при возникнове
нии переноса из старшего (знакового) разряда при сложении и при
отсутствии заема при вычитании. Признак DC (DIGIT CARRY) уста
навливается в 1 при возникновении переноса из младшей тетрады
в старшую при сложении. Признак Z (ZERO) устанавливается в 1,
если результат операции равен 0.
Наконец, в ряде команд после символа f через запятую находится
символ d, называемый битом направления. Он указывает место, куда
будет помещен результат операции, выполненной в команде: если
d = 0 (или W), результат записывается в рабочий регистр W (без из
менения содержимого ячейки памяти), если d = 1 (или f), результат
записывается в ячейку памяти.
NOP
Не выполняется никаких действий. Эта инструкция обычно ис
пользуется в циклах временной задержки или для точной настройки
времени выполнения определенного участка программы.
CLRW
Эта команда очищает рабочий регистр W.
CLRF f
CLRF делает для любого регистра то же, что CLRW делает для
рабочего регистра W.
SUBWF f, d
Вычесть содержимое рабочего регистра W из содержимого регист
ра f. Эта команда устанавливает признаки CARRY, DIGIT CARRY
и ZERO в регистре STATUS. Символ d (бит направления) после запя
той указывает адрес, куда будет помещен результат выполнения ко
манды. Если d = 0, то результат помещается в рабочий регистр W,
а если d = 1, то результат записывается в указанный в команде ре
гистр f. Допускается вместо значений 0 или 1 символа d указать w
и f соответственно.
ADDWF f, d
Сложить содержимое рабочего регистра W и регистра f. Эта коман
да устанавливает признаки CARRY, DIGIT CARRY и ZERO в регист
ре STATUS. Символ d после запятой означает адрес, куда будет поме
щен результат выполнения команды (см. предыдущую команду).
6
SUBLW k
ADDLW k
Эти две команды работают совершенно аналогично вышеописан
ным, за тем исключением, что операция производится между рабо
чим регистром W и байтовой константой, заданной в команде. Ко
манда SUBLW вычитает содержимое рабочего регистра W из констан
ты k, а команда ADDLW добавляет содержимое рабочего регистра W
к константе k. Эти команды также устанавливают признаки CARRY,
DIGIT CARRY и ZERO. Результат выполнения команды помещается
в рабочий регистр W.
DECF f, d
INCF f, d
Команда DECF уменьшает содержимое заданного регистра на 1,
а INCF увеличивает содержимое заданного регистра на 1. Результат
может быть помещен обратно в заданный регистр (при d = 1) либо
в рабочий регистр W (при d = 0). В результате выполнения этих ко
манд может установиться признак ZERO в регистре STATUS.
IORWF f, d
ANDWF f, d
XORWF f, d
Эти три команды выполняют логические действия ИЛИ, И и
ИСКЛЮЧАЮЩЕЕ ИЛИ. Операция логического сложения ИЛИ чаще
всего используется для установки отдельных битов в регистрах; опе
рация логического умножения И используется для сбрасывания би
тов. Когда над одинаковыми битами выполняется операция ИСКЛЮ
ЧАЮЩЕЕ ИЛИ, результат равен 0. Поэтому операция ИСКЛЮЧА
ЮЩЕЕ ИЛИ часто используется для сравнения содержимого опе
рандов.
IORLW k
ANDLW k
XORLW k
Эти три команды выполняют те же действия, что и их выше
описанные аналоги, за тем исключением, что операция произво
дится между рабочим регистром W и константой, заданной в коман
де. Результат выполнения команды помещается в рабочий реги
стр W.
MOVF f, d
Эта команда в основном используется для пересылки содержимого
регистра в рабочий регистр W (d = 0). Если же установить d = 1, то эта
команда загрузит регистр сам в себя, но при этом бит ZERO в регистре
STATUS установится в соответствии с содержимым регистра.
7
COMF f, d
Эта команда инвертирует содержимое заданного регистра. При
d = 0 результат заносится в рабочий регистр W (содержимое заданно
го регистра сохраняется прежним), а при d = 1 результат замещает
прежнее содержимое заданного регистра.
DECFSZ f, d
INCFSZ f, d
При d = 1 команда DECFSZ уменьшает на единицу, а INCFZ уве
личивает на единицу содержимое заданного регистра и пропускает
следующую команду, если содержимое регистра стало равным нулю.
При d = 0 результат записывается в регистр W и следующая команда
пропускается, если содержимое рабочего регистра W стало равным
нулю. Эти команды используются для формирования временных за
держек, условий выхода из цикла и т. д.
SWAPF f, d
Эта команда меняет местами полубайты в заданном регистре. Как
и для других команд, при d = 0 результат записывается в рабочий
регистр W, а при d = 1 заносится в регистр, замещая прежнее его со
держимое.
RRF f, d
RLF f, d
C
C
F
F
C
C
В Ассемблере PIC имеется две команды сдвига – сдвиг вправо через
признак C любого регистра f (RRF) и сдвиг влево через признак C лю
бого регистра f (RLF). Как и для других команд, при d = 0 результат
сдвига записывается в регистр W, а при d = 1 остается в регистре f.
Во всех случаях бит, выдвигаемый из 8битного регистра f, записы
вается как признак C в регистр STATUS и формирует тем самым значе
ние признака C (CARRY), а на место освобождающегося при сдвиге раз
ряда регистра f записывается значение признака C из регистра STATUS,
которое было сформировано к моменту выполнения данной команды.
При сдвиге влево (RLF) значение признака C записывается в младший
бит регистра, а при сдвиге вправо (RRF) – в старший бит регистра.
Инструкции сдвига используются для выполнения операций ум
ножения и деления, для последовательной передачи данных и для
других целей.
BCF f, b
BSF f, b
Команды очистки бита BCF и установки бита BSF используются
для работы с отдельными битами в регистрах. Параметр b означает
номер бита, с которым производится операция, и может принимать
значения от 0 до 7.
8
BTFSC f, b
BTFSS f, b
Команды условных переходов BTFSC и BTFSS проверяют состоя
ние заданного бита в любом регистре и в зависимости от результата
пропускают или нет следующую команду. Команда BTFSC пропуска
ет команду, если заданный бит сброшен, а команда BTFSS – если
установлен.
CALL k
RETURN
Эти две команды предназначены для работы с подпрограммами.
Команда CALL используется для перехода на подпрограмму по адресу,
задаваемому в команде, а команда RETURN – для возврата из под
программы. Обе команды выполняются за 2 цикла. Адрес команды,
следующей после команды CALL, запоминается в стеке. Стек недосту
пен для обращения и используется только при вызовах подпрограмм
и возвратах из них. Глубина стека, т. е. число специальных регистров,
входящих в его состав, равна 8. Поэтому из основной программы мож
но сделать не более 8 вложенных вызовов подпрограмм. Последней
командой подпрограммы всегда является команда RETURN, при вы
полнении которой адрес из стека записывается в РС, и таким образом
после возврата из подпрограммы выполнение основной программы
продолжается со следующей после CALL команды. Отметим особо, что
поскольку в большинстве случаев регистр W и регистр STATUS могут
быть использованы в подпрограмме, их содержимое на момент вызова
подпрограммы будет потеряно. Поэтому при вызове подпрограммы их
содержимое нужно сохранить в свободных ячейках памяти, а перед
командой RETURN поместить команды, восстанавливающие их со
держимое на момент вызова подпрограммы.
RETLW k
RETFIE
Существуют еще две команды, предназначенные для возврата из
подпрограмм. Команда RETLW записывает при возврате в рабочий
регистр W константу, заданную в этой команде, а команда RETFIE
используется при возврате из прерывания.
Специальные команды
Осталось упомянуть о двух специальных командах – CLRWDT
и SLEEP.
Команда CLRWDT предназначена для программного сброса сто
рожевого таймера (WDT). Эта команда должна присутствовать в та
9
ких участках программы, чтобы время выполнения программы между
двумя соседними командами CLRWDT не превышало периода сраба
тывания сторожевого таймера, т. е. интервала времени, в течение ко
торого WDT проходит все состояния и возвращается в исходное состо
яние (аппаратный сброс). Программный сброс не влияет на работу си
стемы, возникновение аппаратного сброса указывает на наличие сбоя
в работе системы, вызванного зацикливанием программы. Обработка
прерывания, вызванного аппаратным сбросом, предусматривает дей
ствия, направленные на устранение последствий от сбоя.
Команда SLEEP предназначена для перевода процессора в режим
пониженного энергопотребления. После выполнения этой команды
тактовый генератор процессора выключается, и обратно в рабочий
режим процессор можно перевести либо по входу сброса, либо по сра
батыванию сторожевого таймера, либо по прерыванию.
Система команд приведена в табл. П1.1. Большинство команд
выполняется за 1 цикл (4 такта, 200 нс при F = 20 МГц). Команды
байтовой обработки включают обычный набор арифметических, ло
гических и сдвиговых операций. При наличии двух операндов один
из них всегда находится в аккумуляторе W.
Для организации циклов и условных переходов в программе ис
пользуются команды пропуска DECFSZ, INCFSZ, BTFSC, BTFSS,
которые в случае выполнения заданного условия пропускают следу
ющую команду – увеличивают счетчик команд PC сразу на 2.
При переходах по команде GOTO 11битовый адрес перехода из кода
команды загружается в разряды PC.10–0, а два старших разряда бе
рутся из 5битового регистра PCLATH (PC.12–11 = PCLATH.4–3),
т. е. без переустановки PCLATH переход возможен в пределах 2 кслов.
Аналогично формируется адрес перехода командой CALL, однако она
предварительно спасает в стеке содержимое PC. Аппаратный стек
глубиной 8 слов пользователю недоступен, загрузка PC из стека про
изводится командами RETURN, RETFIE, RETLW, причем последняя
команда перед возвратом загружает в W константу и используется
для организации таблиц данных в памяти программ. Формирование
признаков отмечено в последней графе табл. П1.1, сами признаки
фиксируются в младших разрядах регистра STATUS (табл. П2.3).
При записи программ на Ассемблере имя команды можно указы
вать строчными или прописными буквами, в имени переменных эти
буквы имеют различные значения. Целые числа можно задавать
в двоичном, десятичном или шестнадцатиричном формате в следую
щей форме:
MOVLW
b’10100110' ; двоичное число
10
MOVLW
d’166'
; десятичное число
MOVLFSRW
0A6
; шестнадцатиричное число
Далее в основном используется шестнадцатиричная форма пред
ставления чисел.
В обычном тексте и поле комментария мы будем использовать за
пись типа A6, однако на Ассемблере следует записывать 0A6, так как
шестнадцатиричное число должно начинаться с цифры.
Для большинства команд байтовой обработки возможны 2 вари
анта, например:
ADDWF
Adr1,w
; W=W+(Adr1)
ADDWF
Adr1,f
; (Adr1)=W+(Adr1)
В первом случае бит d в коде команды равен 0 и сумма остается
в аккумуляторе W, во втором случае d = 1 и сумма остается в ячейке
с адресом Adr1.
Адрес Adr1 может быть определен в начале программы как 8раз
рядный, однако в код команды транслятор помещает только 7 млад
ших разрядов, а старший разряд адреса выбирается из 5го бита ре
гистра STATUS (это бит регистрового банка RP0). Если Adr1 = 20, то
при RP0 = 0 полный адрес будет 20, а при RP0 = 1 полный адрес со
ставит A0.
Необходимость переключения регистрового банка RP0 создает
определенные неудобства при составлении программ. Их можно из
бежать при использовании косвенной адресации, если предварительно
загрузить 8разрядный адрес в регистр косвенной адресации FSR:
MOVLW
Adr1
; W=Adr1
MOVWF
FSR
; (FSR)=W
ADDWF
INDF,f
; ((FSR))=((FSR))+W
Нулевой адрес INDF в коде команды инициирует выборку полного
8разрядного адреса из регистра FSR, т. е. последняя команда всегда
работает с полным адресом 20. Косвенную адресацию обычно исполь
зуют при необходимости модификации адреса в программе, для чего
достаточно изменить содержимое FSR.
При выполнении работы необходимо для заданного варианта про
граммы указать в поле комментария динамику изменения содержи
мого аккумулятора W и ячеек 20, 21, 22, 23. В качестве примера
рассмотрим следующий вариант программы:
Title “Lab1.asm”
list p=16c74
errorlevel
;
; processor type
1, (305)
11
;
#include “p16c74.inc”
;
Buf1 equ 20
Cnt equ 23
RxBufequ 24
org 0
movlw 0
movwf PCLATH
goto
Start
org
100
Start
call
ConstInit
Priem
; стартовый переход
; программа пользователя
; начальная установка
caLL Receiv
movlw 2
xorwf PORTA,f
movlw 3
movwf Cnt
movlw Buf1
movwf FSR
bsf
movf
STATUS,C
RxBuf,w
; if (RfBuf)=21
; W
Beg1 movwf INDF
; 21
rlf
INDF,w
; 43
addwf INDF,f
; 43
iorwf INDF,f
; 43
incf
FSR,f
decfsz
Cnt,f
End1 goto
Beg1
; W
movwf INDF
; 0C
incf
FSR,f
movf
STATUS,w
movwf INDF
movlw 5
12
20
21
21
64
67
W 20 21 W 20 21 22 23
43 67 43 86 67 CF 86
86 67 43 0C 67 CF 86
86 67 C9 0C 67 CF 92
86 67 CF 0C 67 CF 9E
20 21 22 23
67 CF 9E 0C
movwf Cnt
movlw Buf1
movwf FSR
Tra
movf
call
incf
decfsz
goto
goto
ConstInit
bsf
bcf
movlw
movwf
movlw
movwf
movlw
movwf
bcf
clrf
clrf
movlw
movwf
return
INDF,w
Transm
FSR,f
Cnt,f
Tra
Priem
STATUS,RP0
TRISA,1
b’10000011'
OPTION_REG
d’129'
SPBRG
b’00100100'
TXSTA
STATUS,RP0
INTCON
PORTC
b’10010000'
RCSTA
Receiv
RecA
btfss
goto
RecB
movf
movwf
return
PIR1,RCIF
RecA
RCREG,w
RxBuf
Transm
tr3
; диод
movwf
TXREG
bcf
PIR1,TXIF
btfss
PIR1,TXIF
goto
tr3
return
; прием байта в RxBuf
; check for received data
; выдача байта из W
; transmit byte to PC
end
13
В начале программы определяются значения используемых пере
менных, т. е. задается распределение оперативной памяти. Оператор
ORG фиксирует начальный адрес размещения кодов программы в по
стоянной памяти.
Как упоминалось ранее, загрузочный модуль передает управление
на метку Start и подпрограмма ConstInit выполняет настройку асин
хронного канала на скорость 9600 бод. На метке Priem программа
ожидает прихода байта из ПЭВМ. Принятый подпрограммой Receiv
байт записывается в ячейку RxBuf, переключается светодиод коман
дой XORWF PORTA, f и начальный адрес Buf1 загружается в регистр
FSR. Устанавливается бит переноса C в регистре STATUS, и в счет
чик цикла Cnt загружается число 3. Эта часть программы идентична
для всех вариантов.
С метки Beg1 начинается конкретный вариант программы. В ак
кумулятор W загружается начальное значение, и цикл из несколь
ких команд повторяется 3 раза. Содержимое аккумулятора W и яче
ек ОЗУ при каждом проходе цикла следует указать в поле коммента
рия. В цикле выполняются сдвиги, арифметические и логические ко
манды. Следует учитывать, что бит переноса формируется арифме
тическими командами и включается в кольцо сдвига при выполнении
команд RLF, RRF.
После выхода из цикла содержимое W и регистра STATUS записы
вается в ячейки 23, 24 и в поле комментария отмечаются заключи
тельные значения всех переменных. Далее для контроля эти значения
в цикле Tra передаются в ПЭВМ по последовательному каналу и отра
жаются на экране дисплея. Управление возвращается на метку Priem.
В заключение остановимся несколько подробнее на используемых
подпрограммах. Для загрузки регистров SPBRG и TXSTA в подпрог
рамме Init сначала устанавливается первый регистровый банк. В ре
гистре TXSTA задается 8битовый формат, разрешение выдачи, асин
хронный режим и повышенная скорость (табл. П2.3). При частоте
кварца 20 МГц и повышенной скорости загрузка десятичного числа
d′129′ в регистр SPBRG обеспечивает асинхронную передачу со ско
ростью 9600 бод. Затем устанавливается нулевой регистровый банк
и в регистре RCSTA задается разрешение приема и 8битовый фор
мат. Сброс регистра INTCON запрещает прерывания.
Прием байта подпрограммой Receiv начинается с цикла ожидания
готовности на метке RecA до установки флага готовности RCIF в ре
гистре PIR1. Затем байт переписывается из буфера приема RCREG
в ячейку RxBuf. При выдаче байта подпрограммой Transm он снача
ла загружается в буфер выдачи TXREG, затем сбрасывается флаг вы
14
дачи TXIF и программа входит в цикл ожидания Tr3 до установки
флага TXIF после окончания выдачи байта из буфера TXREG.
Выполнение работы
1. В текстовом редакторе в файле Lab1.asm заменить фрагмент
программы от метки Beg1 до метки End1 на заданный вариант, ука
зав в поле комментария динамику изменения содержимого аккуму
лятора W и ячеек 20, 21, 22, 23 в процессе выполнения программы.
2. Запустить трансляцию программы Lab1.asm командным фай
лом Asm.bat вида
mрasm lab1.asm
В результате трансляции создаются файлы Lab1.lst и Lab1.hex.
Если транслятор выдает сообщение об ошибках, просмотреть файл
Lab1.lst и устранить ошибки в файле Lab1.asm.
3. В файле Param.txt вида
1 р Lab1.hex
проверить и отредактировать (если необходимо) параметры загруз
ки – номер Comпорта и имя hexфайла. Запустить программу заг
рузки gruzim.exe. При появлении запроса «рress reset» нажать на
тренажере кнопку сброса. По окончании загрузки нажать клавишу
Esc.
4. Запустить программу Lab1.exe. При нажатии любой клавиши
(кроме пробела) в тренажер передается по последовательному кана
лу код нажатого символа и принимается из тренажера содержимое
ячеек ОЗУ 20, 21, 22, 23, 24. Если полученные данные не совпадают
с данными в поле комментария – определить причину расхождения.
Выход из программы Lab1.exe – при нажатии клавиши Esc.
Задание на лабораторную работу № 1
Вариант 1
Var1 movwf
rlf
addwf
iorwf
incf
decfsz
goto
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var1
Вариант 7
Var7 movwf
rlf
addwf
andwf
incf
decfsz
goto
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var7
15
Вариант 2
Var2 movwf
rrf
addwf
xorwf
incf
decfsz
goto
Вариант 3
Var3 movwf
rlf
subwf
andwf
incf
decfsz
goto
Вариант 4
Var4 movwf
rrf
addwf
iorwf
incf
decfsz
goto
Вариант 5
Var5 movwf
rlf
addwf
xorwf
incf
decfsz
goto
Вариант 6
Var6 movwf
rrf
addwf
andwf
incf
decfsz
goto
Вариант 8
Var8 movwf
rlf
subwf
iorwf
incf
decfsz
goto
Вариант 9
Var9 movwf
rlf
subwf
xorwf
incf
decfsz
goto
Вариант 10
Var10 movwf
rrf
subwf
xorwf
incf
decfsz
goto
Вариант 11
Var11 movwf
rrf
subwf
iorwf
incf
decfsz
goto
Вариант 12
Var12 movwf
rrf
subwf
andwf
incf
decfsz
goto
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var2
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var3
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var4
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var5
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var6
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var8
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var9
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var10
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var11
INDF
INDF,w
INDF,f
INDF,f
FSR,f
Cnt,f
Var12
Отчет
Отчет по лабораторной работе должен содержать:
1) формулировку задания на лабораторную работу. Задание вклю
чает две позиции, отображаемые цифрами, например, 10–6. Первая
16
позиция показывает номер варианта из таблица заданий, вторая –
номер нажатой клавиши N;
2) графическую схему алгоритма;
3) листинг программы;
4) результаты выполнения вручную операций с 8разрядными дво
ичными числами в соответствии с текстом программы. В определе
нии операндов для первых операций необходимо использовать скан
код нажатой клавиши, который определяется по формуле: N + 30h,
где N берется из задания;
5) сводную таблицу результатов:
Kоманда
W
20
Ячейка
W
21
W
22
Пересылка
Сдвиг
Арифметическая операция
Логическая операция
17
Лабораторная работа № 2
ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕ
СОДЕРЖАТЕЛЬНОЙ ЗАДАЧИ МИКРОКОНТРОЛЛЕРА PIC16С7Х
Цель работы: приобретение навыков программирования содер
жательных задач; освоение принципов работы в системе проектиро
вания программ MPLAB при отладке программ.
Основные этапы программирования содержательных задач
Процесс программирования содержательных задач, как правило,
включает несколько этапов. Рассмотрим их на примере конкретной
задачи обработки массивов.
Этап 1. Формулировка задачи.
В массиве из 10 чисел ненулевые элементы массива заменить на FF.
Этап 2. Порядок решения задачи.
Данный этап очень важен, так как позволяет в дальнейшем кор
ректно провести выполнение следующих этапов и тем самым избе
жать ошибок логического характера. Такие ошибки не препятству
ют формированию машинного кода программы, однако при выпол
нении программы могут быть получены неверные результаты, поэто
му такие ошибки трудно обнаружить.
Для решения задачи, выбранной в качестве примера, необходимо
несколько раз повторить выполнение следующих действий:
1) выбрать из памяти очередной элемент массива;
2) сравнить его с 0;
3) если он не равен 0, записать по адресу этого элемента константу
FF; в противном случае – не выполнять никаких действий;
4) проверить, является ли этот элемент последним: если нет – пе
рейти к п. 1, в противном случае – выход из задачи.
На основании выбранного порядка решения задачи делаем вывод,
что алгоритм решения задачи должен быть циклическим, так как
предусматривается выполнение несколько раз одинаковых действий
(тело цикла). Количество повторений определяется размером масси
ва и называется параметром цикла.
Этап 3. Формирование графической схемы алгоритма решения
задачи.
Предварительно определим некоторые ячейки памяти. Для повы
шения наглядности ячейкам будем давать символические имена. Так,
18
Cnt – имя ячейки, выбранной для хранения параметра цикла, равно
го 10. В ячейке с именем Mas хранится начальный адрес массива (ри
сунок).
Этап 4. Разработка текста программы МК на языке Ассемблера.
На этом этапе предварительно записывают некоторые директивы
Ассемблера, управляющие работой программы:
List р=16C73; определяет тип процессора
#include «PIC16C73.inc»; подключает файл с описанием процессора
Org 0; устанавливается начальный адрес следующих за этой дирек
тивой команд; таких директив может быть несколько.
¦¹Ð¹ÄÇ
$OU"I
'43¦™.BT
¨¹Å<'43>¨¹Å<'43>
ɉɚɦ[<FSR>]<>00
¨¹Å<'43>
¦¾Ë
¹
8''I
¨¹Å<'43>8
'43'43
$OU$OUr
¦¾Ë
$OU
¹
£ÇƾÏ
Графическая схема алгоритма решения задачи
19
Для размещения каждой команды программы необходимо исполь
зовать четыре поля :
— поле метки;
— поле мнемоники КОП;
— поле операнда;
— поле комментария.
Примечания:
1. В поле операнда некоторых команд после операнда через запя
тую помещается бит направления d, который указывает на место
размещения результата. Если d = 0 (или w), результат размещается
в рабочем регистре W, при d = 1 (или f) – в ячейке памяти.
2. В поле комментария необходимо указывать назначение коман
ды с точки зрения реализации алгоритма, а не действие, выполняе
мое ею (что можно выяснить из описания системы команд).
Приведем текст программы, реализующей разработанную выше
схему алгоритма.
Поле метки Мнемоника KОП
Start
Операнд
m1
Movlw
Movwf
Movlw
Movwf
Movf
btfsc
goto
Movlw
Movwf
0ah
Cnt
Mas
FSR
INDF, f
STATUS, Z
m2
0FFh
INDF
m2
Incf
FSR, f
Decfsz
Cnt
goto
END
m1
Kомментарий
;Параметр цикла
в Cnt
;
;Н.А.массива
в FSR
;Формируется признак Z
;Перейти к следующей ячейке
памяти
;Проверка условия выхода из
цикла
Выполнение работы
Работа выполняется в среде проектирования программного обеспе
чения MPLAB. Ниже описаны основные приемы работы в этой среде.
Предварительно ассемблерная программа должна быть помещена
в папку: D:\MPLAB\EXAMPLE.
20
1. Войти в среду, щелкнув дважды по ярлыку MPLAB на рабочем
столе.
2. В верхнем меню выбрать: Project – New Project.
3. В правой части открывшегося окна открыть папку EXAMPLE,
в которой будут находиться проект и ассемблерная программа, кото
рая будет присоединена к проекту. В левой части окна вместо значка
* ввести имя проекта с расширением .рjt и нажать ОК.
4. В открывшемся окне Edit Project диалог вести по информации
в его части с заголовком Project Files (см. внизу).
5. Выделить файл и нажать засветившуюся при этом кнопку Nodes
Proрerties, в новом окне нажать ОК.
6. В окне Edit Project нажать засветившуюся при этом кнопку
Add Node . В открывшемся окне выбрать имя файла с ассемблерной
программой и щелкнуть дважды по этому имени.
7. В окне Edit Project выделить <имя>[.hex] и нажать засветив
шуюся при этом кнопку Build Mode. После этого выполняется ком
пиляция ассемблерной программы. В случае успеха (сообщение:
Build comрleted succesfully) приступить к отладке программы, в про
тивном случае – изучить сообщения об ошибках и скорректировать
программу.
8. Осуществить выполнение программы с последующим анализом
результатов ее работы. Для этого необходимо:
• Открыть окно с ассемблерной программой, выбрав в верхнем
меню File – Oрen – <имя>.asm.
• С помощью меню с графическими окнами открыть окно RAM
и в данном окне произвести ввод в ячейки памяти необходимой
информации.
Ввод массива
1. В верхнем меню выбрать Window Modify.
2. В появившемся окне записи установить флажок Auto Increment.
3. Поместить курсор в окно Adress и ввести начальный адрес мас
сива.
4. Поместить курсор в окно Data и ввести произвольное число.
5. Нажать кнопку Write и убедиться в том, что в нужную ячейку
памяти записалось данное число, а в окне Adress находится адрес на
1 больше.
6. Повторяя пп. 4, 5, ввести в память все элементы массива.
• Активизировать окно с ассемблерной программой и в графи
ческом меню нажать кнопку
.
21
Первая строка программы выделяется черным цветом, указы
вая на готовность программы к выполнению.
• В меню с графическими окнами нажать последовательно кноп
ки с зеленым и красным светофором.
• По содержимому ячеек памяти оценить результаты работы
программы.
В случае неверной работы программы необходимо включить ша
говый режим исполнения программы и просмотреть содержимое ос
новных регистров после выполнения каждой команды. Для этого с по
мощью меню с графическими окнами открыть окно SFR и пронаблю
дать в нем имена регистров W, FSR, STATUS и других. Выполнение
каждой команды осуществляется нажатием кнопки «следы» в меню
с графическими окнами.
Варианты заданий
Во всех заданиях объектом обработки является массив из 10 чи
сел, который необходимо разместить в свободной зоне области пользо
вателя встроенной памяти данных в диапазоне адресов 20h–7Fh
(в банке 0 по умолчанию).
1. Найти максимальный элемент массива.
2. Определить количество положительных чисел в массиве.
3. Найти адрес минимального элемента массива.
4. Определить количество четных чисел в массиве.
5. Все отрицательные числа массива заменить на 00.
6. Определить количество чисел в массиве меньше заданного.
7. Определить количество чисел в массиве, попадающих в задан
ный диапазон.
8. Заданное число поместить на место первого положительного
числа массива.
9. Первое отрицательное число массива заменить на заданное.
10. Определить количество чисел в массиве, не попадающих в за
данный диапазон.
11. Первое отрицательное число массива заменить на 00.
12. Найти адрес максимального элемента массива.
13. Определить количество чисел в массиве больше заданного.
14. Заданное число поместить на место первого отрицательного
числа массива.
15. Найти минимальный элемент массива.
16. Первое нечетное число массива заменить на заданное.
17. Определить количество нечетных чисел в массиве.
22
18. Первое положительное число массива заменить на заданное.
19. Все нечетные числа массива заменить на заданное.
20. Первое четное число массива заменить на заданное.
21. Все положительные числа массива заменить на FF.
22. Определить количество отрицательных чисел в массиве.
Контрольные вопросы
к лабораторным работам № 1, 2
1. Особенности гарвардской архитектуры.
2. Действия МК при выполнении команды.
3. В чем состоит конвейерный принцип обработки команд? Приве
дите пример.
4. Как можно организовать чтение табличных данных из резидент
ной памяти программ (РПП)?
5. Назовите диапазоны адресов, которыми может пользоваться
программист для хранения данных.
6. Назначение WDT и способ его использования.
7. Запрограммировать очистку массива ячеек памяти (количество,
начальный адрес): а) 30h, 20h; б) 20h, 30h; в) 20h, 40h; г) 40h, 10h.
8. Что такое программные и аппаратные прерывания?
9. Составить программу подсчета числа единиц в байте.
10. В пределах какого адресного пространства возможен переход
в командах CALL ADR, goto ADR?
11. Назовите варианты команд возврата из подпрограммы. В ка
ком случае используется каждый вариант?
12. Составьте программу для фрагмента алгоритма (либо А, либо Б).
Примечание. Первой в программе должна находиться команда,
содержащая условие, например: BTFSS STATUS, C.
›Îǽ
™
¹
¬ÊÄÇ»Á¾
š
¦¾Ë
£ÇŹƽ¹
£ÇŹƽ¹
¦¾Ë
›Îǽ
¬ÊÄÇ»Á¾
¹
£ÇŹƽ¹
£ÇŹƽ¹
£ÇŹƽ¹
£ÇŹƽ¹
›ÔÎǽ
›ÔÎǽ
23
Лабораторная работа № 3
ВЗАИМОДЕЙСТВИЕ МИКРОКОНТРОЛЛЕРА PIC16С7Х
С ВНЕШНИМИ УСТРОЙСТВАМИ
Цель работы: изучить особенности взаимодействия микроконт
роллера с внешними устройствами; получить навыки программиро
вания задач проверки работы внешних устройств.
Постановка задачи
Разработать структурную схему и написать программу проверки
работоспособности ИМС для микроконтроллерной системы на базе
МК PIC16C7X.
Разработка структурной схемы
В качестве объекта контроля выберем 4разрядный счетчик 555ИЕ7.
Перечень входных сигналов, управляющих его работой, а также вы
ходных сигналов, по которым можно следить за правильностью ра
боты счетчика, представлен в прил. 4.
IE7 (193) 4разрядный счетчик
RB7 >| D1 VCC | 16 Начальная установка входов
RB6 <| Q1 D0 |< RD2 R=0 D30=1111 C+=1 C=1 PE=1
RB5 <| Q0 R |< RD3 По импульсу R=1,0 сброс Q30 = 0000
RB4 >| C P|> RD1 По импульсу C+ = 0,1 код Q30 увелич. на 1
RB1 >| C+ P+ |> RD0 По импульсу C = 0,1 код Q30 сокращ. на 1
RB0 <| Q2 PE |< RD6 По импульсу PE = 0,1 загрузка Q30 = D30.
RD7 <| Q3 D3 |< RD5
8 | GND D2 |< RD4
Микроконтроллер соединяется с проверяемой схемой через порты
РВ и PD (рис. 1). Разряды 0, 1, 7 порта PD и разряды 0, 5, 6 порта PB
должны быть соединены с выходами ИМС , поэтому они настраива
ются на ввод информации; разряды 2, 3, 4, 5, 6 порта PD и разряды
1, 4, 7 порта PB должны быть соединены с входами ИМС, поэтому
они настраиваются на вывод информации.
Электрические линии, соединяющие контакты МК и ИМС,объе
динены в шину. На каждой линии указываются два числа: то, кото
рое находится у корпуса ИМС (или МК), обозначает номер внешнего
24
¥£ ¨ÇÉË
©›
¨ÇÉË
1% %7$$ 2% 23 $r1r
$ 1 21& 2% (/%% Рис. 1. Структурная схема микроконтроллерной системы
вывода ИМС (МК), число, расположенное ближе к шине, указывает
номер соединения. Пусть две линии имеют номер соединения 8. Это
означает, что внешний вывод № 29 у МК соединен с внешним выво
дом № 11 у ИМС.
Разработка программы проверки работоспособности ИМС
Основой для разработки является базовая программа LAB2.asm,
которая помимо программных блоков, управляющих проверкой не
которой ИМС, содержит служебные программы, управляющие рабо
той тренажера при выполнении лабораторной работы. Выделим не
обходимые программные блоки и рассмотрим принципы их создания.
Блок инициализации (настройки) портов МК – DirBD1
С помощью данного блока производится настройка портов на пе
редачу информации через них в определенном направлении. Направ
ление передачи определяется на основании связей между МК и ИМС,
сформированных в соответствии со структурной схемой (см. рис. 1).
1 Здесь и далее будем указывать метку первой команды блока, чтобы
легче ориентироваться в базовой программе.
25
При формировании блока DirBD исходят из следующих особенно
стей работы портов. Вопервых, у каждого порта отдельный разряд
может быть настроен на ввод или вывод независимо от других разря
дов порта. Это обеспечивается тем, что для каждого порта имеется
свой регистр направления TRIS*, где вместо * ставится буква, указы
вающая имя порта. Запись «0» в определенном разряде этого регистра
означает, что одноименный разряд порта * настраивается на вывод
информации, запись «1» – на ввод. Следует отметить, что и порт *,
и его регистр направления TRIS* являются регистрами специально
го назначения, однако, если адрес порта * находится банке 0, то ад
рес его регистра направления TRIS* расположен в банке 1. Поэтому
для настройки портов необходимо перейти в банк 1, после заверше
ния ее нужно перейти в банк 0.
Рассмотрим фрагмент программы.
bsf STATUS, RP0;
movlw b’11001111'
movwf TRISA
bcf STATUS, RP0
После выполнения фрагмента разряды 3…0 порта А настроены на
ввод информации, разряды 5, 4 – на вывод.
Блок DirBD (см. рис. 1) имеет вид
DirBD bsf STATUS, RP0;
movlw b’01101101'
movwf TRISB
movlw b’10000011'
movwf TRISD
bcf STATUS, RP0
Блок распознавания нажатой клавиши – Command
Проверка счетчика в примере состоит в проверке выполнения им
отдельных функций. Вызов функции на выполнение осуществляет
ся нажатием определенной клавиши. Сканкод этой клавиши посту
пает в контроллер, в регистр RxBuf. Задача данного блока – выде
лить путем сравнения код нужной клавиши и передать управление
фрагменту, выполняющему необходимую функцию. В качестве при
мера рассмотрим построение блока, выполняющего распознавание
двух клавиш, нажатие клавиши r вызывает сброс счетчика, нажатие
клавиши i вызывает увеличение его содержимого на 1.
26
›Îǽ
¦¾Ë
£Ä¹»Áѹ
ƹ¿¹Ë¹
¹
83Y#VG
¹
8S
¦¾Ë
#FH6TU
83Y#VG
8J
*ODSFN
›Ô»Ç½
ÊÇÊËÇØÆÁØ
ÊоËÐÁù
›ÔÎǽ
Рис. 2. Схема алгоритма блока распознавания клавиш
Схема алгоритма блока имеет вид (рис. 2).
Примечание. Блоки с двойными стенками обозначают наборы ко
манд.
Наборы команд выполнения отдельных функций –
BegUst (сброс), Increm (увеличение на 1)
Каждый набор команд решает задачу программного формирова
ния множества входных сигналов проверяемой ИМС для выполне
ния ею определенной функции. Вызов такого набора на исполнение
27
осуществляется нажатием определенной клавиши. На выходах ИМС
формируются сигналы, являющиеся реакцией на входные сигналы.
Значения сигналов, как входных, так и выходных, можно пронаб
людать на экране монитора ПК. Для этого необходимо вызвать на
исполнение служебную программу Show.exe. Эта программа обеспе
чивает вывод на экран монитора ПК обозначений сигналов ИМС как
заголовков столбцов таблицы результатов. Правильность выполня
емой функции определяется на основе визуального анализа сигналов
на экране монитора ПК.
При формировании набора команд следует иметь в виду, что сиг
налы могут быть статические и динамические. Статические сигна
лы используются с целью установки состояния триггера по асин
хронному входу (R или S) либо для задания того или иного набора
сигналов на входах логического элемента (ЛЭ). Для формирования
подобных сигналов достаточно использовать команду вида bcf (bsf).
Пусть, например, разряд 5 порта B соединен с одним из входов ЛЭ
и при подаче входного набора на этот вход должен быть подан 0.
Команда bcf PORTB, 5 решает эту задачу. Динамические сигналы
формируются для управления триггерами по синхронным входам
(«D» или «J», «K») и для их переключения должны быть поданы
на специальные входы «C». Каждый такой сигнал представляет со
бой импульс, и для его программного формирования необходимо ис
пользовать две команды: установки сигнала в активное состояние
и сброса в неактивное (исходное) состояние. Пусть, например, раз
ряд 4 порта C соединен с входом «C» триггера(ов) ИМС и на этот
вход необходимо подать положительный импульс. Это достигает
ся использованием двух следующих команд: bsf PORTC, 4 и bcf
PORTC, 4.
Рассмотрим ИМС, используемую в примере. Для ее полной про
верки необходимо обеспечить выполнение ею четырех функций:
1) сброс счетчика;
2) режим прямого счета (инкрементирование состояния);
3) режим обратного счета (декрементирование состояния);
4) запись произвольного состояния в счетчик.
Приведенные ниже наборы команд предназначены для выполне
ния ИМС первых двух функций.
Как следует из алгоритма (см. рис. 2), вызов первого набора на
исполнение происходит при нажатии клавиши r, вызов второго –
клавиши i.
BegUst
; первый набор команд
movlw b’11111111'; установить сигналы на входах С+ и С– в исходное
28
movwf PORTB ; состояние
movlw b’11110111'; то же для сигнала на входе R
movwf PORTD
bsf PORTD, 3; сброс счетчика
bcf
PORTD, 3
goto Answer; на вывод состояния счетчика на экран
Increm
; второй набор команд
bcf
PORTB, 1
bsf
PORTB, 1
goto Answer
Ресурсы микроконтроллера и структура тренажера
Ресурсы и внешние выводы МК показаны на рис. 3.
К контактам OSC1, OSC2 подключается кварцевый резонатор до
20 МГц, на входе MCLR формируется сигнал сброса (при включении
питания или нажатии кнопки сброса), на контакты VDD, VSS пода
ется питание (+5 В, GND). Остальные контакты являются много
функциональными выводами различных портов; варианты обозна
чения их сигналов приведены в табл. П2.1.
В состав кристалла МК входит процессорный блок CPU c 8раз
рядным аккумулятором W и 13разрядным счетчиком команд PC,
память программ на 8К 14разрядных слов EEPROM и регистровая
память RAM, адресная структура которой приведена в табл. П2.2.
Адреса 00–7F относятся к банку 0, адреса 80–8F – к банку 1. В адрес
-----------------------------------------
|
|
---->|04$$1681$
3#|<===>
<----|04$|
---->|.$-3&130.,
|
|
|
<===>|3"3".
3%|<===>
|
|
|64"3541*|
|
|
<===>|3&"%$#5.33$|<===>
|
|
|
|
-----|7%%|
-----|744|
|
|
-----------------------------------------
Рис. 3. Ресурсы контроллера PIC16C74
29
ных зонах 00–1F и 80–9F расположены функциональные регистры,
адреса 20–7F и A0–FF используются как оперативная память. Фор
мат наиболее употребительных регистров приведен в табл. П2.3. Не
которые из регистров определены в обоих банках (PCL, STATUS,
FSR,...), для обращения к остальным может понадобиться предва
рительное переключение текущего банка, т. е. изменение бита RP0
в регистре STATUS.
Через порты RD и RB к МК подключаются проверяемые микро
схемы. Линии выдачи TX и приема RX (разряды RC6, RC7 порта RC)
используются для связи с ПЭВМ по асинхронному последователь
ному каналу (через разъем X2). Для фиксации цифровых сигналов
на линиях X, Y используется программируемая логическая интег
ральная схема (ПЛИС) D4, которая подключена к МК через порты
RC, RE.
ПЛИС синхронизируется генератором тактовых импульсов D5 с ча
стотой 40 МГц, для синхронизации МК используется кварцевый ре
зонатор Q1 c частотой 20 МГц. Через разъем X1 и стабилизатор D2 на
плату тренажера подается питание +5 В.
После включения питания или нажатия кнопки сброса К1 в МК
происходит стартовая установка функциональных регистров и сброс
счетчика команд PC. Затем управление передается (программно) в заг
рузочный модуль памяти, который находится в адресной зоне 0F00–
0FFF. Зажигается и гаснет сигнальный светодиод VD1, и в ПЭВМ
выдается по линии TX запрос на загрузку новой программы пользо
вателя. Если в течение 5 мс ПЭВМ не откликается на запрос, то уп
равление передается старой программе пользователя (ее стартовый
адрес остался в загрузочном модуле от последней загрузки). Сам заг
рузочный модуль первоначально заносится в МК на программаторе
и в дальнейшем не изменяется (за исключением стартового адреса
пользователя).
В контактную панель тренажера могут вставляться микросхемы
в корпусах DIP14, DIP16, DIP20. Подача питания должна быть
стандартной: +5 В на последнем контакте, земля – на среднем кон
такте (7, 8 или 10й контакт). Цоколевка некоторых микросхем
приведена в прил. 3. В прил. 4 (файл Shem.txt) дано краткое опи
сание их действия. Рассмотрим в качестве примера программу
Lab2.asm проверки счетчика 555ИЕ7.
Title «Lab2 Program»
;
list p=16c74
30
; processor type
errorlevel
;
1, (305)
#include “p16c74.inc”
;
Stat1 equ
Takt equ
CntByte
Shif equ
RxBuf equ
CntShi equ
ByteX equ
ByteY equ
org 00h
; Полный прыжок
movlw 0
movwf PCLATH
goto Start
org
04h
20h
21h
equ 22h
23h
24h
25h
26h
27h
; прерывания
nop
org
100h
Start
call ConstInit
; программа тестирования
; начальная установка
DirBD; настройка направлений RB, RD
bsf
STATUS,RP0
movlw b'01101101'
; RB input:0,5,6;output:1,4,7
movwf TRISB
movlw b'10000011'
; RD input:0,1,7;output:2,3,4,5,6
movwf TRISD
bcf
STATUS,RP0
BegUst
movlw
movwf
movlw
movwf
bsf
bcf
b'11111111'; установить сигналы на входах С+ и С в исходное
PORTB
; состояние
b'11110111' ; то же для сигнала на входе R
PORTD
PORTD, 3; сброс счетчика
PORTD, 3
goto
Answer
31
Priem
call Receiv
movlw 2
xorwf PORTA,f
; сброс и пуск ПЛИС
Pusk bcf
bsf
bsf
bsf
bsf
PORTE,2
PORTC,1
PORTC,2
PORTC,0
PORTE,2
;
;
;
;
;
CLR=0
U0=1
U1=1
RD=1
CLR=1
Command
movf
xorlw
btfsc
goto
RxBuf,w
'r'
STATUS,Z
BegUst
movf
xorlw
btfsc
goto
RxBuf,w
'i'
STATUS,Z
Increm
goto Priem
Increm
bcf
PORTB,1
bsf
PORTB,1
goto Answer
; C+ = 0;
; C+ = 1;
Answer ; выдача PORTD, PORTB
movf
call
movf
call
PORTD,w
Transm
PORTB,w
Transm
; разрешение CLKU
movlw b'11111001'
andwf PORTC,f
bcf
PORTC,0
; U1=0, U0=0
; RD=0
; чтение ПЛИС и выдача 6 байт
movlw 3
movwf CntByte
32
RdTrans
call RdAlt
movf ByteX,w
call Transm
movf ByteY,w
call Transm
decfsz
CntByte
goto RdTrans
goto Priem
ConstInit
bsf
movlw
movwf
movlw
movwf
movlw
movwf
STATUS,RP0
b'10000000'
TRISC
b'111100'
TRISA
b'011'
TRISE
movlw
movwf
movlw
movwf
d'129'
SPBRG
b'00100100'
TXSTA
bcf
clrf
clrf
movlw
movwf
STATUS,RP0
INTCON
PORTC
b'10010000'
RCSTA
; RC7/RX in
;A0,RA1 out diod
;СLR out
return
Receiv ; прием
clrf STATUS
; Bank 0
btfss PIR1,RCIF ; check for received data
goto
RecA
RecB
movf
RCREG,w
movwf
RxBuf
RecA
return
Transm
clrf STATUS
movwf TXREG
; выдача
; transmit byte to PC
33
bcf PIR1,TXIF
tr3 btfss
PIR1,TXIF
goto tr3
return
RdAlt
; чтение 2 байт ПЛИС
movlw 8
movwf Shif
Rd1 bcf
btfsc
bsf
rlf
bcf
btfsc
bsf
rlf
STATUS,C
PORTE,0
STATUS,C
ByteX,f
STATUS,C
PORTE,1
STATUS,C
ByteY,f
bsf PORTC,3
bcf
PORTC,3
decfsz
Shif
goto Rd1
; CLKU=1,0
return
end
После инициализации Init2 выполняется настройка направления
работы отдельных разрядов портов RB и RD. Выход каждого тригге
ра портов, например PORTB.3, подключен к внешнему контакту че
рез электронный ключ, который управляется триггером направле
ния (TRISB.3). При записи 0 в триггер направления TRISB.3 = 0
ключ замкнут и состояние триггера PORTB.3 передается на выход
ной контакт – он настроен на вывод. При записи TRISB.3 = 1 ключ
разомкнут и контакт настроен на ввод.
После настройки направления на метке BegUst выполняется на
чальная установка микросхемы. После этого управление передает
ся на метку Answer и в ПЭВМ по последовательному каналу выдает
ся и отражается на экране состояние портов микросхемы. После вы
дачи программа переходит на метку Priem и ожидает команду от
ПЭВМ.
При нажатии любой клавиши на клавиатуре ПЭВМ ее код переда
ется в МК. Изменяется состояние светодиода VD1 (чтобы подтвер
дить работу последовательного канала) и на метке Pusk запускается
34
микросхема ПЛИС. На метке Command начинается анализ приня
той команды. Набор приходящих от ПЭВМ команд для конкретной
микросхемы устанавливает сам пользователь. В программе Lab2.asm
реализованы 2 команды – команда сброса r и команда инкремента i.
При нажатии других клавиш управление просто возвращается на
метку Priem и состояние микросхемы не изменяется.
По команде сброса, осуществляемой нажатием клавиши r, управ
ление передается на метку BegUst и выполняется описанная ранее
исходная установка микросхемы. По команде инкремента, осуще
ствляемой нажатием клавиши i, управление передается на метку
Increm и выдается отрицательный импульс по линии инкремента RB1.
Новое состояние микросхемы на метке Answer передается в ПЭВМ
и отражается на экране. После каждого нажатия клавиши i состоя
ние увеличивается на 1, что можно пронаблюдать по сигналам на
выходах Q3, Q2, Q1, Q0. Сброс всегда переводит схему в исходное
состояние Q3 Q2 Q1 Q0 = 0000.
Выполнение работы
1. Скопировать файл Lab2.asm в файл с заданным Вами именем,
например Qq.asm. Изменить в файле Qq.asm настройку направлений
линий портов RB, RD для работы с микросхемой Ie7. Разработанные
при подготовке отчета наборы команд для управления микросхемой
ввести в программу Qq.asm вместо прежнего набора команд.
2. Вызвать в режиме текстового редактора служебный файл с опи
санием соединений между ИМС и МК nogi.txt и сравнить с исходной
информацией, при необходимости скорректировать.
3. Запустить трансляцию программы Qq.asm командным файлом
Asm.bat вида
mрasm Qq.asm.
В результате трансляции создаются файлы Qq.lst и Qq.hex. Если
транслятор выдает сообщение об ошибках, просмотреть файл Qq.lst
и устранить ошибки в файле Qq.asm.
4. В файле Param.txt вида
1 р Qq.hex
проверить и отредактировать (если необходимо) параметры загрузки –
номер Comпорта и имя hexфайла. Запустить программу загрузки
gruzim.exe.
35
При появлении запроса «рress reset» нажать на тренажере кнопку
сброса. По окончании загрузки нажать пробел.
5. Запустить программу show.exe. Проверить поведение микро
схемы при выполнении выбранного набора команд. В случае непра
вильной работы скорректировать текст исходной программы Qq.asm.
Отчет
Отчет по лабораторной работе должен содержать:
1) формулировку задания на лабораторную работу;
2) функциональную схему МКС для проверки ИМС;
3) графическую схему алгоритма блока Command;
4) тексты программных блоков выполнения отдельных функций,
а также DirBD, Command.
Контрольные вопросы
1. Объяснить необходимость переключения банков при инициа
лизации портов.
2. Составить программу инициализации порта В, если известно,
что:
а) четные разряды порта должны работать на ввод, а нечетные –
на вывод;
б) старшие разряды 7…4 должны работать на вывод, младшие раз
ряды 3…0 – на ввод.
3. Контакт PORTВ,5 соединен с клавишей. При нажатии клави
ши в точке соединения сигнал изменяется с 1 на 0. Запрограммиро
вать инициализацию порта.
4. Для предыдущей задачи составить программу ожидания нажа
тия клавиши.
5. По заданной схеме соединения МК и ИМС ЛП5 написать:
а) программу инициализации портов В и D;
б) программу перебора наборов.
6. Написать набор команд для проверки функции обратного счета
счетчика ИЕ7.
7. Написать набор команд для проверки функции записи состоя
ния 1010 в счетчик.
8. Привести схему алгоритма блока Command для проверки вы
полнения ИМС всех четырех функций.
36
ПРИЛОЖЕНИЯ
Приложение 1
Таблица П1.1. Система команд PIC16C74
Байтовые операции
Имя
ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ
INCF
INCFZ
IORWF
MOVF
MOVWF
NOP
RLF
RRF
SUBWF
SWAPF
XORWF
Операнды Операция
f,d
f,d
f
f,d
f,d
f,d
f,d
f,d
f,d
f,d
f
f,d
f,d
f,d
f,d
f,d
Кодировка
f=W+f
00
f=W&f
00
f=0
00
W=0
00
f=!f
00
f=f1
00
f=f1, skip if
f=f+1
00
f=f+1, skip if
f=W|f
00
f=f
00
f=W
00
нет операции 00
С < f < C 00
C > f > C 00
f=fW
00
обмен тетрад f
f=f^W
00
0111
0101
0001
0001
1001
0011
0 00
1010
0 00
0100
1000
0000
0000
1101
1100
0010
00
0110
dfff
dfff
1fff
0000
dfff
dfff
1011
dfff
1111
dfff
dfff
1fff
0xx0
dfff
dfff
dfff
1110
dfff
Признаки
ffff C,DC,Z
ffff
Z
ffff
Z
0011
Z
ffff
Z
ffff
Z
dfff ffff
ffff
Z
dfff ffff
ffff
Z
ffff
Z
ffff
0000
ffff
C
ffff
C
ffff C,DC,Z
dfff ffff
ffff
Z
Битовые операции
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b
b=0
b=1
skip if b=0
skip if b=1
01
01
01
01
00bb
01bb
10bb
11bb
bfff
bfff
bfff
bfff
ffff
ffff
ffff
ffff
Константы и переходы
ADDLW k
ANDLW k
CALL k
CLRWDT
GOTO k
IORLW k
W=W+k
W=W&k
вызов подпрог.
сброс WDT
PC.100=k
W=W|k
11
11
10
00
10
11
111x
1001
0kkk
0000
1kkk
1000
kkkk
kkkk
kkkk
0110
kkkk
kkkk
kkkk
kkkk
kkkk
0100
kkkk
kkkk
C,DC,Z
Z
Z
37
MOVLW k
RETFIE
RETLW k
RETURN
SLEEP
SUBLW k
XORLW k
38
W=k
11
возвр.из прер. 00
возвр. с W=k
11
возвр.из подпр. 00
энергосбереж. 00
W=kW
11
W=W^k
11
00xx
0000
01xx
0000
0000
110x
1010
kkkk
0000
kkkk
0000
0110
kkkk
kkkk
kkkk
1001
kkkk
1000
0011
kkkk
kkkk
C,DC,Z
Z
Приложение 2
Таблица П2.1. Альтернативные функции контактов
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3/VREF
RA4/T0CKI
RA5/AN4/SS#
RE0/RD#/AN5
RE1/WR#/AN6
RE2/CS#/AN7
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
Таблица П2.2. Адреса регистров RAM (00…7F банк 0, 80…FF банк 1)
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
OD
0E
0F
20
.
.
7F
Банк 0
INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
PORTC
PORTD
PORTE
PCLATH
INTCON
PIR1
PIR2
TMR1L
TMR1H
Зона
пользователя
Банк1
80 INDF
81 OPTION
82 PCL
83 STATUS
84 FSR
85 TRISA
86 TRISB
87 TRISC
88 TRISD
89 TRISE
8A PCLATH
8B INTCON
8C PIE1
8D PIE2
8E PCON
8F (банк 0)
Банк 0
10 T1CON
11 TMR2
12 T2CON
13 SSPBUF
14 SSPCON
15 CCPRIL
16 CCPR1H
17 CCP1CON
18 RCSTA
19 TXREG
1A RCREG
1B CCPR2L
1C CCPR2H
1D CCP2CON
1E ADRES
1F ADCON0
Банк1
90
91
92
PR2
93
SSPADD
94
SSPSTAT
95
96
97
98
TXSTA
99
SPBRG
9A
9B
9C
9D
9E
9F
ADCON1
A0 Зона
. пользователя
.
FF (банк 1)
Таблица П2.3. Формат регистров
Биты
7
Имя
IRP
Регистр STATUS (адреса 03h, 83h)
Сброс
Назначение
0
резерв (для косв.адресов 100h 1FFh)
39
65
4
3
2
1
0
RP10
TO#
PD#
Z
DC
С
Биты
7
6
5
4
3
20
Имя
RBPU
INTEDG
T0CS
T0SE
PSA
К0
00
1
1
0
0
0
00..банк 0 01..банк 1
1..сброс, SLEEP, CLRWDT 0..сработал WDT
1..сброс, CLRWDT 0..SLEEP
признак нуля
десятичный перенос
перенос
Регистр OPTION (адрес 81h)
Сброс Назначение
1
0..подтяжка RB0
1
0..спад INT 1..рост INT
1
0..TMR0 от F/2 1..TMR0 от RA4
1
0..рост RA4 1..спад RA4 (TMR0+)
1
0..TMR0 1..WDT (подкл.делителя К0)
111
(000..1/2 111..1/256 для TMR0)
Биты
7
6
5
4
3
2
1
0
Регистр INTCON (адреса 0Bh, 8Bh)
Имя
Сброс
Назначение
GIE
0
1..общее разреш прерыв
PEIE
0
1..разреш дополн прерыв
TOIE
0
1..разреш прер по TOIF
INTE
0
1..разреш прер INT
RBIE
0
1..разреш прер по измен RB.74
TOIF
0
флаг TMR0
INTF
0
флаг INT
RBIF
x
флаг измен RB.74
Биты
7
6
5
4
3
2
1
0
Регистр управления выдачи TXSTA (адрес 98h)
Имя
Сброс
Назначение
CSRC
0
1..master 0..slave (синхрон.режим)
TX9
0
0..8 бит 1..9 бит
TXEN
0
1..разреш.выдачи
SYNC
0
0..асинхр.режим 1..синхр.режим
U
не использ.
BRGH
0
1..повыш.асинхр.скорость
TRMT
0
1..сдвиг.регистр пуст
TX9D
0
9й бит при выдаче
Биты
7
6
Регистр управления приема RCSTA (адрес18h)
Имя
Сброс
Назначение
SPEN
0
1..разреш. USART
RX9
0
1..9 бит 0..8 бит
40
5
4
3
2
1
0
SREN
CREN
0
0
0
0
0
0
Биты
76
5
4
3
2
1
0
Имя
RCIF
TXIF
SSPIF
CCP1IF
TMR2IF
TMR1IF
FERR
OERR
RX9D
1..разреш.синхр.приема
1..разреш.асинхр.приема
не использ.
1..ошибка кадра
1..ошибка наложения
9й бит на приеме
Регистр флагов PIR1 (адрес 0Ch)
Сброс
Назначение
00
Не использ.
0
Флаг приема USART
0
Флаг выдачи USART
0
Флаг SPI
0
Флаг CCP1
0
Флаг TMR2
0
Флаг TMR1
Регистр скорости SPBRG (адрес 99h)
Если загрузить в SPBRG число X, то скорость передачи в бодах
Baud = F / ( N * (X+1))
N=64..норм.скор. N=4..повыш.скорость Fчастота кварца в герцах
Регистр выдачи TXREG (адрес 19h)
Регистр приема RCREG (адрес 1Ah)
Регистр результата АЦП ADRES (адрес 1Eh)
Биты
76
53
2
1
0
Регистр управления ADCON0 (адрес 1Fh)
Имя
Сброс Назначение
ADCS10
00
TAD (00..2/F 01..8/F 10..32/F 11..26 мс)
СHS20
000
номер канала (0,1,...,7)
GO
0
1..пуск АЦП
0
не использ.
ADON
0
1..включ.АЦП
Время преобразования 10 TAD
Биты
73
20
Регистр выбора ADCON1 (адрес 9Fh)
Сброс Назначение
00000 не использ.
PCFG20
000
код выбора (000 все входы аналоговые)
Имя
41
Приложение 3
ИМС с указанием соединений их контактов с контактами МК
ID7 (138) Дешифратор 3*8
_________
RB7 >| A0 VCC | 16 Начальная установка входов
RB6 >| A1 Y0 |> RD2 A0,A1,A2,E1,E2 = 0 E3 = 1
RB5 >| A2 Y1 |> RD3 Активный выход один (низкий уровень)
RB4 >| E1 Y2 |> RD1 При увеличении кода А20 = 000,...,111
RB1 >| E2 Y3 |> RD0 активный выход смещается от Y0 к Y7.
RB0 >| E3 Y4 |> RD6 При E31 != 100 все выходы неактивны
RD7 <| Y7 Y5 |> RD5 (высокий уровень)
8 | GND Y6 |> RD4
~~~~~~~~~~
TM9 (174) 6 триггеров
________
RB7 >| R VCC | 16
RB6 <| Q1 Q6 |> RD2 Начальная установка входов
RB5 >| D1 D6 |< RD3 R=1 D61=111111 C=0
RB4 >| D2 D5 |< RD1 По импульсу R=0,1 сброс Q61=000000
RB1 <| Q2 Q5 |< RD0 По импульсу C=1,0 загрузка Q61 = D61
RB0 >| D3 D4 |< RD6
RD7 <| Q3 Q4 |> RD5
8 | GND C |< RD4
~~~~~~~~~
IE7 (193) 4разрядный счетчик
_________
RB7 | D1 VCC | 16 Начальная установка входов
RB6 <| Q1 D0 |< RD2 R=0 D30=1111 C+=1 C=1 PE=1
RB5 <| Q0 R |< RD3 По импульсу R=1,0 сброс Q30 = 0000
RB4 >| C P|> RD1 По импульсу C+ = 0,1 код Q30 увелич. на 1
RB1 >| C+ P+ |> RD0 По импульсу C = 0,1 код Q30 сокращ. на 1
RB0 <| Q2 PE |< RD6 По импульсу PE = 0,1 загрузка Q30 = D30.
RD7 <| Q3 D3 |< RD5
8 | GND D2 |< RD4
~~~~~~~~~
42
IR8 (164) 8разрядный сдвиговый регистр
_________
RB7 >| SA VCC | 14 Начальная установка входов
RB6 >| SB Q7 |> RD2 R,SA,SB = 1 C = 0
RB5 <| Q0 Q6 |> RD3 По импульсу R=0,1 сброс Q70 = 00000000
RB4 <| Q1 Q5 |> RD1 По импульсу C=1,0
RB1 <| Q2 Q4 |> RD0 сдвиг Q71 = Q60, Q0 = (SA & SB).
RB0 <| Q3 R |< RD6
7 | GND C |< RD5
~~~~~~~~
IR16 (295) 4разрядный сдвиговый регистр
________
RB7 >| SI VCC | 14 Начальная установка входов
RB6 >| D0 Q0 |> RD2 OE,C,SI = 1 PE = 0 D30 = 0000
RB5 >| D1 Q1 |> RD3 Если PE = 1 по имп. C=0,1 загрузка Q30 = D30
RB4 >| D2 Q2 |> RD1 Если PE = 0 по импульсу C=0,1
RB1 >| D3 Q3 |> RD0 сдвиг Q31 = Q20, Q0 = SI
RB0 >| PE C |> RD6 При OE = 0 выходы Q30 отключаются
7 | GND OE |> RD5
~~~~~~~~
561IE8 (CD4017) счетчикдешифратор
________
RB7<| Q5 VCC | 16 Начальная установка входов
RB6 <| Q1 R |< RD2 R,EC=0 C=1
RB5 <| Q0 C |< RD3 Активный выход (по выс. уровню) только один.
RB4 <| Q2 EC |< RD1 По импульсу сброса R=1,0 Q0 = 1(акт. выход)
RB1 <| Q6 P |> RD0 По импульсу инкремента C = 0,1 активный
выход
RB0 <| Q7 Q9 |> RD6 смещается по циклу Q1,Q2,...,Q9,Q0,Q1,...
RD7 <| Q3 Q4 |> RD5 Установка EC = 1 блокирует инкремент.
8 | GND Q8 |> RD4
~~~~~~~~~
LA3 (000) 4 конъюнктора с инверсией
__________
RB7 >| A1 VCC | 14 Начальная установка входов
RB6 >| A2 D1 |< RD2 A1,A2,B1,B2,C1,C2,D1,D2 = 1
RB5 <| A3 D2 |< RD3 A3 = !(A1 & A2)
RB4 >| B1 D3 |> RD1 B3 = !(B1 & B2)
RB1 >| B2 C1 |< RD0 C3 = !(C1 & C2)
RB0 <| B3 C2 |< RD6 D3 = !(D1 & D2)
7 | GND C3 |> RD5
~~~~~~~~~~
43
LI2 (009) 4 конъюнктора
_________
RB7 >| A1 VCC | 14 Начальная установка входов
RB6 >| A2 D1 |< RD2 A1,A2,B1,B2,C1,C2,D1,D2 = 1
RB5 <| A3 D2 |< RD3 A3 = A1 & A2
RB4 >| B1 D3 |> RD1 B3 = B1 & B2
RB1 >| B2 C1 |< RD0 C3 = C1 & C2
RB0 <| B3 C2 |< RD6 D3 = D1 & D2
7 | GND C3 |> RD5
~~~~~~~~~
LP5 (086) 4 схемы ИСКЛЮЧАЮЩЕЕ ИЛИ
_________
RB7 >| A1 VCC | 14 Начальная установка входов
RB6 >| A2 D1 |< RD2 A1,A2,B1,B2,C1,C2,D1,D2 = 1
RB5 <| A3 D2 |< RD3 A3 = A1 ^ A2
RB4 >| B1 D3 |> RD1 B3 = B1 ^ B2
RB1 >| B2 C1 |< RD0 C3 = C1 ^ B2
RB0 <| B3 C2 |< RD6 D3 = D1 ^ D2
7 | GND C3 |> RD5
~~~~~~~~~
LE4 (027) 3 дизъюнктора с инверсией
_________
RB7 >| A1 VCC | 14 Начальная установка входов
RB6 >| A2 A3 |< RD2 A1,A2,A3,B1,B2,B3,C1,C2,C3 = 0
RB5 >| B1 A4 |> RD3 A4 = !(A1 | A2 | A3)
RB4 >| B2 C1 |< RD1 B4 = !(B1 | B2 | B3)
RB1 >| B3 C2 |< RD0 C4 = !(C1 | C2 | C3)
RB0 <| B4 C3 |< RD6
7 | GND C4 |> RD5
~~~~~~~~~
LI6 (021) 2 конъюнктора
_________
RB7 >| A1 VCC | 14 Начальная установка входов
RB6 >| A2 B1 |< RD2 A1,A2,A3,A4,B1,B2,B3,B4 = 1
|
B2 |< RD3 A5 = A1 & A2 & A3 & A4
RB4 >| A3
|
B5 = B1 & B2 & B3 & B4
RB1 >| A4 B3 |< RD0
RB0 <| A5 B4 |< RD6
7 | GND B5 |> RD5
~~~~~~~~~
44
Приложение 4
Краткое описание микросхем
555LA3 4 конъюнктора с инверсией типа A3 = !(A1 & A2)
Входы – A1, A2, B1, B2, C1, C2, D1, D2
Выходы – A3, B3, C3, D3
Исходное состояние – A1, A2, B1, B2, C1, C2, D1, D2 = 1
555LP5 4 схемы ИСКЛЮЧАЮЩЕЕ ИЛИ типа A3 = A1 ^ A2
Входы – A1, A2, B1, B2, C1, C2, D1, D2
Выходы – A3, B3, C3, D3
Исходное состояние – A1, A2, B1, B2, C1, C2, D1, D2 = 0
555LE4 3 дизъюнктора с инверсией типа A4 = !(A1 | A2 | A3)
Входы – A1, A2, A3, B1, B2, B3, C1, C2, C3
Выходы – A4, B4, C4
Исходное состояние – A1, A2, A3, B1, B2, B3, C1, C2, C3 = 0
555LI6 2 конъюнктора типа A5 = A1 & A2 & A3 & A4
Входы – A1, A2, A3, A4, B1, B2, B3, B4
Выходы – A5, B5
Исходное состояние – A1, A2, A3, A4, B1, B2, B3, B4 = 1
555ID7 Дешифратор 3*8
Входы – A0, A1, A2, E0, E1, E2
Выходы – Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7
Исходное состояние – A0, A1, A2, E0, E1 = 0 E2 = 1
Активный выход один (низкий уровень)
При увеличении кода A2–0 = 000, ..., 111 активный выход сме
щается от Y0 до Y7.
При E2–0 != 100 все выходы неактивны (высокий уровень)
555IE7 4разрядный счетчик
Входы – R, PE, C+, C–, D0, D1, D2, D3
Выходы – Q0, Q1, Q2, Q3, P+, P–
Исходное состояние – R, PE, D0, D1, D2, D3 = 0
C+, C– = 1
По импульсу R=1,0 сброс Q3–0 = 0000.
По импульсу инкремента C+ = 0,1 код Q3–0 увеличиваетcя на 1
По импульсу декремента C– = 0,1 код Q3–0 уменьшается на 1
По импульсу PE = 1,0 загрузка Q3–0 = D3–0
555IR11 4разрядный сдвиговый регистр
Входы – R, C, DSR, DSL, S1, S0, D3, D2, D1, D0
Выходы – Q3, Q2, Q1, Q0
Исходное состояние – R, DSR, DSL, S1, S0 = 1 C, D3, D2, D1, D0 = 0
45
По импульсу R=0,1 сброс Q3–0 = 0000
При S1–0 = 11 по импульсу C=1,0 загрузка Q3–0 = D3–0
При S1–0 = 01 по импульсу C=1,0 левый сдвиг Q3–1 = Q2–0,
Q0=DSL
При S1–0 = 10 по импульсу C=1,0 правый сдвиг Q2–0 = Q3–1,
Q3=DSR
555IR16 4разрядный сдвиговый регистр
Входы – OE, C, SI, PE, D3, D2, D1, D0
Выходы – Q3, Q2, Q1, Q0
Исходное состояние – OE, C, SI = 1
PE, D3, D2, D1, D0 = 0
Если PE = 1, по импульсу C=0,1 загрузка Q3–0 = D3–0
Если PE = 0, по импульсу C=0,1 сдвиг Q3–1 = Q2–0, Q0 = SI
При OE = 0 выходы Q3–0 отключаются (третье состояние)
555IR8 8разрядный сдвиговый регистр
Входы – R, C, DA, DB
Выходы – Q7, Q6, Q5, Q4, Q3, Q2, Q1, Q0
Исходное состояние – R, DA, DB = 1 C = 0
По импульсу R=0,1 сброс Q7–0 = 00000000
По импульсу C=1,0 сдвиг Q7–1 = Q6–0, Q0 = (DA & DB)
555TM9 6 триггеров
Входы – R, C, D1, D2, D3, D4, D5, D6
Выходы – Q1, Q2, Q3, Q4, Q5, Q6
Исходное состояние – R, D1, D2, D3, D4, D5, D6 = 1 C = 0
По импульсу R=0,1 сброс Q6–1 = 000000
По импульсу C=1,0 загрузка Q6–1 = D6–1
561IE8 счетчикдешифратор
Входы – R, C, EC
Выходы – Q0, Q1, ..., Q9, P
Исходное состояние – R, EC = 0 C = 1
Активный выход (по высокому уровню) только один
По импульсу сброса R=1,0 Q0 = 1(активный выход) Q1, Q2, ...,
Q9 = 0
По импульсу инкремента C = 0,1 активный выход смещается по
циклу Q1, Q2, ..., Q9, Q0, Q1, ...
Установка EC = 1 блокирует импульс инкремента
46
Библиографический список
1. Ульрих В. А. Микроконтроллеры PIC16C7X: Справочник. СПб.: Наука
и техника, 2000. 253 с.
2. Астапкович А. М. и др. Архитектура однокристальных микроконт
роллеров: Метод. указ. к самостоятельной работе/ГУАП. СПб., 1997.
СОДЕРЖАНИЕ
Лабораторная работа № 1.
Система команд микроконтроллера PIC16С7Х ........................
Лабораторная работа № 2.
Программирование на Ассемблере содержательной задачи микро
контроллера PIC16С7Х .......................................................
Лабораторная работа № 3.
Взаимодействие микроконтроллера PIC16С7Х с внешними уст
ройствами ..........................................................................
Приложения ......................................................................
Библиографический список ..................................................
3
18
24
37
47
47
Документ
Категория
Без категории
Просмотров
1
Размер файла
182 Кб
Теги
ivanovo, prohorov
1/--страниц
Пожаловаться на содержимое документа