Некоммерческое акционерное общество
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
Кафедра «Компьютерные технологии»
МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ
Методические указания к выполнению лабораторных
работ для магистрантов специальности
6М070400 – Вычислительная техника и программное обеспечение
Алматы 2013
Составитель: У.Т. Шанаев. Микропроцессорные системы. Методические указания к выполнению лабораторных работ по дисциплине “Микропроцессорные системы” для магистрантов специальности 6М070400 – Вычислительная техника и программное обеспечение. – Алматы: 2013. – 44 с.
Предлагаемые лабораторные работы направлены на изучение микроконтроллеров семейств PIC (Peripheral Interface Controller) компании Microchip, обладающих особой популярностью и построенных на основе передовых технологий микроконтроллеров. Возможности аппаратных средств микроконтроллеров рассматриваются на примере микроконтроллеров среднего семейства (Mid-Range), а для реализаций конкретных программных структур применяется микроконтроллер PIC16F84, как наиболее популярный и удобный для первоначального изучения.
В качестве специального программного средства проектирования, с помощью которого обеспечивается практическая реализация поставленных задач применяется программный симулятор PIC Simulator IDE фирмы OshonSoft, снабженный обширными инструментальными средствами, предоставляющими широкие возможности как для изучения микроконтроллеров, так и для организации учебных занятий по решению задач проектирования различных устройств на основе микроконтроллеров.
Ил. 10, табл. 5, библиогр. – 7 назв.
Рецензент: ст. преп. Шахматова Г.А.
Печатается по плану издания Некоммерческого акционерного общества “Алматинский университет энергетики и связи” на 2013 г.
© НАО “Алматинский университет энергетики и связи”, 2013 г.
Введение
Курс “Микропроцессорные системы”, посвященный изучению принципов функционирования микропроцессорных систем и обучению навыкам проектирования систем на основе микроконтроллеров, как наиболее распространенного типа микропроцессорных систем. Успех при решении этих задач может быть достигнут только при комплексном подходе проектированию аппаратных и программных средств с учетом особенностей систем различных уровней сложности и различного назначения, принципов архитектурных решений, способов и средств организации обмена информацией.
Известно, что немаловажную роль в усвоении технических дисциплин играет выполнение лабораторных работ по основополагающим темам курса. В методической разработке приведены методические указания, предназначенные для организации лабораторных занятий по дисциплине “Микропроцессорные системы” для специальности 6М070400 – Вычислительная техника и программное обеспечение.
Предлагаемые лабораторные работы направлены на изучение микроконтроллеров семейств PIC (Peripheral Interface Controller) компании Microchip, обладающих особой популярностью и построенных на основе передовых технологий микроконтроллеров. Состав, структуру и возможности аппаратных средств микроконтроллеров будем рассматривать на примере микроконтроллеров среднего семейства (Mid-Range), а для реализаций конкретных программных структур будем применять микроконтроллер PIC16F84, как наиболее популярный и удобный для первоначального изучения. Этот микроконтроллер, как и все микроконтроллеры среднего семейства, построен по гарвардской архитектуре с RISC-процессором, обладающим широкими функциональными возможностями.
В качестве специального программного средства проектирования, с помощью которого обеспечивается практическая реализация поставленных задач применяется программный симулятор PIC Simulator IDE фирмы OshonSoft, снабженный обширными инструментальными средствами, предоставляющими широкие возможности как для изучения микроконтроллеров, так и для организации учебных занятий по решению задач проектирования различных устройств на основе микроконтроллеров.
Предлагаемая методика организации лабораторных занятий проверена многолетней практикой преподавания автора и испытана временем.
1 Лабораторная работа. PIC Simulator IDE
Цель работы:
- ознакомление с порядком организации работы с симулятором PIC;
- освоение порядка организации работы с портами;
- изучение работы программы сложения чисел с учетом переноса;
- освоение порядка составления программы вычитания чисел с учетом заема.
1.1 Оборудование рабочего места
- Компьютер, программа PIC Simulator IDE.
1.2 Практические сведения и методические рекомендации
Состав, структуру и возможности аппаратных средств микроконтроллеров будем рассматривать на примере микроконтроллеров среднего семейства (Mid-Range), а для реализаций конкретных программных структур будем применять микроконтроллер PIC16F84A, как наиболее популярный и удобный для первоначального изучения.
По мере использования в рассматриваемых далее программах будем приводить описание битов регистров специального назначения (SFR, Special Function Registers). В таблице 1.1 приведено описание битов регистра STATUS, используемого в данной (и в последующих) работе (см. таблицу 1.1).
Таблица 1.1 – Регистр STATUS
Биты |
Название |
Описание |
7 |
IRP |
Выбор страницы банка данных (используется при косвенной адресации): 0 – банк 0,1; 1 – банк 2,3 (не используется в МК подгруппы PIC16F8X) |
6-5 |
RP1, RP0 |
Выбор страницы банка данных (используется при прямой адресации): 00 – банк 0; 01 – банк 1; 10 – банк 2; 11 – банк 3 |
4 |
T0’ |
Cрабатывание сторожевого таймера: 0 – по завершению выдержки сторожевого таймера; 1 – после включения питания, а также командами CLRWDT и SLEEP |
3 |
RD’ |
Снижение потребляемой мощности: 0 – по команде SLEEP; 1 – после включения питания, а также командой CLRWDT |
2 |
Z |
Флаг нуля: 0 – ненулевой результат; 1 – нулевой результат |
1 |
DC |
Флаг переноса с третьего разряда: 0 – переноса не было; 0 – перенос был |
0 |
C |
Флаг переноса с седьмого разряда: 0 – переноса не было; 0 – перенос был |
Микроконтроллер PIC16F84A имеет простую и эффективную систему команд, состоящую всего из 35 команд. В таблице 1.2 приведены описания полей команд и применяемые при описании команд обозначения.
Таблица 1.2
Поле |
Описание |
f |
Адрес регистра |
w |
Рабочий регистр |
b |
Номер бита в 8-разрядном регистре |
k |
Константа |
d |
Регистр назначения: d=0 – результат в регистре w; d=1 – результат в регистре f |
[ ] |
Необязательные параметры |
( ) |
Содержимое |
→ |
Присвоение |
< > |
Поле номера бита |
Почти все команды выполняются в течение одного командного цикла. В двух случаях исполнение команды занимает два командных цикла:
- проверка условия и переход;
- изменение программного счетчика как результат выполнения команды.
Один командный цикл состоит из четырех периодов генератора. Таким образом, для генератора с частотой 4 МГц время исполнения командного цикла будет 1 мкс.
Каждая команда МК подгруппы PIC16F8X представляет собой 14-битовое слово, разделенное на код операции (OpCode), и поле для одного и более операндов. Основные форматы команд микроконтроллера изображены на рисунке 1.1.
Для команд работы с байтами f обозначает регистр, с которым производится действие; d – бит, определяющий, куда поместить результат. Если d =0, то результат будет помещен в регистр w, при d=1 результат будет помещен в регистр “f”, упомянутый в команде.
Для команд работы с битами b обозначает номер бита, участвующего в команде, а f – это регистр, в котором данный бит расположен.
Для команд передачи управления и операций с константами, k обозначает восьми- или одиннадцатибитную константу.
13 |
|
|
|
|
8 |
7 |
6 |
|
|
|
|
|
0 |
OpCode |
d |
f |
|||||||||||
d = 0 – w; d = 0 – f; f – регистр адресі |
|||||||||||||
Команды работы с битами |
|||||||||||||
13 |
|
|
10 |
9 |
|
7 |
6 |
|
|
|
|
|
0 |
OpCode |
b |
f |
|||||||||||
b – бит нөмірі; f – регистр адресі |
|||||||||||||
Команды управления и операции с константами |
|||||||||||||
13 |
|
|
|
|
8 |
7 |
|
|
|
|
|
|
0 |
OpCode |
k |
||||||||||||
k – константа |
|||||||||||||
Команды CALL и GOTO |
|||||||||||||
13 |
|
11 |
10 |
|
|
|
|
|
|
|
|
|
0 |
OpCode |
k |
||||||||||||
k – константа |
Рисунок 1.1
Система команд PIC16F8X включает в себя команды работы с байтами, с битами, операции с константами и команды управления (см. таблицу 1.3).
Таблица 1.3
Мнемоника |
Описание команды |
Циклы |
Биты состояния |
Прим. |
1 |
2 |
3 |
4 |
5 |
ADDWF f, d |
Сложение W с f |
1 |
C ,DC ,Z |
1, 2 |
ANDWF f, d |
Логическое И W и f |
1 |
Z |
1, 2 |
CLRF f |
Сброс регистра f |
1 |
Z |
2 |
CLRW |
Сброс регистра W |
1 |
Z |
|
COMF f, d |
Инверсия регистра f |
1 |
Z |
1, 2 |
DECF f, d |
Декремент регистра f |
1 |
Z |
1, 2 |
DECFSZ f, d |
Декремент f, пропустить команду, если 0 |
1(2) |
|
1, 2, 3 |
INCF f, d |
Инкремент регистра f |
1 |
Z |
1, 2 |
INCFSZ f, d |
Инкремент f, пропустить команду, если 0 |
1(2) |
|
1, 2, 3 |
IORWF f, d |
Логическое ИЛИ W и f |
1 |
Z |
1, 2 |
MOVF f, d |
Пересылка регистра f |
1 |
Z |
1, 2 |
MOVWF f |
Пересылка W в f |
1 |
|
|
NOP |
Холостая команда |
1 |
|
|
RLF f, d |
Сдвиг f влево через перенос |
1 |
C |
1, 2 |
Таблица 1.3 (продолжение)
1 |
2 |
3 |
4 |
5 |
RRF f, d |
Сдвиг f вправо через перенос |
1 |
C |
1, 2 |
SUBWF f, d |
Вычитание W из f |
1 |
C,DC,Z |
1, 2 |
SWAPF f, d |
Обмен местами тетрад в f |
1 |
|
1, 2 |
XORWF f, d |
Исключающее ИЛИ W и f |
1 |
Z |
1, 2 |
BCF f, b |
Сброс бита в регистре f |
1 |
|
1, 2 |
BSF f, b |
Установка бита в регистре f |
1 |
|
1, 2 |
BTFSC f, b |
Пропустить команду, если бит в f равен нулю |
1(2) |
|
3 |
BTFSS f, b |
Пропустить команду, если бит в f равен единице |
1(2) |
|
3 |
ADDLW k |
Сложение константы и W |
1 |
C, DC, Z |
|
ANDLW k |
Логическое И константы и W |
1 |
Z |
|
CALL k |
Вызов подпрограммы |
2 |
|
|
CLRWDT |
Сброс сторожевого таймера WDT |
1 |
/TO, /P |
|
GOTO k |
Переход по адресу |
2 |
|
|
IORLW k |
Логическое ИЛИ константы и W |
1 |
Z |
|
MOVLW k |
Пересылка константы в W |
1 |
|
|
RETFIE |
Возврат из прерывания |
2 |
|
|
RETLW k |
Возврат из подпрограммы с загрузкой константы в W |
2 |
|
|
RETURN |
Возврат из подпрограммы |
2 |
|
|
SLEEP |
Переход в режим SLEEP |
1 |
/TO, /P |
|
SUBLW k |
Вычитание W из константы |
1 |
C, DC, Z |
|
XORLW k |
Исключающее ИЛИ константы и W |
1 |
Z |
|
Примечания к таблице:
1) Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1), то используется значение, считываемое с выводов. Например, если в выходной защелке порта, включенного на ввод, находится “1”, а внешнее устройство формирует на этом выводе "0", то в разряде данных будет записан “0”.
2) Если операндом команды является содержимое регистра TMRO (и, если допустимо, d=1), то предварительный делитель, если он подключен к TMRO, будет сброшен.
3) Если в результате выполнения команды изменяется счетчик команд или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выполняется как NOP.
При выполнении первой (и следующих) лабораторной работы обратите внимание на то, что регистры PortA и PortB размещены в банке 0, а регистры TrisA TrisB, определяющие направления их работы, – в банке 1. Поэтому при определении направления работы выводов портов необходимо осуществить переключение банков. Также следует запомнить, что значение переноса/заема при выполнении арифметических операций определяет нулевой разряд (C) регистра Status.
1.3 Рабочее задание
1.3.1 Освоить порядок загрузки программы в симулятор PIC Simulator IDE на примере рассмотрения процесса выполнения программы накопительного сложения и изучить действия, выполняемые командами в составе этой программы:
- запустить программу симулятора иконой . В открывшемся основном окне симулятора Options/Select Microcontroller и определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора 4 MHz (см. рисунок 1.4) выбрать Tools/Assembler и в окне Assembler – File/New;
; Addition ;========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;========================== Sum0 equ 0Ch Sum1 equ 0Dh Num equ 0Eh Add equ 0Fh Del equ 10h Paus equ 11h ;-------------------------------------------- org 0 goto Start ;-------------------------------------------- Start bsf Status,5 movlw .0 movwf TrisB bcf Status,5 movlw .55 movwf Add movlw .20 movwf Num ;-------------------------------------------- clrw clrf Sum1 Sum addwf Add,w btfsc Status,0 incf Sum1,f |
decfsz Num,f goto Sum movwf Sum0 ;-------------------------------------------- Disp movlw .50 movwf Del movfw Sum0 movwf PortB Delay0 decfsz Del,f goto Delay0 Iter movlw .5 movwf Num Pause movlw .5 movwf Paus clrw movwf PortB Del_P decfsz Paus,f goto Del_P movlw .10 movwf Del movfw Sum1 movwf PortB Delay1 decfsz Del,f goto Delay1 decfsz Num,f goto Pause goto Disp ;-------------------------------------------- end |
- сдвинув курсор на табулированное расстояние (клавишей Tab), ввести первую команду представленной выше программы и нажать Enter. Аналогично продолжить ввод остальных команд программы. Метки записываются в начале строки. Сохранить (File/Save As) записанную программу под именем Addition, в результате чего создается файл с расширением asm;
- проассемблировать программу (Tools/Assemble&Load), в результате чего создаются файлы с расширениями hex, lst, obj;
- вывести на экран дисплея светодиодные индикаторы 8xLED Board (см. рисунок 1.2) и проверить работу программы в пошаговом режиме (Rate/Step By Step), наблюдая за изменениями результатов суммирования (в аккумуляторе W и в регистре Sum1) и за значением переноса (в бите 0 регистра Status) при выполнении операций сложения;
Рисунок 1.2
- проверить работу программы в быстром режиме (Rate/Fast), наблюдая за выводом конечных результатов суммирования на панель светодиодных индикаторов (8xLED Board). Обратите внимание на характер отображения двухбайтного результата суммирования с помощью одной панели светодиодных индикаторов: отображение значения старшего байта суммы организовано в виде мигающих данных;
- изменить в программе значение суммируемого на каждом шаге числа (Add) и число суммируемых данных (Num) и проверить работу программы при этих данных.
1.3.2 Составить программу вычитания двух чисел. При этом учесть, что операция вычитания в цифровых устройствах осуществляется посредством сложения участвующих в операции чисел в дополнительном коде и в результате чего значение заема в старший бит числа противоположно значению переноса со старшего бита, возникающего при сложении. Проверить работу составленной программы при различных значениях участвующих в операции вычитания чисел.
1.3.3 Ввести представленную ниже программу последовательного вычитания числа Add с полученного в предыдущей программе результата суммирования с учетом заема со старшего байта, сохранить ее под именем Subtraction и проверить ее работу.
;Subtraction ;========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;========================== Sum0 equ 0Ch Sum1 equ 0Dh Num equ 0Eh Add equ 0Fh Del equ 10h ;-------------------------------------------- org 0 goto Start ;-------------------------------------------- Start bsf Status,5 movlw .0 movwf TrisB bcf Status,5 ;-------------------------------------------- movlw .55 movwf Add |
movlw .20 movwf Num ;-------------------------------------------- movlw 4Ch movwf Sum0 movlw 04h movwf Sum1 ;-------------------------------------------- Sub movlw .55 subwf Sum0,f btfss Status,0 decf Sum1,f decfsz Num,f goto Sub ;-------------------------------------------- Stop clrwdt goto Stop ;-------------------------------------------- end |
1.4 Контрольные вопросы
1. Напишите комментарии к командам в рассмотренных в работе программах.
2. Опишите работу рассмотренных в работе программах.
3. Как осуществляется назначение имен регистрам общего назначения, участвующих в работе программ.
4. Опишите порядок определения направления работы выводов портов микроконтроллера?
5. Как осуществляется запись константы в регистры общего назначения?
6. Объясните порядок организации циклических программных структур.
7. Объясните порядок организации условных переходов в программах.
8. Объясните порядок организации временных задержек в программах.
2 Лабораторная работа. Автоколебательный мультивибратор
Цель работы:
- изучение функциональных возможностей программного симулятора PIC Simulator IDE и освоение методики организации работы с ним;
- освоение порядка составления программы работы микроконтроллеров;
- знакомство с порядком осуществления загрузки данных в регистры микроконтроллера;
- освоение принципов организации циклических программных структур;
- освоение методики вычисления и измерения параметров моделируемого устройства (длительности формируемых импульсов и пауз между ними).
2.1 Оборудование рабочего места
- Компьютер, программа PIC Simulator IDE.
2.2 Рабочее задание
2.2.1 Составить программу формирования прямоугольных сигналов вида меандр с частотой 5 kHz и проверить ее работу, т.е. измерить параметры полученных сигналов:
- запустить программу симулятора иконой . В открывшемся основном окне симулятора Options/Select Microcontroller и определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора 4 MHz (см. рисунок 1.4) выбрать Tools/Assembler и в окне Assembler – File/New;
- ввести представленную ниже программу формирования прямоугольных сигналов вида меандр с частотой 5 kHz;
- сохранить (File/Save As) записанную программу под именем Multi_5. (создается файл с расширением asm). Проассемблировать программу (Tools/Assemble&Load), в результате чего создаются файлы с расширениями hex, lst, obj;
- вывести на экран дисплея осциллограф (Tools/Oscilloscope) и установить время ее отображения (Settings/Change Display Interval) на 1000 мкс (см. рисунок 2.1). Выбрать скорость моделирования (например, Rate/Fast), запустить работу симулятора (Simulation/Start) и пронаблюдать за работой симулятора;
- остановить работу симулятора (Simulation/Stop), после чего в основном окне симулятора выбрать Tools/Breakpoints Manager и установить контрольные точки на строках с командами bcf PortB,0 и bsf PortB,0;
; Multivibrator Meander 5.0 KHz ;======================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;======================== Sec equ 0Ch ;------------------------ org 0 goto Start ;----------------------------------------- Start bsf Status,5 movlw .0 movwf TrisB bcf Status,5 movlw .32 movwf Sec bcf PortB,0 |
nop nop ;----------------------------------------- Pause_0 decfsz Sec,F goto Pause_0 movlw .30 movwf Sec bsf PortB,0 nop nop ;----------------------------------------- Pause_1 decfsz Sec,F goto Pause_1 goto Start ;----------------------------------------- end |
- в основном окне симулятора выбрать скорость моделирования (например, Rate/ Fast), запустить работу симулятора (Simulation/Start). После остановки на первой контрольной точке (bcf PortB,0) щелкнуть в окне Real Time Duration (время работы сбрасывается на нуль) и продолжить работу симулятора. После остановки на следующей контрольной точке (bsf PortB,0) записать значение в окне Real Time Duration (время работы между двумя контрольными точками) и проверить соответствие ее рассчитанному значению длительности полупериода последовательности формируемых импульсов;
Рисунок 2.1
- аналогичным образом проверить длительности формируемых нулевого и единичного уровней последовательности импульсов в течение нескольких периодов работы мультивибратора.
2.2.2 Составить программу формирования прямоугольных сигналов вида меандр с частотой 1 kHz и проверить ее работу, т.е. измерить параметры (т.е. длительности полупериодов) сформированных сигналов.
2.2.3 Составить программу формирования прямоугольных сигналов вида меандр с частотой 0,1 kHz и проверить ее работу, т.е. измерить параметры (т.е. длительности полупериодов) сформированных сигналов.
2.3 Контрольные вопросы
1. Напишите комментарии к командам в рассмотренных в работе программах.
2. Опишите работу рассмотренных и составленных в работе программ.
3. Как выполняется команда decfsz?
4. За сколько машинных циклов выполняется команда goto?
5. За сколько машинных циклов выполняется команда nop?
6. Как вычисляются длительности временных задержек, определяющих значения полупериодов формируемой последовательности импульсов?
7. Объясните порядок организации циклических программных структур.
8. Объясните порядок организации временных задержек в программе.
3 Лабораторная работа. Сигнал тонального вызова
Цель работы:
- изучение функциональных возможностей программного симулятора PIC Simulator IDE и освоение методики организации работы с ним;
- освоение порядка составления программы работы микроконтроллеров;
- освоение принципов создания управляемых устройств;
- освоение порядка составления подпрограмм задержек;
- освоение методики вычисления и измерения параметров смоделированного устройства.
3.1 Оборудование рабочего места
- Компьютер, программа PIC Simulator IDE.
3.2 Практические сведения и методические рекомендации
В таблицах 3.1 и 3.2 приведены описания битов регистров INTCON и Option_REG, используемых в данной работе.
Таблица 3.1 – Регистр INTCON
Биты |
Название |
Описание |
7 |
GIE |
Глобальное разрешение прерываний: 0 – все прерывания запрещены; 1 – разрешены все немаскированные прерывания |
6 |
EEIE |
Прерывание по окончанию записи в EEPROM: 0 – прерывание запрещено; 1 – прерывание разрешено |
5 |
T0IE |
Прерывание по переполнению TMR0: 0 – прерывание запрещено; 1 – прерывание разрешено |
4 |
INTE |
Прерывание по входу RB0/INT: 0 – прерывание запрещено; 1 – прерывание разрешено |
3 |
RBIE |
Прерывание по изменению уровней сигналов на выводах RB4…RB7: 0 – прерывание запрещено; 1 – прерывание разрешено |
2 |
T0IF |
Флаг прерывания по переполнению TMR0: 0 – переполнения TMR0 не было; 1 – произошло переполнение TMR0 |
1 |
INTF |
Флаг прерывания по входу RB0/INT: 0 – прерывания по входу RB0/INT не было; 1 – произошло прерывание по входу RB0/INT |
0 |
RBIF |
Флаг прерывания по изменению уровней сигналов на выводах RB4…RB7: 0 – не было изменения уровня сигнала ни на одном из входов RB4…RB7; 1 – зафиксировано изменение уровня сигнала на одном из входов RB4…RB7 |
Таблица 3.2 – Регистр Option_REG
Биты |
Название |
Описание |
1 |
2 |
3 |
7 |
RBPU’ |
Подтягивающие резисторы: 1 – отключены 0 – включены |
6 |
INTEDG |
Активный фронт сигнала на входе INT: 1 – передний фронт (0/1) 0 – задний фронт (1/0) |
5 |
T0CS |
Такт для TMR0: 1 – внешний такт с вывода RA4/T0CKI 0 – внутренний такт CLKOUT |
4 |
T0SE |
Фронт приращения TMR0 при внешнем такте: 1 – при перепаде 1/0 на выводе RA4/T0CKI 0 – при перепаде 0/1 на выводе RA4/T0CKI |
3 |
PSA |
Предделитель: 1 – включен после сторожевого таймера WDT 0 – включен перед TMR0 |
Таблица 3.2 – Регистр Option_REG (продолжение)
1 |
2 |
3 |
|||||||||||||||||||||||||||
2-0 |
PS2 PS1 PS0 |
Коэффициент деления предделителя:
|
3.3 Рабочее задание
3.2.1 Создать устройство формирования сигнала тонального вызова с высокостабильной частотой 1450 Гц в течение 3-секундного интервала времени, передающего сформированный сигнал при включении устройства на передачу. Необходимо также обеспечить возможность включения или отключения передачи сигнала:
- запустить программу симулятора иконой . В открывшемся основном окне симулятора выбрать Options/Select Microcontroller и определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора (4 MHz);
- в основном окне симулятора выбрать Tools/Assembler и в окне Assembler – File/New и загрузить представленную ниже программу формирования сигнала тонального вызова. Сохранить (File/Save As) записанную программу под именем Call (создается файл с расширением asm), а затем в окне Assembler выбрать Tools/Assemble&Load (создаются файлы с расширениями hex, lst, obj);
- в основном окне симулятора выбрать стимулятор внешних воздействий к выводам микроконтроллера (Tools/Microcontroller View), панель индикаторов (Tools/8xLED Board) и осциллограф (Tools/Oscilloscope). Подготовить осциллограф на отображение процессов в PORTB.0, PORTB.2, PORTB.6 и установить его интервал отображения на 10000 µs;
- в основном окне симулятора определить скорость моделирования как Ultimate, запустить работу симулятора (Simulation/Start);
- в окне стимулятора внешних воздействий (Microcontroller View) перевести состояние вывода RB6 на 1, а затем изменяя состояние вывода RB0, пронаблюдать за изменениями сигналов, отображаемых на соответствующих каналах осциллографа (см. рисунок 3.1);
- остановив работу симулятора и устанавливая контрольные точки на различных строках программы (Tools/Breakpoints Manager), проверить длительности различных участков периода формируемых сигналов;
- таким же путем измерить длительность интервала времени, в течение которого осуществляется передача тонального вызова. При этом необходимо учесть, что скорость моделирования в программе примерно 500 раз меньше скорости работы реального устройства (это проверено автором). Необходимо также учесть, что основная задержка в работе программы происходит из-за моделирования работы менеджера остановок и осциллографа. Поэтому, для сокращения времени измерения следует выключить их, т.е. убрать с экрана дисплея.
;Dial Tone 1.45 KHz ;========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;========================== Sec equ 0Ch SecH equ 0Dh SecL equ 0Eh ;========================== org 0 goto START ;========================== START clrf IntCon clrwdt bsf Status,RP0 movlw .65 movwf TrisB movlw .143 movwf Option_REG bcf Status,RP0 ;-------------------------------------------- movlw .17 movwf SecH movlw .255 movwf SecL ;-------------------------------------------- CYCLE btfsc PortB,0 goto START ;-------------------------------------------- btfss PortB,6 goto PRD ;-------------------------------------------- |
bcf PortB,2 nop nop movlw .85 movwf Sec PAUSE_1 clrwdt decfsz Sec,F goto PAUSE_1 ;-------------------------------------------- bsf PortB,2 nop nop movlw .83 movwf Sec PAUSE_2 clrwdt decfsz Sec,F goto PAUSE_2 ;-------------------------------------------- decfsz SecL,F goto CYCLE decfsz SecH,F goto CYCLE bcf PortB,2 ;-------------------------------------------- PRD clrwdt btfss PortB,0 goto PRD btfss PortB,0 goto PRD goto START ;-------------------------------------------- end |
Рисунок 3.1
3.4 Контрольные вопросы
1. Напишите комментарии к командам в рассмотренной в работе программе.
2. Опишите структуру рассмотренной в работе программы.
3. Как в программе осуществляется управление формированием сигнала тонального вызова?
4. Как в программе реализуется разрешение на формирование сигнала тонального вызова?
5. Объясните порядок выполнения команды decfsz.
6. За сколько машинных циклов выполняется команда goto?
7. Как вычисляются длительности временных задержек, определяющих значения полупериодов формируемого сигнала?
8. Как можно измерить в программе длительность формируемого сигнала тонального вызова?
4 Лабораторная работа. Внешние прерывания
Цель работы:
- изучение функциональных возможностей программного симулятора PIC Simulator IDE и освоение методики организации работы с ним;
- освоение порядка составления программы работы микроконтроллеров;
- освоение порядка составления подпрограмм задержек;
- освоение порядка организации работы с сигналами прерывания;
- освоение методики вычисления и измерения параметров смоделированного устройства.
4.1 Оборудование рабочего места
- Компьютер, программа PIC Simulator IDE.
4.2 Рабочее задание
4.2.1 Создать устройство сканирование двух каналов передачи на наличие запроса на передачу, т.е. сигнала внешнего управления (в виде сигнала внешнего прерывания). При поступлении запроса на передачу (сигнала внешнего прерывания), устройство должно прекратить сканирование каналов и включить соответствующий канал (т.е. сканируемый в момент поступления запроса) на передачу. Сканирование каналов должно быть возобновлено после снятия сигнала запроса.
Описанный процесс необходимо реализовать программно на основе микроконтроллера (микроконтроллера PIC16F84A) с помощью прерывания:
- запустить программу симулятора иконой . В открывшемся основном окне симулятора выбрать Options/Select Microcontroller и определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора (4 MHz);
- в основном окне симулятора выбрать Tools/Assembler и в окне Assembler – File/New и загрузить представленную ниже программу организации работы с внешним прерыванием. Сохранить (File/Save As) записанную программу под именем Interruption (создается файл с расширением asm), а затем в окне Assembler выбрать Tools/Assemble&Load (создаются файлы с расширениями hex, lst, obj);
- в основном окне симулятора выбрать стимулятор внешних воздействий к выводам микроконтроллера (Tools/Microcontroller View), панель индикаторов (Tools/8xLED Board) и осциллограф (Tools/Oscilloscope). Подготовить осциллограф на отображение процессов в PORTB.0, PORTB.2, PORTB.4 и установить его интервал отображения на 100000 µs, режим – Fast;
- в основном окне симулятора определить скорость моделирования как Ultimate, запустить работу симулятора (Simulation/Start). Пронаблюдать за чередованием сканируемых каналов (PORTB.2) и зоной разрешения прерываний (PORTB.4);
- в основном окне симулятора выбрать окно аппаратного стека (Tools/Hardware Stack Viewer) и в зоне разрешения прерываний подать сигнал прерывания (переводом RB0 в нулевое состояние). Заметьте, что в стеке был сохранен адрес возврата из подпрограммы прерывания (см. рисунок 4.1). Также обратите внимание на то, что сканирование каналов прекратилось, т.е. сканируемый в момент прерывания канал включается на передачу;
; Interruption ;---------------------------------------------- ;=========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;=========================== Trigg equ 0Ch W_Temp equ 0Eh Stat_Temp equ 0Fh SecH equ 1Eh SecL equ 1Fh SecH_1 equ 1Ch SecL_1 equ 1Dh SecH_2 equ 1Ah SecL_2 equ 1Bh ;=========================== org 0 goto START ;=========================== org 4 ;****************************** INT movwf W_Temp movf Status,W movwf Stat_Temp ;---------------------------------------------- btfsc PortB,2 goto F1 ;=========================== F0 clrwdt movlw .253 movwf SecH_2 movlw .151 movwf SecL_2 bcf PortB,1 nop ;---------------------------------------------- F0_0 decfsz SecL_2,F goto F0_0 incfsz SecH_2,F goto F0_0 movlw .253 movwf SecH_2 |
movlw .149 movwf SecL_2 bsf PortB,1 nop nop ;---------------------------------------------- F0_1 decfsz SecL_2,F goto F0_1 incfsz SecH_2,F goto F0_1 ;---------------------------------------------- btfsc PortB,0 goto EndInt goto F0 ;=========================== F1 clrwdt movlw .250 movwf SecH_2 movlw .48 movwf SecL_2 bcf PortB,1 ;---------------------------------------------- F1_0 decfsz SecL_2,F goto F1_0 incfsz SecH_2,F goto F1_0 movlw .250 movwf SecH_2 movlw .46 movwf SecL_2 bsf PortB,1 nop ;---------------------------------------------- F1_1 decfsz SecL_2,F goto F1_1 incfsz SecH_2,F goto F1_1 ;---------------------------------------------- btfsc PortB,0 goto EndInt goto F1 ;=========================== |
EndInt bcf IntCon,1 movf Stat_Temp,W movwf Status swapf W_Temp,F swapf W_Temp,W retfie ;****************************** START clrf IntCon clrwdt bsf Status,RP0 movlw .1 movwf TrisB movlw .0 movwf Option_REG bcf Status,RP0 ;---------------------------------------------- TRIGGER btfsc Trigg,0 goto Mark_1 movlw .251 movwf PortB goto Mark_0 Mark_1 movlw .255 movwf PortB ;---------------------------------------------- Mark_0 movlw .197 movwf SecH_1 movlw .121 movwf SecL_1 |
PAUSE_D clrwdt decfsz SecL_1,F goto PAUSE_D incfsz SecH_1,F goto PAUSE_D ;=========================== movlw .245 movwf SecH movlw .255 movwf SecL ;---------------------------------------------- movlw .144 movwf IntCon ;---------------------------------------------- bcf PortB,4 PAUSE clrwdt decfsz SecL,F goto PAUSE incfsz SecH,F goto PAUSE ;---------------------------------------------- bsf PortB,4 clrf IntCon incf Trigg,F goto START ;---------------------------------------------- end |
- не останавливая работу симулятора, перевести микроконтроллер в шаговый режим работы (Step By Step), после чего снять сигнал прерывания (переводом RB0 в единичное состояние). Заметьте, что рабочая точка возвращается в основную часть программы и продолжает выполнять ее с точки прерывания, т.е. с того адреса, который был сохранен в стеке при прерывании, и сканирование каналов возобновляется, что можно наблюдать по изменению сигнала на выводе PORTB.4;
- остановив работу симулятора и устанавливая контрольные точки на необходимых строках программы (Tools/Breakpoints Manager), т.е. путем измерения, определить:
1) длительность сканирования каждого из каналов;
2) длительность защитного интервала времени переключение каналов;
3) длительность зоны разрешения прерываний;
4) частоты передаваемых по каждому из каналов сигналов.
Рисунок 4.1
4.3 Контрольные вопросы
1. Напишите комментарии к командам в рассмотренной в работе программе.
2. Опишите структуру рассмотренной программы организации работы микроконтроллера с прерыванием.
3. Опишите назначение битов регистра IntCon?
4. Объясните порядок организации работы микроконтроллера с прерыванием.
5. Как в программе реализуется зона разрешения прерывания?
6. Объясните порядок выполнения команды incfsz.
7. Объясните порядок реализации временных задержек в программе.
8. Как измеряются длительности временных задержек, определяющих значения полупериодов формируемых сигналов?
5 Лабораторная работа. Вычисляемые переходы
Цель работы:
- освоение порядка организации вычисляемого перехода с помощью команд goto;
- освоение порядка организации вычисляемого перехода с помощью команд retlw.
5.1 Оборудование рабочего места
- Компьютер, программа PIC Simulator IDE.
5.2 Рабочее задание
5.2.1 Изучить принцип “разветвления” программы на 4 сценария, выбор одного из которых ставится в зависимость от текущего состояния клавиатуры, состоящей из двух кнопок, подключенных между выводами RA0, RA1 порта А и корпусом:
- запустить программу симулятора иконой . В открывшемся основном окне симулятора выбрать Options/Select Microcontroller и определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора (4 MHz);
- в основном окне симулятора выбрать Tools/Assembler и в окне Assembler – File/New и загрузить представленную ниже программу организации вычисляемого перехода на 4 сценария работы программы. Сохранить записанную программу под именем Computed Branch-1, а затем проассемблировать ее (Tools/Assemble&Load);
; Computed Branch-1 ;=========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;=========================== Sec equ 0Ch Num equ 0Dh SecL equ 0Eh SecH equ 0Fh ;=========================== org 0 goto START ;****************************** START bsf Status,RP0 movlw .3 movwf TrisA movlw .0 movwf TrisB bcf Status,RP0 ;---------------------------------------------- PULSES movlw .255 movwf SecL movlw .3 movwf SecH DEL decfsz SecL,F goto DEL decfsz SecH,F goto DEL |
movlw .10 movwf Num movf PortA,W addwf PCL,F goto F0 goto F1 goto F2 ;=========================== F3 movlw .128 movwf Sec F3_0 bcf PortB,3 ;---------------------------------------------- decfsz Sec,F goto F3_0 movlw .127 movwf Sec F3_1 bsf PortB,3 ;---------------------------------------------- decfsz Sec,F goto F3_1 ;---------------------------------------------- clrwdt decfsz Num,F goto F3 bcf PortB,3 goto PULSES ;===========================
|
F2 movlw .99 movwf Sec bcf PortB,2 nop ;--------------------------------------------- F2_0 decfsz Sec,F goto F2_0 movlw .98 movwf Sec bsf PortB,2 ;--------------------------------------------- F2_1 decfsz Sec,F goto F2_1 ;------------------------------- clrwdt decfsz Num,F goto F2 bcf PortB,2 goto PULSES ;--------------------------------------------- ;=========================== F1 movlw .66 movwf Sec bcf PortB,1 ;---------------------------------------------- F1_0 decfsz Sec,F goto F1_0 movlw .64 movwf Sec bsf PortB,1 nop nop ;---------------------------------------------- |
F1_1 decfsz Sec,F goto F1_1 ;---------------------------------------------- clrwdt decfsz Num,F goto F1 bcf PortB,1 goto PULSES ;=========================== F0 movlw .32 movwf Sec bcf PortB,0 nop nop ;---------------------------------------------- F0_0 decfsz Sec,F goto F0_0 movlw .31 movwf Sec bsf PortB,0 nop ;---------------------------------------------- F0_1 decfsz Sec,F goto F0_1 ;---------------------------------------------- clrwdt decfsz Num,F goto F0 bcf PortB,0 goto PULSES ;=========================== end |
- изучить структуру программы и ее подпрограммы для формирования соответствующих сигналов;
- в основном окне симулятора выбрать стимулятор внешних воздействий к выводам микроконтроллера (Tools/Microcontroller View) и осциллограф (Tools/Oscilloscope). Подготовить осциллограф на отображение процессов в PortB.0, PortB.1, PortB.2, PortB.3 и установить его интервал отображения на 10000 µs, режим – Fast;
- в основном окне симулятора определить скорость моделирования как Ultimate, запустить работу симулятора (Simulation/Start);
- устанавливая с помощью кнопок RA0, RA1 на стимуляторе внешних воздействий (Microcontroller View) коды каналов (00, 01, 10, 11), пронаблюдать за формированием соответствующих сигналов в виде пакетов импульсов (см. рисунок 5.1);
Рисунок 5.1
- устанавливая контрольные точки на соответствующих строках программы (Tools/Breakpoints Manager), определить параметры сигналов каждого из каналов:
1) частоту импульсов в соответствующих пакетах импульсов;
2) длительность интервала между пакетами импульсов.
5.2.2 В окне Assembler выбрать File/New и загрузить представленную ниже программу организации табличного вычисляемого перехода с целью преобразования двоично-десятичного кода в код 7-сегментного индикатора. Сохранить (File/Save As) записанную программу под именем Computed Branch-2, а затем проассемблировать ее (Tools/Assemble&Load).
- изучить структуру программы и процесс организации преобразования двоично-десятичного кода в код 7-сегментного индикатора;
- в основном окне симулятора выбрать стимулятор внешних воздействий к выводам микроконтроллера (Tools/Microcontroller View) и панель 7-сегментных индикаторов (Tools/7-Segment LED Displays Panel). Подготовить один из индикаторов на отображение, установив (Setup) соответствующие сегменты на отображение значения сигналов на соответствующих выводах (0 – 7) порта B;
; Computed Branch-2 ;============================ ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;============================ Sec equ 0Ch Number equ 0Dh SecL equ 0Eh SecH equ 0Fh ;============================ org 0 goto START ;******************************* TABLE addwf PCL,F retlw b'00111111' retlw b'00000110' retlw b'01011011' retlw b'01001111' retlw b'01100110' retlw b'01101101' retlw b'01111101' retlw b'00000111' retlw b'01111111' retlw b'01101111' retlw .00 retlw .62 retlw .116 retlw .56 retlw .115 retlw .118 |
;******************************* START bsf Status,RP0 movlw .15 movwf TrisA movlw .0 movwf TrisB bcf Status,RP0 ;---------------------------------------------- movlw .255 movwf SecL movlw .255 movwf SecH DEL clrwdt decfsz SecL,F goto DEL decfsz SecH,F goto DEL movf PortA,W call TABLE movwf PortB goto START ;============================ end |
- в основном окне симулятора определить скорость моделирования как Ultimate, запустить работу симулятора (Simulation/Start);
- устанавливая с помощью кнопок RA0 – RA3 на стимуляторе внешних воздействий (Microcontroller View) двоичные коды чисел от 0 до 15, пронаблюдать за их отображением на индикаторе (см. рисунок 5.2). Переходя на пошаговый режим работы программы, проверить соответствие отображаемых символов соответствующим кодам из подпрограммы Table.
5.2.3 Внеся изменения в коды в подпрограмме Table, попробуйте получить отображение других символов.
Рисунок 5.2
5.3 Контрольные вопросы
1. Напишите комментарии к командам в рассмотренной в работе программе.
2. Опишите принципы организации условного перехода с помощью команд btfss и btfsc.
3. Опишите принципы организации условного перехода с помощью команд decfsz и incfsz.
4. Опишите принципы организации вычисляемого перехода с помощью команд goto.
5. Опишите принципы организации вычисляемого перехода с помощью команд retlw.
6. Опишите структуру программы Computed Branch-1.
7. Опишите структуру программы Computed Branch-2.
8. Приведите примеры табличных кодов для отображения указанных преподавателем символов.
6 Лабораторная работа. Динамическая индикация
Цель работы:
- знакомство с принципами организации динамической индикации;
- изучение принципов преобразования двоичных кодов в двоично-десятичные коды.
6.1 Оборудование рабочего места
- Компьютер, программа PIC Simulator IDE.
6.2 Рабочее задание
6.2.1 Изучить принципы организации динамической индикации.
- запустить программу симулятора иконой . В открывшемся основном окне симулятора выбрать Options/Select Microcontroller и, определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора (4 MHz);
- в основном окне симулятора выбрать Tools/Assembler и в окне Assembler – File/New и загрузить представленную ниже программу организации динамической индикации. Сохранить записанную программу под именем Dynamic Display, а затем проассемблировать ее (Tools/Assemble&Load);
; Dynamic Display ;=========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;****************************** DataL equ 0Ch DataH equ 0Dh D_L equ 0Eh D_H equ 0Fh Step equ 1Bh Led0 equ 1Ch Led1 equ 1Dh Led2 equ 1Eh Led3 equ 1Fh Index equ 10h Count equ 11h Temp equ 12h Mem equ 13h TempL equ 15h TempH equ 16h ;****************************** org 0 goto START ;****************************** |
Start bsf Status,RP0 movlw .16 movwf TrisA movlw .00 movwf TrisB bcf Status,RP0 ;-------------------------------------------- clrf DataL clrf DataH ;=========================== Data clrwdt movf DataH,W addlw ECh btfss Status,C goto Incr ;-------------------------------------------- Decr decf Step,F movf Led3,W sublw .9 btfss Status,Z goto Cont movf Led2,W sublw .9 btfss Status,Z goto Cont |
;-------------------------------------------- S_7 movlw .7 movwf Step ;-------------------------------------------- movf Led1,W addlw F8h btfss Status,C goto Cont goto S_1 ;-------------------------------------------- Incr incf Step,F movf DataH,F btfss Status,Z goto Cont movf DataL,W addlw F5h btfsc Status,C goto Cont ;-------------------------------------------- S_1 movlw 1 movwf Step ;=========================== Cont clrwdt movfw Step addwf DataL,F btfsc Status,C incf DataH,F movf DataL,W movwf D_L movf DataH,W movwf D_H call BinDec incfsz Temp,F goto Data call Clr goto Start ;****************************** BinDec bcf Status,C movlw .16 movwf Count clrf Led0 clrf Led1 clrf Led2 clrf Led3 |
;=========================== Loop8 clrwdt rlf D_L,F rlf D_H,F rlf Led0,F rlf Led1,F decfsz Count,F goto adjDEC ;-------------------------------------------- swapf Led1,W andlw 0Fh movwf Led3 ;-------------------------------------------- movfw Led1 andlw 0Fh movwf Led2 ;-------------------------------------------- swapf Led0,W andlw 0Fh movwf Led1 ;-------------------------------------------- movfw Led0 andlw 0Fh movwf Led0 goto Disp ;=========================== adjDEC movlw Led0 movwf FSR call adjBCD ;-------------------------------------------- movlw LED1 movwf FSR call adjBCD ;-------------------------------------------- goto Loop8 ;=========================== adjBCD movlw 3 addwf 0,W movwf Mem btfsc Mem,3 movwf 0 ;-------------------------------------------- |
movlw 30h addwf 0,W movwf Mem btfsc Mem,7 movwf 0 ;-------------------------------------------- retlw 0 ;****************************** Disp clrwdt movlw .3 movwf Index movf Led3,F btfss Status,Z goto IndexS ;-------------------------------------------- decf Index,F movf Led2,F btfss Status,Z goto IndexS ;-------------------------------------------- decf Index,F movf Led1,F btfss Status,Z goto IndexS ;-------------------------------------------- decf Index,F ;=========================== IndexS clrf PortA movf Index,W addwf PCL,F goto Disp0 goto Disp1 goto Disp2 ;=========================== Disp3 clrf PortA movf Led3,W call Table movwf PortB movlw .8 movwf PortA ;-------------------------------------------- |
Disp2 clrf PortA movf Led2,W call Table movwf PortB movlw .4 movwf PortA ;-------------------------------------------- Disp1 clrf PortA movf Led1,W call Table movwf PortB movlw .2 movwf PortA ;-------------------------------------------- Disp0 clrf PortA movf Led0,W call Table movwf PortB movlw .1 movwf PortA ;****************************** Aud movf Led3,W sublw .9 btfss Status,Z return movf Led2,W sublw .9 btfss Status,Z return movf Led1,W sublw .9 btfss Status,Z return movf Led0,W sublw .9 btfss Status,Z return movlw FFh movwf Temp return ;****************************** |
Clr movlw .3 movwf Index movlw .10 movwf Led0 movwf Led1 movwf Led2 movwf Led3 call IndexS ;-------------------------------------------- movlw .255 movwf Temp Del_0 decfsz Temp,F goto Del_0 ;-------------------------------------------- movlw .3 movwf Index movlw .11 movwf Led0 movwf Led1 movwf Led2 movwf Led3 call IndexS ;-------------------------------------------- |
movlw .255 movwf Temp Del_1 decfsz Temp,F goto Del_1 return ;****************************** Table addwf PCL,F ;-------------------------------------------- retlw b'00111111' retlw b'00000110' retlw b'01011011' retlw b'01001111' retlw b'01100110' retlw b'01101101' retlw b'01111101' retlw b'00000111' retlw b'01111111' retlw b'01101111' ;-------------------------------------------- retlw b'10001000' retlw b'00000000' ;****************************** end |
- изучить структуру программы и ее подпрограммы;
- в основном окне симулятора выбрать панель 7-сегментных индикаторов (Tools/7-Segment LED Displays Panel). Подготовить индикаторы на отображение, установив (Setup) соответствующие сегменты на отображение значения сигналов на соответствующих выводах (0 – 7) порта B и на включение их на отображение символов под управлением сигналов на выводах 0 – 3 порта A;
- в основном окне симулятора определив скорость моделирования как Extremely Fast и запустив работу симулятора (Simulation/Start), пронаблюдать за отображением формируемых в программе чисел (см. рисунок 6.1);
- выбрать менеджер остановок (Tools/Breakpoints Manager) и запустить работу симулятора на медленной скорости (например, Rate/Slow). Наблюдая за перемещением рабочей точки по программе, изучить характер выполняемых действий в процессе выполнения программы.
6.2.2 Преобразовать программу кумулятивного сложения из лабораторной работы № 1 на динамическое отображение конечного (двухбайтного) результата и проверьте ее работу.
Рисунок 6.1
6.3 Контрольные вопросы
1. В чем состоит различие статического и динамического методов отображения информации в виде многоразрядного числа.
2. Опишите принципы организации динамического отображения информации в виде многоразрядного числа.
3. Опишите общую структуру программы.
4. Опишите принципы преобразования двоичного кода в двоично-десятичный код.
5. Напишите комментарии к подпрограммам в рассмотренной в работе программе.
6. Опишите порядок подключения 7-сегментных индикаторов для организации динамического отображения информации в виде многоразрядного числа.
7. В каких случаях необходимо применять метод динамического отображения информации?
8. Опишите характер преобразований в программе кумулятивного сложения для динамического отображения конечного (двухбайтного) результата.
7 Лабораторная работа. EEPROM память
Цель работы: освоение принципов организации работы с EEPROM памятью.
7.1 Оборудование рабочего места
- Компьютер, программа PIC Simulator IDE.
7.2 Практические сведения и методические рекомендации
В таблице 7.1 приведено описание битов регистра EECON1, используемого в данной работе.
Таблица 7.1 – Регистр EECON1
Биты |
Название |
Описание |
4 |
EEIF |
Флаг прерывания по окончанию записи в EEPROM: 0 – запись данных в EEPROM не завершена; 1 – запись данных в EEPROM завершена |
3 |
WRERR |
Флаг ошибки записи в EEPROM: 0 – запись завершена; 1 – запись прервана |
2 |
WREN |
Разрешение записи в EEPROM: 0 – запись запрещена; 1 – запись разрешена |
1 |
WR |
Инициализация записи в EEPROM: 0 – запись завершена; 1 – инициализация записи |
0 |
RD |
Инициализация чтения из EEPROM: 0 – чтение завершено; 1 – инициализация чтения |
7.3 Рабочее задание
7.2.1 Изменить (модифицировать) содержимое пяти ячеек EEPROM памяти, начиная с адреса 7. Модификация должна состоять в следующем: к первому числу (по адресу 7) необходимо добавить 1, второму – 2, третьему – 3 и т.д.
- запустить программу симулятора иконой . В открывшемся основном окне симулятора выбрать Options/Select Microcontroller и определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора (4 MHz);
- в основном окне симулятора выбрать Tools/Assembler и в окне Assembler – File/New и загрузить представленную ниже программу организации работы с EEPROM памятью. Сохранить записанную программу под именем EEPROM-1, а затем проассемблировать ее (Tools/Assemble&Load);
- изучить структуру программы;
- в основном окне симулятора выбрать редактор EEPROM-памяти (Tools/EEPROM Memory Editor) и очистить его (Clear);
- в основном окне симулятора определив скорость моделирования как Fast и запустив работу симулятора (Simulation/Start), пронаблюдать за изменениями в редакторе EEPROM-памяти (см. рисунок 7.1);
- остановить работу симулятора и снова запустить ее. Обратите внимаание на то, что при новом запуске программы запись в EEFROM-память происходит исходя из ранее записанных и сохраненных данных.
; EEPROM-1 ;========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;========================== Reg equ 0Ch Count equ 0Dh Add equ 0Eh Step equ 0Fh Num equ 1Ch ;========================== org 0 goto START ;========================== ;***************************** START movlw .6 movwf Add clrf Step clrf Num ;-------------------------------------------- Cont incf Add,F ;========================== RD_EE bcf Status,RP0 movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf Reg ;-------------------------------------------- |
Mod incf Step,F movf Reg,W addwf Step,W movwf Reg ;========================== WR_EE bcf Intcon,GIE movfw Add movwf EEAdr ;-------------------------------------------- movfw Reg movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 Del btfss EECon1,4 goto Del bcf EECon1,4 bcf Status,RP0 ;========================== Incf Num,F movfw Num sublw .5 btfss Status,Z goto Cont goto START ;***************************** end |
Рисунок 7.1
7.2.2 Преобразовать программу из лабораторной работы № 6 на возможность сохранения в EEFROM-памяти достигнутого при остановке числа с целью продолжения формирования чисел исходя из этого числа.
- в основном окне симулятора выбрать Tools/Assembler и в окне Assembler – File/New и загрузить представленную ниже программу динамического отображения формируемых чисел с сохранением достигнутого числа в EEPROM-памяти. Сохранить записанную программу под именем EEPROM-2, а затем проассемблировать ее (Tools/Assemble&Load);
- изучить структуру программы;
- очистить редактор EEPROM-памяти (Clear).
- в основном окне симулятора определив скорость моделирования как Extremely Fast и запустив работу симулятора (Simulation/Start), пронаблюдать за отображаемыми числами и за изменениями в редакторе EEPROM-памяти;
- остановить работу симулятора и снова запустить ее. Обратите внимаание на то, что при новом запуске программы формирование чисел продолжится исходя из достигнутого при остановке числа (см. рисунок 7.2).
; EEPROM-2 ;=========================== ; Microcontroller PIC16F84A ; Clock Frequency 4.0 MHz ;****************************** DataL equ 0Ch DataH equ 0Dh D_L equ 0Eh D_H equ 0Fh Step equ 1Bh Led0 equ 1Ch Led1 equ 1Dh Led2 equ 1Eh Led3 equ 1Fh Index equ 10h Count equ 11h Temp equ 12h Mem equ 13h TempL equ 15h TempH equ 16h Trig equ 17h Add equ 18h ;-------------------------------------------- Del_T equ .30 ;****************************** org 0 goto START ;****************************** Start bsf Status,RP0 movlw .16 movwf TrisA movlw .00 movwf TrisB bcf Status,RP0 ;-------------------------------------------- clrf DataL clrf DataH clrf Step clrf Trig clrf Led0 clrf Led1 clrf Led2 clrf Led3 ;=========================== |
call RD_0 movfw Trig btfsc Status,Z goto Data call RD_EE ;=========================== Data clrwdt movf DataH,W addlw ECh btfss Status,C goto Incr ;-------------------------------------------- Decr decf Step,F movf Led3,W sublw .9 btfss Status,Z goto Cont movf Led2,W sublw .9 btfss Status,Z goto Cont ;-------------------------------------------- S_7 movlw .7 movwf Step ;-------------------------------------------- movf Led1,W addlw F8h btfss Status,C goto Cont goto S_1 ;-------------------------------------------- Incr incf Step,F movf DataH,F btfss Status,Z goto Cont movf DataL,W addlw F5h btfsc Status,C goto Cont ;-------------------------------------------- S_1 movlw 1 movwf Step ;=========================== |
Cont clrwdt movfw Step addwf DataL,F btfsc Status,C incf DataH,F movf DataL,W movwf D_L movf DataH,W movwf D_H call BinDec incfsz Temp,F goto Data call Clr call Fin goto Start ;****************************** BinDec bcf Status,C movlw .16 movwf Count clrf Led0 clrf Led1 clrf Led2 clrf Led3 ;=========================== Loop8 clrwdt rlf D_L,F rlf D_H,F rlf Led0,F rlf Led1,F decfsz Count,F goto adjDEC ;-------------------------------------------- swapf Led1,W andlw 0Fh movwf Led3 ;-------------------------------------------- movfw Led1 andlw 0Fh movwf Led2 ;-------------------------------------------- Swapf Led0,W andlw 0Fh movwf Led1 ;-------------------------------------------- |
movfw Led0 andlw 0Fh movwf Led0 goto Disp ;=========================== adjDEC movlw Led0 movwf FSR call adjBCD ;-------------------------------------------- movlw LED1 movwf FSR call adjBCD ;-------------------------------------------- goto Loop8 ;=========================== adjBCD movlw 3 addwf 0,W movwf Mem btfsc Mem,3 movwf 0 ;-------------------------------------------- movlw 30h addwf 0,W movwf Mem btfsc Mem,7 movwf 0 ;-------------------------------------------- retlw 0 ;****************************** Disp clrwdt movlw .3 movwf Index movf Led3,F btfss Status,Z goto IndexS ;-------------------------------------------- decf Index,F movf Led2,F btfss Status,Z goto IndexS ;-------------------------------------------- |
decf Index,F movf Led1,F btfss Status,Z goto IndexS ;-------------------------------------------- decf Index,F ;=========================== IndexS clrf PortA movf Index,W addwf PCL,F goto Disp0 goto Disp1 goto Disp2 ;=========================== Disp3 clrf PortA movf Led3,W call Table movwf PortB movlw .8 movwf PortA ;-------------------------------------------- Disp2 clrf PortA movf Led2,W call Table movwf PortB movlw .4 movwf PortA ;-------------------------------------------- Disp1 clrf PortA movf Led1,W call Table movwf PortB movlw .2 movwf PortA ;-------------------------------------------- Disp0 clrf PortA movf Led0,W call Table movwf PortB movlw .1 movwf PortA ;=========================== call WR_EE ;****************************** |
Aud movf Led3,W sublw .9 btfss Status,Z return movf Led2,W sublw .9 btfss Status,Z return movf Led1,W sublw .9 btfss Status,Z return movf Led0,W sublw .9 btfss Status,Z return movlw FFh movwf Temp clrf Trig return ;*************************** Clr movlw .3 movwf Index movlw .10 movwf Led0 movwf Led1 movwf Led2 movwf Led3 call IndexS ;-------------------------------------------- movlw .255 movwf Temp Del_0 decfsz Temp,F goto Del_0 ;-------------------------------------------- movlw .3 movwf Index movlw .11 movwf Led0 movwf Led1 movwf Led2 movwf Led3 call IndexS ;-------------------------------------------- |
movlw .255 movwf Temp Del_1 decfsz Temp,F goto Del_1 return ;****************************** Table addwf PCL,F ;-------------------------------------------- retlw b'00111111' retlw b'00000110' retlw b'01011011' retlw b'01001111' retlw b'01100110' retlw b'01101101' retlw b'01111101' retlw b'00000111' retlw b'01111111' retlw b'01101111' ;--------------------------- retlw b'10001000' retlw b'00000000' ;****************************** RD_0 bcf Status,RP0 clrw movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf Trig incf Trig,F btfss Status,Z return ;========================== clrf Add clrf Trig bcf Intcon,GIE Cont_0 movfw Add movwf EEAdr ;-------------------------------------------- |
clrw movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 incf Add,F movfw Add sublw .8 btfss Status,Z goto Cont_0 return ;****************************** Fin clrf Add bcf Intcon,GIE Cont_F movfw Add movwf EEAdr ;-------------------------------------------- movlw FFh movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 incf Add,F movfw Add sublw .8 btfss Status,Z goto Cont_F return ;****************************** |
RD_EE incf Add,F movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf Step ;-------------------------------------------- incf Add,F movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf DataH ;-------------------------------------------- incf Add,F movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf DataL ;-------------------------------------------- incf Add,F movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf Led3 ;-------------------------------------------- incf Add,F movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf Led2 |
;-------------------------------------------- incf Add,F movfw Add movwf EEAdr bsf Status,RP0 bsf EECon1,0 bcf Status,RP0 movf EEData,W movwf Led1 ;-------------------------------------------- return ;****************************** WR_EE clrf Add bcf Intcon,GIE movfw Add movwf EEAdr ;-------------------------------------------- movlw 1 movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 ;========================== incf Add,F movfw Add movwf EEAdr ;-------------------------------------------- movfw Step movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay |
bcf EECon1,4 bcf Status,RP0 ;========================== incf Add,F movfw Add movwf EEAdr ;-------------------------------------------- movfw DataH movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 bcf EECon1,4 bcf Status,RP0 call Delay ;========================== incf Add,F movfw Add movwf EEAdr ;-------------------------------------------- movfw DataL movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 ;========================== incf Add,F movfw Add movwf EEAdr ;-------------------------------------------- movfw Led3 movwf EEData |
bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 ;========================== incf Add,F movfw Add movwf EEAdr ;-------------------------------------------- movfw Led2 movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 ;========================== incf Add,F movfw Add movwf EEAdr ;-------------------------------------------- movfw Led1 movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 |
;========================== incf Add,F movfw Add movwf EEAdr ;-------------------------------------------- movfw Led0 movwf EEData bsf Status,RP0 bsf EECon1,2 movlw 055h movwf EECon2 movlw 0AAh movwf EECon2 bsf EECon1,1 call Delay bcf EECon1,4 bcf Status,RP0 |
movlw .1 movwf Trig ;========================== return ;****************************** Delay clrwdt Del btfss EECon1,4 goto Del return ;****************************** end |
Рисунок 7.2
7.4 Контрольные вопросы
1. Опишите назначение битов регистра EECON1.
2. Опишите порядок организации чтения из EEFROM-памяти.
3. Опишите порядок организации записи в EEFROM-память.
4. В чем состоит различия между регистрами EECON1 и EECON2?
5. В чем состоит смысл записи данных (055h и 0AAh) в регистр EECON2?
6. Опишите структуру программы EEFROM-1.
7. Опишите структуру программы EEFROM-2.
8. Какие данные сохраняются в EEFROM-памяти при остановке программы EEFROM-2?
1. Новиков Ю.В., Скоробогатов П.К. Основы микропроцессорной техники. – М.: Бином, 2009.
2. Предко М. PIC-микроконтроллеры. Архитектура и программирование – М.: ДМК Пресс, 2009.
3. Угрюмов Е. П. Цифровая схемотехника. – СПб.: БХВ-Петербург, 2004.
4. Токхайм Р. Микропроцессоры. Курс и упражнеиия. – М.: Мир, 1988.
5. Уэйкерли Дж. Ф. Проектирование цифровых устройств. – М.: Постмаркет, 2002.
6. Хамахер К. И др. Организация ЭВМ. Пер. с. англ. – СПб.: Питер, 2003.
7. Сугано Т. Дж., Уидмер Н. С. Цифровые системы. Теория и практика: Пер. с англ. – М.: Издательский дом “Вильямс”, 2004.
Содержание
1 Лабораторная работа. PIC Simulator IDE
2 Лабораторная работа. Автоколебательный мультивибратор
3 Лабораторная работа. Сигнал тонального вызова
4 Лабораторная работа. Внешние прерывания
5 Лабораторная работа. Вычисляемые переходы
6 Лабораторная работа. Динамическая индикация
7 Лабораторная работа. EEPROM память
Сводный план 2013 г., поз. 208