• Ешқандай Нәтиже Табылған Жоқ

1 Лабораторная работа №1

N/A
N/A
Protected

Academic year: 2023

Share "1 Лабораторная работа №1"

Copied!
47
0
0

Толық мәтін

(1)

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

МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ 1-часть

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

5В070400 – Вычислительная техника и программное обеспечение АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра

Компьютерные технологии

(2)

СОСТАВИТЕЛЬ: О.Т. Шанаев. Микропроцессорные системы. 1-часть.

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

В предлагаемой методической разработке приведены указания, предна- значенные для организации лабораторных занятий по первой части курса, направленной на изучение структуры и принципов функционирования микро- контроллеров PIC (Peripheral Interface Controller) компании Microchip.

Состав, структуру и возможности аппаратных средств микроконтролле- ров предлагается рассматривать на примере микроконтроллеров среднего се- мейства (Mid-Range), как наиболее популярных и удобных для первоначаль- ного изучения.

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

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

Рецензент: ст. преп. кафедры «Электроника» С.Б. Абдрешева

Печатается по плану издания некоммерческого акционерного общества

«Алматинский университет энергетики и связи» на 2015 г.

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

(3)

Введение

Курс «Микропроцессорные системы» посвящен изучению структуры и принципов функционирования современных микроконтроллеров и формиро- ванию навыков проектирования цифровых управляющих систем на их основе.

В предлагаемой методической разработке приведены указания, предна- значенные для организации лабораторных занятий по первой части курса, направленной на изучение структуры и принципов функционирования микро- контроллеров PIC (Peripheral Interface Controller) компании Microchip.

Состав, структуру и возможности аппаратных средств микроконтролле- ров предлагается рассматривать на примере микроконтроллеров среднего се- мейства (Mid-Range) как наиболее популярных и удобных для первоначально- го изучения.

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

Микроконтроллеры среднего семейства имеют простую и эффективную систему команд, включающую в себя команды работы с байтами, с битами, операции с константами и команды управления (таблица К.1).

Каждая команда представляет собой 14-битовое слово, разделенное на код операции (OpCode) и поле для одного и более операндов. Для команд работы с байтами f обозначает регистр, с которым производится действие; d – бит, определяющий регистр, куда помещается результат операции. Если d = 0, то результат будет помещен в регистр w, при d = 1 результат будет помещен в регистр f, упомянутый в команде. Для команд работы с битами b обозначает номер бита, участвующего в команде, а f – это регистр, в котором данный бит расположен. Для команд передачи управления и операций с константами, k обозначает восьми- или одиннадцатибитную константу.

Почти все команды выполняются в течение одного командного цикла.

Только в случае изменения счетчика команды в результате выполнения команды, исполнение команды занимает два командных цикла. Один командный цикл состоит из четырех периодов генератора. Таким образом, для генератора с частотой 4 МГц время исполнения командного цикла будет 1 мкс.

(4)

Таблица 1.1 Мнемо-

ника Описание команды Циклы Биты

состояния

addwf f, d Сложение W с f 1 C ,DC ,Z

andwf f, d Логическое И W и f 1 Z

clrf f Сброс регистра f 1 Z

clrw Сброс регистра W 1 Z

comf f, d Инверсия регистра f 1 Z

decf f, d Декремент регистра f 1 Z

decfsz f, d Декремент f, пропустить команду, если 0 1(2)

incf f, d Инкремент регистра f 1 Z

incfsz f, d Инкремент f, пропустить команду, если 0 1(2)

iorwf f, d Логическое ИЛИ W и f 1 Z

movf f, d Пересылка регистра f 1 Z

movwf f Пересылка W в f 1

nop Холостая команда 1

rlf f, d Сдвиг f влево через перенос 1 C rrf f, d Сдвиг f вправо через перенос 1 C

subwf f, d Вычитание W из f 1 C,DC,Z

swapf f, d Обмен местами тетрад в f 1

xorwf f, d Исключающее ИЛИ W и f 1 Z

bcf f, b Сброс бита в регистре f 1

bsf f, b Установка бита в регистре f 1 btfsc f, b Пропустить команду, если бит в f равен нулю 1(2) btfss f, b Пропустить команду, если бит в f равен единице 1(2)

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

(5)

1 Лабораторная работа №1. Арифметические операции

Цель работы:

 ознакомление с порядком организации работы с симулятором PIC;

 освоение порядка организации работы с портами микроконтроллера;

 изучение структуры и принципов работы программы формирования числовой последовательности.

1.1 Оборудование рабочего места

Компьютер, программа PIC Simulator IDE.

1.2 Практические сведения

Предметом рассмотрения в данной лабораторной работе является про- грамма, формирующая последовательность данных в виде значений чисел Фибоначчи1 в пределах одного байта (0..255).

Последовательность чисел Фибоначчи {Fn} задаётся линейным рекур- рентным соотношением:

F0 = 0; F1 = 1; Fn = Fn-1 + Fn-2 (n ≥ 2).

В первой программе рассматривается формирование последовательно- сти чисел Фибоначчи (в прямом и в обратном порядке) с последующим отоб- ражением сформированного числа на панели 8-разрядного индикатора.

На первом этапе (блок Data_Wr) второй программы осуществляется формирование последовательности чисел Фибоначчи и сохранение их в реги- страх общего назначения с использованием косвенной адресации. На втором этапе (блок Data_Rd) программы с использованием аналогичной косвенной адресации осуществляется считывание сохраненных в памяти данных и их отображение на панели 8-разрядного индикатора.

Обратите внимание на то, что регистры PortA и PortB размещены в бан- ке 0, а регистры TrisA и TrisB, определяющие направления их работы, – в бан- ке 1. Поэтому при определении направления работы выводов портов необхо- димо осуществить переключение банков.

По мере использования регистров специального назначения (SFR, Special Function Registers) в предлагаемых далее программах будем приводить описание функций их соответствующих битов. Приведем описание функций битов регистра Status, используемого в программах этой работы (она широко

(6)

используется во всех программах, в том числе, и в последующих лаборатор- ных работах), (таблица 1.1).

Таблица 1.1 – Регистр Status

Биты Название Описание

7 IRP Выбор страницы банка данных (используется при косвенной адресации): 0 – банки 0,1; 1 – банки 2,3

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 – перенос был 1.3 Рабочее задание

1.3.1 Исследовать работу программы формирования последовательности чисел Фибоначчи в диапазоне однобайтных двоичных данных (0..255):

 запустите программу симулятора иконой . В открывшемся основ- ном окне симулятора определите тип микроконтроллера (PIC16F84A) и уста- новите частоту тактового генератора (4 MHz);

 загрузите в окно Assembler представленную ниже программу форми- рования последовательности чисел Фибоначчи и сохраните ее под именем Fibonacci8;

; Fibonacci_8

;---

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

FibTemp equ 0Ch Fib0 equ 0Dh Fib1 equ 0Eh Sec equ 0Fh

;---

org 0

;==========================

;--- movf Fib1,w

movwf FibTemp call Display

;--- movf Fib0,w

movwf FibTemp call Display

;--- R_cont movf Fib0,w

subwf Fib1,w movwf FibTemp

(7)

Start clrf IntCon bsf Status,RP0 clrf TrisB bcf Status,RP0

;******************************

Forward clrf FibTemp movf FibTemp,W movwf Fib0

call Display

;--- incf FibTemp,F movf FibTemp,W movwf Fib1

call Display

;--- F_cont movf Fib0,W

addwf Fib1,W btfsc Status,С goto Reverse

;--- movwf FibTemp movf Fib1,W movwf Fib0

movf FibTemp,W movwf Fib1

call Display goto F_cont

;******************************

Reverse clrf PortB call Delay

call Display

;--- movf Fib0,w

movwf Fib1

movf FibTemp,w movwf Fib0

btfss Status,z goto R_cont

;==========================

clrwdt

goto $-1

;==========================

Display movf FibTemp,F btfss Status,Z goto $+3 movlw FFH movwf PortB clrf PortB

;--- clrf PortB

movf FibTemp,W movwf PortB

;--- Delay movlw .7

movwf Sec decfsz Sec,f goto $-1 return

;==========================

end

 проассемблируйте программу (Tools/Assemble&Load);

 напишите в рабочей тетради значения всех однобайтных чисел Фибоначчи в десятичном, двоичном и шестнадцатеричном представлениях;

 выведите на экран дисплея светодиодные индикаторы 8xLED Board и, выбрав скорость моделирования (рекомендуется Rate/Fast), пронаблюдайте за формированием в программе значений чисел Фибоначчи в прямом и обрат- ном порядке (рисунок 1.1). Убедитесь в соответствии сформированных значе- ний чисел значениям записанной в рабочей тетради последовательности чисел Фибоначчи;

 проанализируйте структуру программы и определите назначение ее отдельных функциональных блоков. Запустив работу программы в пошаговом режиме (Rate/Step By Step) и наблюдая за изменениями содержимого реги-

(8)

стров, представленных в основном окне симулятора, проверьте работу команд каждого из блоков программы.

1.3.2 Исследовать работу программы сохранения сформированых чисел Фибоначчи:

 загрузите в новое окно Assembler (File/New) представленную ниже программу формирования последовательности чисел Фибоначчи с сохранени- ем их в памяти и с последующим их считыванием и отображением. Сохраните введенную программу под именем Fibonacci8Mem;

Рисунок 1.1

; Fibonacci8Mem

;---

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

FibTemp equ 0Ch Fib0 equ 0Dh Fib1 equ 0Eh Sec equ 0Fh Num equ 10h

movlw 1Ch movwf FSR

;--- Rd_Next movf INDF,w

movwf FibTemp call Display incf FSR,f decfsz Num,f goto Rd_Next

;==========================

(9)

Total equ 11h

;---

org 0

;==========================

Start clrf IntCon bsf Status,RP0 clrf TrisB bcf Status,RP0

;******************************

Data_Wr movlw 1Ch movwf FSR

;--- clrf Num

clrw

movwf FibTemp movwf Fib0 movwf INDF decf Num,f

;--- incf FSR,f

incf FibTemp,f movf FibTemp,w movwf Fib1

movwf INDF decf Num,f

;--- Wr_Next movf Fib0,w

addwf Fib1,w btfsc Status,C goto Data_Rd movwf FibTemp incf FSR,f movwf INDF incf Num,F

;--- movf Fib1,w movwf Fib0

movf FibTemp,w movwf Fib1

goto Wr_Next

;==========================

Data_Rd movf Num,W

Reverse movf Total,W movwf Num addlw 1Ch movwf FSR

;--- clrf PortB

call Delay

;--- Rd_Rev movf INDF,W

movwf FibTemp call Display decf FSR,f decfsz Num,f goto Rd_Rev

;--- movlw .5

movwf Sec movf Total,W clrf PortB movwf PortB decfsz Sec,F goto $-3

;==========================

clrwdt

goto $-1

;==========================

Display movf FibTemp,F btfss Status,Z goto $+3 movlw FFH movwf PortB clrf PortB

;--- clrf PortB

movf FibTemp,W movwf PortB

;--- Delay movlw .7

movwf Sec decfsz Sec,f goto $-1 return

(10)

 проассемблируйте программу (Tools/Assemble&Load) и, выбрав ско- рость моделирования (рекомендуется Rate/Fast), пронаблюдайте за записью в памяти формируемых значений чисел Фибоначчи и их считыванием из памя- ти. Убедитесь в соответствии записанных в памяти значений чисел значениям записанной в рабочей тетради последовательности Фибоначчи.

1.4 Контрольные вопросы

1. Опишите структуру программы Fibonacci8.

2. Опишите функции и порядок работы отдельных блоков программы Fibonacci8.

3. Опишите структуру программы Fibonacci8Mem.

4. Опишите функции и порядок работы отдельных блоков программы Fibonacci8Mem.

5. Объясните порядок применения косвенной адресации для записи по- следовательности данных в память данных.

6. Объясните порядок применения косвенной адресации для считывания последовательности данных из память данных.

7. Объясните порядок организации работы с подпрограммами.

8. Составьте программу формирования значений членов арифметиче- ской прогрессии по заданным преподавателем параметрам.

2 Лабораторная работа №2. Импульсная последовательность Цель работы:

 освоение принципов организации управляемых процессов;

 освоение методики вычисления и измерения параметров моделируе- мого устройства (длительности формируемых импульсов и пауз между ними).

2.1 Оборудование рабочего места

Компьютер, программа PIC Simulator IDE.

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

2.2.1 Исследовать работу программы формирования последовательности импульсов (вида меандр) с частотой 5 kHz:

 запустите программу симулятора иконой . Определите тип микро- контроллера (PIC16F84A) и установите частоту тактового генератора (4 MHz);

 загрузите в окно Assembler представленную ниже программу форми- рования последовательности импульсов типа меандр с частотой 5 kHz и со- храните ее под именем Meander5KHz и проассемблируйте программу.;

; Meander 5.0 KHz (Osc-1000) Pulse bsf PortB,0

(11)

;==========================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

Sec equ 0Ch

;---

org 0

;--- Start clrf PortA

clrf PortB bsf Status,RP0 movlw .1

movwf TrisA clrf TrisB bcf Status,RP0

;--- btfss PortA,0 goto $-1

;---

movlw .32 movwf Sec nop

nop

decfsz Sec,F goto $-1

;--- bcf PortB,0 movlw .31 movwf Sec nop

decfsz Sec,F goto $-1

;--- btfss PortA,0 goto Start goto Pulse

;--- end

 выведите на экран дисплея осциллограф (Tools/Oscilloscope) и стиму- лятор внешних воздействий (Tools/Microcontroller View). Установите время отображения осциллографа (Settings/Change Display Interval) на 1000 мкс;

(12)

Рисунок 2.1

 выберите скорость моделирования (например, Rate/Extremely Fast) и запустите работу симулятора. Изменением состояния переключателя режима работы устройства (вывод PortA, 0) переведите устройство из режима ожида- ния в рабочий режим и пронаблюдайте за формированием импульсной после- довательности (рисунок 2.1);

 остановите работу симулятора (Simulation/Stop), после чего в основ- ном окне симулятора выберите Tools/Breakpoints Manager и установите кон- трольные точки на строках с командами bsf PortB,0 и bcf PortB,0;

 запустите работу симулятора. После остановки на первой контроль- ной точке (bsf PortB,0) щелкните в окне Real Time Duration (время работы сбрасывается на нуль) и продолжите работу симулятора (рисунок 2.2). После остановки на следующей контрольной точке (bcf PortB,0) запишите значение в окне Real Time Duration (время работы между двумя контрольными точками) и проверьте соответствие ее рассчитанному значению длительности полупе- риода последовательности формируемых импульсов. Аналогичным образом проверьте длительность и нулевого уровня формируемой последовательности импульсов.

(13)

Рисунок 2.2

2.2.2 Изменить значения констант в программе, определяющие длитель- ности нулевого и единичного уровней формируемой последовательности им- пульсов (вида меандр) с частотой 1 kHz и проверить ее работу, т.е. измерить параметры полученных сигналов.

2.2.3 На основе рассмотренных программ составить программу форми- рования прямоугольных сигналов вида меандр с частотой 50 Hz и проверить ее работу, т.е. измерить параметры (т.е. длительности полупериодов) сформи- рованных сигналов.

2.3 Контрольные вопросы

1. Напишите комментарии к командам в рассмотренных в работе про- граммах.

2. Опишите работу рассмотренных и составленных в работе программ.

3. Как выполняется команда decfsz?

4. Как в рассмотренных в работе программах осуществляется переклю- чение режимов работы устройства?

5. За сколько машинных циклов выполняется команда nop?

6. Как вычисляются длительности временных задержек, определяющих значения полупериодов формируемой последовательности импульсов?

7. Объясните порядок организации временных задержек в программах.

8. Составьте программу формирования последовательности импульсов с указанной преподавателем частотой и скважностью равной трем (четырем) и посредством измерений проверьте соответствие ее параметров требуемым.

(14)

3 Лабораторная работа №3. Вычисляемые переходы Цель работы:

 освоение порядка организации вычисляемого перехода с помощью команд goto;

 освоение порядка организации вычисляемого перехода с помощью команд retlw.

3.1 Оборудование рабочего места

Компьютер, программа PIC Simulator IDE.

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

3.2.1 Изучить принципы “разветвления” программы на 4 сценария:

 запустите программу симулятора иконой . В открывшемся основ- ном окне симулятора выберите тип микроконтроллера (PIC16F84A) и устано- вите частоту тактового генератора (4 MHz);

 загрузите в окно Assembler представленную ниже программу органи- зации вычисляемого перехода на 4 сценария работы, сохраните ее под именем Computed Branch-1 и проассемблируйте;

; Computed Branch-1 (Osc-10000)

;==========================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

Sec equ 0Ch SecL equ 0Dh SecH equ 0Eh Num equ 0Fh

;---

org 0

;******************************

Start clrf PortA clrf PortB

;--- bsf Status,RP0

movlw .3 movwf TrisA clrf TrisB bcf Status,RP0

;==========================

movwf Sec nop

decfsz Sec,F goto $-1

;--- bcf PortB,2 movlw .98 movwf Sec decfsz Sec,F goto $-1

;--- clrwdt

decfsz Num,F goto F2 goto Pulses

;==========================

F1 bsf PortB,1

movlw .66 movwf Sec decfsz Sec,F goto $-1

(15)

Pulses movlw .255 movwf SecL movlw .3 movwf SecH decfsz SecL,F goto $-1 decfsz SecH,F goto $-3 movlw .10 movwf Num

;--- movf PortA,W addwf PCL,F goto F0 goto F1 goto F2

;==========================

F3 bsf PortB,3

movlw .128 movwf Sec decfsz Sec,F goto $-1

;--- bcf PortB,3 movlw .127 movwf Sec decfsz Sec,F goto $-1

;--- clrwdt

decfsz Num,F goto F3 goto Pulses

;==========================

F2 bsf PortB,2

movlw .99

;--- bcf PortB,1 movlw .64 movwf Sec nop

nop

decfsz Sec,F goto $-1

;--- clrwdt

decfsz Num,F goto F1 goto Pulses

;==========================

F0 bsf PortB,0

movlw .32 movwf Sec nop

nop

decfsz Sec,F goto $-1

;--- bcf PortB,0 movlw .31 movwf Sec nop

decfsz Sec,F goto $-1

;--- clrwdt

decfsz Num,F goto F0 goto Pulses

;==========================

end

 изучите структуру программы и ее подпрограммы для формирования соответствующих сигналов;

(16)

Рисунок 3.1

 в основном окне симулятора выберите стимулятор внешних воздей- ствий к выводам микроконтроллера (Tools/Microcontroller View) и осцилло- граф. Подготовьте осциллограф на отображение процессов в каналах PortB.0, PortB.1, PortB.2, PortB.3 и установите его интервал отображения на 10000 µs, режим – Fast;

 в основном окне симулятора определите скорость моделирования как Ultimate, запустите работу симулятора (Simulation/Start). Устанавливая с по- мощью кнопок RA0, RA1 на стимуляторе внешних воздействий (Microcontrol- ler View) коды каналов (00, 01, 10, 11), пронаблюдайте за формированием со- ответствующих сигналов в виде пакетов импульсов (рисунок 3.1);

 устанавливая контрольные точки на соответствующих строках про- граммы (Tools/Breakpoints Manager), определите параметры сигналов каждого из каналов:

а) частоту импульсов в соответствующих пакетах импульсов;

б) длительность интервала между пакетами импульсов.

3.2.2 Изучить принципы организации табличного вычисляемого перехо- да для преобразования двоичного кода в код 7-сегментного индикатора:

(17)

 в окне Assembler выбрать File/New и загрузите представленную ниже программу организации табличного вычисляемого перехода для преобразова- ния двоичного кода в код 7-сегментного индикатора. Сохраните записанную программу под именем Computed Branch-2, а затем проассемблируйте ее;

; Computed Branch-2

;---

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

Sec equ 0Ch SecL equ 0Dh SecH equ 0Eh

;---

org 0

;******************************

Start bsf Status,RP0 movlw b'00001111' movwf TrisA

clrf TrisB bcf Status,RP0

;==========================

movlw .255 movwf SecL movlw .255 movwf SecH clrwdt

decfsz SecL,F goto $-2 decfsz SecH,F

goto $-4 movf PortA,W call Table movwf PortB 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 b'00000000' retlw b'00111110' retlw b'01110100' retlw b'00111000' retlw b'01110011' retlw b'01110110'

;==========================

end

 изучите структуру программы и процесс организации преобразова- ния двоично-десятичного кода в код 7-сегментного индикатора;

 в основном окне симулятора выберите стимулятор внешних воздействий к выводам микроконтроллера (Tools/Microcontroller View) и панель 7-сегментных индикаторов (Tools/7-Segment LED Displays Panel). Под- готовьте один из индикаторов на отображение, установив (Setup) сегменты на отображение значения сигналов на соответствующих выводах (0 – 7) порта B;

 в основном окне симулятора определите скорость моделирования как Ultimate, запустите работу симулятора. Устанавливая с помощью кнопок RA0 – RA3 на стимуляторе внешних воздействий (Microcontroller View) двоичные коды чисел от 0 до 15, пронаблюдайте за их отображением на индикаторе (ри- сунок 3.2);

(18)

Рисунок 3.2

 переходя на пошаговый режим работы программы, проверьте соот- ветствие отображаемых символов соответствующим кодам из подпрограммы Table.

3.2.3 Внеся изменения в коды в подпрограмме Table, попробуйте полу- чить отображение других символов.

3.3 Контрольные вопросы

1. Напишите комментарии к командам в рассмотренной в работе про- грамме.

2. Объясните принципы организации условного перехода с помощью команд btfss и btfsc.

3. Объясните принципы организации условного перехода с помощью команд decfsz и incfsz.

4. Объясните принципы организации вычисляемого перехода с помо- щью команд goto.

5. Объясните принципы организации вычисляемого перехода с помо- щью команд retlw.

6. Опишите структуру программы Computed Branch-1.

7. Опишите структуру программы Computed Branch-2.

8. Приведите примеры табличных кодов для отображения указанных преподавателем символов.

(19)

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

Цель работы: изучение и освоение принципов организации динамиче- ской индикации данных.

4.1 Оборудование рабочего места

Компьютер, программа PIC Simulator IDE.

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

4.2.1 Изучить принципы организации динамической индикации:

 запустите программу симулятора иконой . Выберите тип микро- контроллера (PIC16F84A) и установите частоту тактового генератора (4 MHz);

 в новое окно Assembler загрузите представленную ниже программу организации динамической индикации. Сохраните записанную программу под именем Dynamic Display-1 и проассемблируйте ее;

; Dynamic Display-1

;---

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

Num equ 0Ch Fib0 equ 0Dh Fib1 equ 0Eh Temp equ 0Fh Data equ 10h Led0 equ 11h Led1 equ 12h Sec equ 13h

;---

org 0

;==========================

clrf IntCon bsf Status,RP0 clrf TrisA clrf TrisB bcf Status,RP0

;******************************

call Data_Wr

;==========================

movlw .14

;………..

decfsz Num,F goto Wr_Next return

;==========================

BinHex movf Data,W movwf Temp andlw 0Fh movwf Led0 swapf Data,W andlw 0Fh movwf Led1 return

;==========================

HexSeg ;Hex code >> 7-segment code

;………..

movf Led1,W btfsc Status,Z goto $+3 call Table movwf Led1

;………..

movf Led0,W call Table

(20)

movwf FSR

;--- Read movf INDF,W

movwf Data

;--- call BinHex call HexSeg call Display

;--- incf FSR,F decfsz Num,F goto Read

;==========================

clrwdt

goto $-1

;******************************

Data_Wr movlw .14 movwf Num movlw 1Ch movwf FSR

;--- clrf Fib0

clrw

movwf INDF incf FSR,F decf Num,f

;--- movlw .1

movwf Fib1 movwf INDF incf FSR,F decf Num,f

;--- Wr_Next movf Fib1,W

movwf Temp addwf Fib0,W movwf Fib1 movwf INDF movf Temp,W movwf Fib0 incf FSR,F

;==========================

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'01110111' retlw b'01111100' retlw b'00111001' retlw b'01011110' retlw b'01111001' retlw b'01110001'

;==========================

Display movf Led1,W btfsc Status,Z goto $+4 movwf PortB bsf PortA,1 call Delay bcf PortA,1

;--- movf Led0,W movwf PortB bsf PortA,0 call Delay bcf PortA,0

;--- Delay movlw .255

movwf Sec decfsz Sec,F goto $-1 return

;==========================

end

 изучите структуру программы и назначение ее отдельных блоков;

(21)

Рисунок 4.1

 в основном окне симулятора выберите панель 7-сегментных индика- торов (Tools/7-Segment LED Displays Panel). Подготовьте индикаторы на отображение, установив (Setup) соответствующие сегменты на отображение значения сигналов на выводах 0...7 порта B и на включение отдельных инди- каторов на отображение значений соответствующих разрядов числа под управлением сигналов на соответствующих выводах порта A. (Примечание:

не ставить галочку в окошке «Keep Last Display»!);

 назначив скорость моделирования как Extremely Fast, запустите рабо- ту симулятора и пронаблюдайте за динамическим (поочередным) отображе- нием значений разрядов формируемых в программе чисел;

 закомментировав команды call Delay в блоке Display и поставив га- лочку в окошке «Keep Last Display», повторно запустите работу симулятора и пронаблюдайте за имитацией реального отображения последовательности формируемых в программе чисел (рисунок 4.1).

4.2.2 Рассмотреть программу организации динамической индикации двухбайтных чисел:

 в новое окно Assembler загрузите представленную ниже программу организации динамической индикации двухбайтных чисел. Сохраните запи- санную программу под именем Dynamic Display-2 и проассемблируйте ее;

; Dynamic Display-2

;---

andlw 0Fh movwf Led2

(22)

;==========================

Num equ 0Ch Fib0 equ 0Dh Fib0H equ 0Eh Fib1 equ 0Fh Fib1H equ 10h Temp equ 11h TempH equ 12h Data equ 13h DataH equ 14h Led0 equ 15h Led1 equ 16h Led2 equ 17h Led3 equ 18h Index equ 19h Sec equ 1Ah

;---

org 0

;==========================

Start clrf IntCon bsf Status,RP0 clrf TrisA clrf TrisB bcf Status,RP0

;******************************

call Data_Wr

;==========================

movlw .25 movwf Num movlw 1Ch movwf FSR

;--- Read movf INDF,W

movwf Data incf FSR movf INDF,W movwf DataH

;--- call BinHex call HexSeg call Display

;--- incf FSR,F decfsz Num,F

movwf Led3 return

;==========================

HexSeg 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 movf Index,W

addwf PCL,F goto L0 goto L1 goto L2

;---

L3 movf Led3,W

call Table movwf Led3

;………..

L2 movf Led2,W

call Table movwf Led2

;………..

L1 movf Led1,W

call Table movwf Led1

;………..

L0 movf Led0,W

call Table movwf Led0 return

;==========================

Table addwf PCL,F

;--- retlw b'00111111'

(23)

goto Read call Fin

;==========================

clrwdt

goto $-1

;******************************

Data_Wr movlw .25 movwf Num movlw 1Ch movwf FSR

;--- clrf Fib0

clrf Fib0H clrf Fib1 clrf Fib1H clrw

movwf INDF incf FSR,F movwf INDF incf FSR,F decf Num,f

;--- movlw .1

movwf Fib1 movwf INDF incf FSR,F movf Fib1H,W movwf INDF incf FSR,F decf Num,f

;--- Wr_Next movf Fib1H,W

movwf TempH movf Fib1,W movwf Temp addwf Fib0,W movwf Fib1 btfsc Status,C incf Fib1H,F movf Fib1H,W addwf Fib0H,W movwf Fib1H

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'01110111' retlw b'01111100' retlw b'00111001' retlw b'01011110' retlw b'01111001' retlw b'01110001'

;==========================

Display movf Led3,W movwf PortB bsf PortA,3 bcf PortA,3

;--- movf Led2,W movwf PortB bsf PortA,2 bcf PortA,2

;--- movf Led1,W movwf PortB bsf PortA,1 bcf PortA,1

;--- movf Led0,W movwf PortB bsf PortA,0 bcf PortA,0

;--- Delay movlw .255

movwf Sec decfsz Sec,F goto $-1 return

;==========================

(24)

movwf INDF incf FSR,F movf Fib1H,W movwf INDF movf Temp,W movwf Fib0

movf TempH,W movwf Fib0H incf FSR,F

;………..

decfsz Num,F goto Wr_Next return

;==========================

BinHex movf Data,W movwf Temp andlw 0Fh movwf Led0 swapf Data,W andlw 0Fh movwf Led1

;………..

movf DataH,W movwf Temp

movlw .15 movwf PortA clrf PortA

;...

movlw b'01111001' movwf PortB

movlw .4 movwf PortA clrf PortA

;...

movlw b'01010100' movwf PortB

movlw .2 movwf PortA clrf PortA

;...

movlw b'01011110' movwf PortB

movlw .1 movwf PortA clrf PortA return

;--- end

 изучите структуру программы и убедитесь в идентичности ее струк- туре предыдущей программы. Проанализировать произведенные изменения в соответствующих блоках программы с целью обеспечения работы с двух- байтными данными;

 подготовьте индикаторы на отображение, установив (Setup) соответ- ствующие сегменты на отображение значения сигналов на соответствующих выводах (0 – 7) порта B и на включение отдельных индикаторов на отображе- ние значений соответствующих разрядов числа под управлением сигналов на соответствующих выводах порта A;

 назначив скорость моделирования как Extremely Fast, запустите рабо- ту симулятора и пронаблюдайте за динамическим отображением значений разрядов формируемых в программе чисел.

4.3 Контрольные вопросы

1. В чем состоит различие статического и динамического методов отоб- ражения информации в виде многоразрядного числа?

2. Опишите принципы организации динамического отображения ин- формации в виде многоразрядного числа.

3. Опишите общую структуру рассмотренных в работе программ.

(25)

4. Напишите комментарии к подпрограммам в рассмотренным в работе программам.

5. Опишите порядок подключения 7-сегментных индикаторов для орга- низации динамического отображения информации в виде многоразрядного числа.

6. В каких случаях необходимо применять метод динамического отоб- ражения информации?

7. Как программно осуществляется исключение отображения символов незначащих нулей в старших разрядах отображаемых чисел?

8. Опишите принципы преобразования двоичного кода в двоично- десятичный код.

5 Лабораторная работа №5. Двоично-десятичные преобразования Цель работы: изучение и освоение различных принципов преобразова- ния двоичных чисел в двоично-десятичные коды.

5.1 Оборудование рабочего места

Компьютер, программа PIC Simulator IDE.

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

5.2.1 Изучить принципы преобразования двоичных чисел в двоично- десятичные коды посредством деления на десять:

 запустите программу симулятора иконой . В открывшемся основ- ном окне симулятора выберите тип микроконтроллера (PIC16F84A) и устано- вите частоту тактового генератора (4 MHz);

 в новое окно Assembler загрузите представленную ниже программу организации преобразования двоичных чисел в двоично-десятичные коды по- средством деления на десять. Сохраните записанную программу под именем BinDec(div10) и проассемблируйте ее;

;BinDec(div10)

;==========================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

Bin0 equ 0Ch Bin1 equ 0Dh Dec0 equ 1Ch Dec1 equ 1Dh Dec2 equ 1Eh

btfss Status,Z goto IndexS decf Index,F movf Dec2,F btfss Status,Z goto IndexS decf Index,F movf Dec1,F btfss Status,Z goto IndexS

(26)

Temp equ 0Fh Sec equ 1Bh

;==========================

org 0

;******************************

bsf Status,RP0 clrf TrisA clrf TrisB bcf Status,RP0

;--- movlw 94h

movwf Bin0 movlw 26h movwf Bin1

;******************************

clrf Dec0 clrf Dec1 clrf Dec2 clrf Dec3

;******************************

call BinDec call DecSeg call Display

;--- clrwdt

goto $-1

;==========================

BinDec movlw .10 subwf Bin0,F btfsc Status,C goto Inc

;--- movf Bin1,F btfsc Status,Z goto Corr decf Bin1,F

;--- Inc incf Dec1,F

movlw .10 subwf Dec1,W btfss Status,Z goto BinDec

;--- clrf Dec1

IndexS movf Index,W addwf PCL,F goto L0 goto L1 goto L2

;---

L3 movf Dec3,W

call Table movwf Dec3

;---

L2 movf Dec2,W

call Table movwf Dec2

;---

L1 movf Dec1,W

call Table movwf Dec1

;---

L0 movf Dec0,W

call Table movwf Dec0 return

;******************************

Display clrf PortB movlw .15 movwf PortA clrf PortA

;--- movf Dec3,W movwf PortB bsf PortA,3 clrf PortA

;--- movf Dec2,W movwf PortB bsf PortA,2 clrf PortA

;--- movf Dec1,W movwf PortB bsf PortA,1 clrf PortA

;--- movf Dec0,W

(27)

incf Dec2,F movlw .10 subwf Dec2,W btfss Status,Z goto BinDec

;--- clrf Dec2

incf Dec3,F goto BinDec

;==========================

Corr movlw .10 addwf Bin0,F movf Bin0,W movwf Dec0 return

;******************************

DecSeg movlw .3 movwf Index movf Dec3,F

movwf PortB bsf PortA,0 clrf PortA 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'

;==========================

end

 изучите структуру программы BinDec(div10) и назначение ее отдель- ных блоков;

 в основном окне симулятора выбедите панель 7-сегментных индика- торов. Подготовьте индикаторы на отображение, установив (Setup) соответ- ствующие сегменты на отображение значения сигналов на соответствующих выводах (0 – 7) порта B и на включение отдельных индикаторов на отображе- ние значений соответствующих разрядов числа под управлением сигналов на выводах 0 – 3 порта A;

 назначив скорость моделирования как Ultimate, запустите работу си- мулятора и пронаблюдайте за отображением десятичных значений преобразо- ванных в программе чисел;

 определите продолжительность выполняемого в программе преобра- зования и записать ее значение;

 ввести в программу шестнадцатеричные значения других чисел и, за- пустив программу в работу, убедиться в правильности выполненных преобра- зований.

5.2.2 Изучить принципы преобразования двоичных чисел в двоично- десятичные коды посредством определения значений отдельных десятичных разрядов числа:

 блок подпрограммы BinDec(div10) в предыдущей программе замени- те представленной ниже подпрограммой преобразования двухбайтных двоич- ных чисел в двоично-десятичные коды посредством определения значений отдельных десятичных разрядов числа. Сохраните записанную программу под

(28)

;==========================

BinDec movlw 03h subwf Bin1,W btfss Status,C goto D2

;--- movlw E8h

subwf Bin0,F btfss Status,C decf Bin1,F

;--- movlw 03h

subwf Bin1,F btfss Status,C goto Cor3 incf Dec3,F goto BinDec

;==========================

Cor3 movlw E8h addwf Bin0,F btfsc Status,C incf Bin1,F

;--- movlw 03h

addwf Bin1,F

;==========================

D2 movlw 64h

subwf Bin0,F

btfss Status,C goto Cor2 incf Dec2,F goto D2

;==========================

Cor2 movf Bin1,F btfsc Status,Z goto Cor2_

decf Bin1,F incf Dec2,F goto D2

;==========================

Cor2_ movlw 64h addwf Bin0,F

;==========================

D1 movlw 0Ah

subwf Bin0,F btfss Status,C goto Cor1 incf Dec1,F goto D1

;==========================

Cor1 movlw 0Ah addwf Bin0,W

;==========================

movwf Dec0 return

;******************************

 изучите структуру подпрограммы BinDec(thousands,etc.) и назначение ее отдельных блоков;

 назначив скорость моделирования Ultimate, запустите работу симуля- тора. Определите продолжительность выполняемого в программе преобразо- вания и сравните ее с продолжительностью преобразования в предыдущей программе;

 введите в программу шестнадцатеричные значения других чисел и, запустив программу в работу, убедитесь в правильности выполненных преоб- разований.

5.2.3 Блок подпрограммы BinHex в программе организации динамиче- ской индикации (программа Dynamic Display-2 в предыдущей лабораторной работе) замените подпрограммой BinDec(div10). Сохраните записанную про- грамму под именем Dynamic Display(Dec), а затем проассемблируйте ее;

(29)

 назначив скорость моделирования как Ultimate, запустите работу си- мулятора и пронаблюдайте за отображением десятичных значений чисел Фибоначчи (рисунок 5.1).

Рисунок 5.1 5.3 Контрольные вопросы

1. Опишите принципы преобразования двоичных чисел в двоично- десятичные коды посредством последовательного деления на десять.

2. Опишите общую структуру программы преобразования двоичных чи- сел в двоично-десятичные коды посредством последовательного деления на десять.

3. Прокомментируйте команды программы преобразования двоичных чисел в двоично-десятичные коды посредством последовательного деления на десять.

4. Опишите принципы преобразования двоичных чисел в двоично- десятичные коды посредством определения значений отдельных разрядов де- сятичного эквивалента заданного числа.

5. Опишите общую структуру программы преобразования двоичных чи- сел в двоично-десятичные коды посредством определения значений отдель- ных разрядов десятичного эквивалента заданного числа.

6. Прокомментируйте команды программы преобразования двоичных чисел в двоично-десятичные коды посредством определения значений от- дельных разрядов десятичного эквивалента заданного числа.

7. Объясните достоинства и недостатки каждого из рассмотренных ме- тодов преобразования двоичных чисел в двоично-десятичные коды.

8. Как можно программно исключить отображения символов незнача- щих нулей в старших разрядах отображаемых чисел?

6 Лабораторная работа №6. Прерывания

Цель работы: освоение принципов организации работы с сигналами

(30)

6.1 Оборудование рабочего места:

Компьютер, программа PIC Simulator IDE.

6.2 Практические сведения

Управление прерываниями в микроконтроллере осуществляется с по- мощью регистра IntCon (таблица 6.1).

Таблица 6.1 – Регистр IntCon

Биты Название Описание

1 2 3

7 GIE

Глобальное разрешение прерываний:

1 – разрешены все немаскированные прерывания 0 – все прерывания запрещены

6 EEIE

Прерывание по окончанию записи в EEPROM:

1 – прерывание разрешено 0 – прерывание запрещено

5 T0IE Прерывание по переполнению TMR0:

1 – прерывание разрешено 0 – прерывание запрещено 4 INTE Прерывание по входу RB0/INT:

1 – прерывание разрешено 0 – прерывание запрещено

Таблица 6.1 – Регистр IntCon (продолжение)

1 2 3

3 RBIE

Прерывание по изменению уровней сигналов на выводах RB4…RB7:

1 – прерывание разрешено 0 – прерывание запрещено 2 T0IF

Флаг прерывания по переполнению TMR0:

1 – произошло переполнение TMR0 0 – переполнения TMR0 не было 1 INTF

Флаг прерывания по входу RB0/INT:

1 – произошло прерывание по входу RB0/INT 0 – прерывания по входу RB0/INT не было

0 RBIF

Флаг прерывания по изменению уровней сигналов на вы- водах RB4…RB7:

1 – зафиксировано изменение уровня сигнала на одном из входов RB4…RB7

0 – не было изменения уровня сигнала ни на одном из вхо-

(31)

дов RB4…RB7

Некоторые дополнительные сигналы управления, используемые для прерываний (в частности, для организации работы с таймером TMR0), разме- щены в регистре Option_REG (таблица 6.2).

Таблица 6.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

Таблица 6.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

101 1:64 1:32

110 1:128 1:64

111 1:256 1:128

(32)

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

6.3.1 Исследовать работу устройства сканирования двух каналов пере- дачи на наличие запроса на передачу, т.е. сигнала внешнего управления (в ви- де сигнала внешнего прерывания):

 запустите программу симулятора иконой . В открывшемся основ- ном окне симулятора выберите тип микроконтроллера (PIC16F84A) и устано- вите частоту тактового генератора (4 MHz);

 в новое окно Assembler загрузите представленную ниже программу организации работы с внешним прерыванием. Сохраните записанную про- грамму под именем Interruption(Ext) и проассемблируйте ее;

; Interruption(Ext)

;==========================

; Microcontroller PIC16F84A

; Clock Frequency 4.0 MHz

;==========================

Trigg equ 0Ch Sec equ 0Dh SecL equ 0Eh SecH equ 0Fh W_Temp equ 10h Stat_T equ 11h

;==========================

org 0

goto Start

org 4

;*******************************

INT movwf W_Temp movf Status,W movwf Stat_T

;--- btfsc Trigg,0 goto F1

;==========================

F0 bsf PortB,2

movlw .166 movwf Sec decfsz Sec,F goto $-1

;--- bcf PortB,2 movlw .164 movwf Sec

;--- clrwdt

btfsc PortB,0 goto EndInt goto F1

;==========================

EndInt bcf IntCon,1 movf Stat_T,W movwf Status swapf W_Temp,F swapf W_Temp,W retfie

;*******************************

Start clrf IntCon bsf Status,RP0 movlw .1

movwf TrisB

clrf Option_REG bcf Status,RP0 clrf PortB clrf Trigg

;--- Cycle bsf PortB,4

bcf PortB,3 btfsc Trigg,0 bsf PortB,3

;--- movlw .255

movwf SecL movlw .5 movwf SecH decfsz SecL,F

Сурет

Table   addwf   PCL,F
Table   addwf   PCL,F
Table   addwf   PCL,F
Table   addwf   PCL,F
+2

Ақпарат көздері

СӘЙКЕС КЕЛЕТІН ҚҰЖАТТАР

Поэтому крайне необходимо воздействовать на эти процессы не только на уровне интеграции, но и на уровне дифференциации, для получения наилучших результатов и максимальных выгод от

Международный Пакт об экономических, социальных и культурных правах в числе социальных прав закрепляет право семьи на охрану и помощь, право каждого на достаточный уровень жизни, на