МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ

Некоммерческое акционерное общество

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра  «Компьютерные технологии»

МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ

Методические указания к выполнению лабораторных работ для магистрантов специальности
6М070400 – Вычислительная техника и программное обеспечение

Алматы 2013

Составитель: У.Т. Шанаев. Микропроцессорные системы. Методические указания к выполнению лабораторных работ по дисциплине “Микропроцессорные системы” для магистрантов специальности 6М070400 – Вычислительная техника и программное обеспечение. – Алматы: 2013. – 44 с.

Предлагаемые лабораторные работы направлены на изучение микроконтроллеров семейств PIC (Peripheral Interface Controller) компании Microchip, обладающих особой популярностью и построенных на основе передовых технологий микроконтроллеров. Возможности аппаратных средств микроконтроллеров рассматриваются на примере микроконтроллеров среднего семейства (Mid-Range), а для реализаций конкретных программных структур применяется микроконтроллер PIC16F84, как наиболее популярный и удобный для первоначального изучения.

В качестве специального программного средства проектирования, с помощью которого обеспечивается практическая реализация поставленных задач применяется программный симулятор PIC Simulator IDE фирмы OshonSoft, снабженный обширными инструментальными средствами, предоставляющими широкие возможности как для изучения микроконтроллеров, так и для организации учебных занятий по решению задач проектирования различных устройств на основе микроконтроллеров.

Ил. 10, табл. 5, библиогр. – 7 назв.

 

Рецензент: ст. преп. Шахматова Г.А.

 

Печатается по плану издания Некоммерческого акционерного общества “Алматинский университет энергетики и связи” на 2013 г.

 

© НАО “Алматинский университет энергетики и связи”, 2013 г.

 

Введение

Курс “Микропроцессорные системы”, посвященный изучению принципов функционирования микропроцессорных систем и обучению навыкам проектирования систем на основе микроконтроллеров, как наиболее распространенного типа микропроцессорных систем. Успех при решении этих задач может быть достигнут только при комплексном подходе проектированию аппаратных и программных средств с учетом особенностей систем различных уровней сложности и различного назначения, принципов архитектурных решений, способов и средств организации обмена информацией.

Известно, что немаловажную роль в усвоении технических дисциплин играет выполнение лабораторных работ по основополагающим темам курса. В методической разработке приведены методические указания, предназначенные для организации лабораторных занятий по дисциплине “Микропроцессорные системы” для специальности 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 и в окне AssemblerFile/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 и в окне AssemblerFile/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

Коэффициент деления предделителя:

Значение

TMR0

WDT

000

1:2

1:1

001

1:4

1:2

010

1:8

1:4

011

1:16

1:8

100

1:32

1:16

01

1:64

1:32

110

1:128

1:64

111

1:256

1:128

3.3  Рабочее задание

3.2.1    Создать устройство формирования сигнала тонального вызова с высокостабильной частотой 1450 Гц в течение 3-секундного интервала времени, передающего сформированный сигнал при включении устройства на передачу. Необходимо также обеспечить возможность включения или отключения передачи сигнала:

-      запустить программу симулятора иконой . В открывшемся основном окне симулятора выбрать Options/Select Microcontroller и определив в нем тип микроконтроллера (PIC16F84A), нажать на кнопку Select. Также установить в основном окне симулятора частоту тактового генератора (4 MHz);

-      в основном окне симулятора выбрать Tools/Assembler и в окне AssemblerFile/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 и в окне AssemblerFile/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 и в окне AssemblerFile/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 и в окне AssemblerFile/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 и в окне AssemblerFile/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 и в окне AssemblerFile/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.

Содержание

Введение  3

1 Лабораторная работа. PIC Simulator IDE  4

2 Лабораторная работа. Автоколебательный мультивибратор  11

3 Лабораторная работа. Сигнал тонального вызова  13

4 Лабораторная работа. Внешние прерывания  17

5 Лабораторная работа. Вычисляемые переходы   21

6 Лабораторная работа. Динамическая индикация  26

7 Лабораторная работа. EEPROM память  31

Список литературы   43

 

Сводный план 2013 г., поз. 208