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

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

Кафедра «Электроника» 

 

 

 

ЦИФРОВЫЕ УСТРОЙСТВА И МИКРОПРОЦЕССОРЫ

 PIC -СИМУЛЯТОР

 

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

для студентов всех форм обучения специальности

5В070400 – Вычислительная техника и программное обеспечение

  

Алматы 2010

 

СОСТАВИТЕЛЬ: Б.С. Байкенов. PIC-симулятор. Методические указания к выполнению лабораторных работ  по дисциплине «Цифровые устройства и микропроцессоры» для студентов всех форм обучения специальности 5В070400 – Вычислительная техника и программное обеспечение. – Алматы: АУЭС, 2010. – 25 с.  

В методической разработке приводятся краткие сведения об архитектуре семейства PIC-микроконтроллеров фирмы Microchip и PIC-симуляторе, позволяющего пользователю осуществить программно все этапы обработки информации. Приведены схемные и программные решения, касающихся взаимодействия PIC-микроконтроллеров с популярной периферией и реализации типовых интерфейсов.  Рассмотрены примеры программной реализации различных функций: внутренней FLASH-памяти программ и EEPROM-памяти данных, аналого-цифрового преобразования, асинхронной передачи данных с помощью модуля UART и отображения информации на двухстрочном жидкокристаллическом дисплее LCD.

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

 

ВВЕДЕНИЕ 

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

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

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

В последнее время фирма Intel сосредоточила усилия на разработке сложных микропроцессоров для компьютеров и уступила сектор рынка простых микроконтроллеров другим фирмам, в частности, фирмам Atmel и Microchip.

Наиболее широко представлены МК фирмы Microchip серии PIC, которые будут рассмотрены более подробно в данной разработке.

PIC Simulator IDE - это мощное приложение, которое предназначено для разработчиков в графической среде Windows с интегрированным BASIC компилятором, ассемблером, дизассемблером и отладчиком.

В главном окне программы отображается PIC-микроконтроллер c внутренней мнемоникой, последней выполненной инструкцией, мнемоника следующей инструкции, такт и счетчик в режиме реального времени.

В меню Tools содержатся следующие основные команды:

- PROGRAM Memory Editor - команда открывает доступ к редактору FLASH памяти программ и позволяет вручную ввести код операции инструкции;

- EEPROM Memory Editor - команда открывает доступ к редактору EEPROM памяти данных;

- Hardware Stack Viewer (аппаратный стек) - команда откроет аппаратный стек буфера просмотра;

- Assembler - команда запускает ассемблер (по умолчанию расширение ASM).

Директивы ORG (.ORG), EQU (.EQU), DB (.DB), DEFB (.DEFB), DW (.DW), END (.END) ассемблера поддерживаются. Конфигурация слова и буферов памяти также сохраняются в файл HEX. Эти буферы доступны и редактируются. Также можно использовать директивы D (.DCONF), DEFCONF (.DEFCONF).

Как и ранее рассмотренный симулятор 8085 Simulator IDE, симулятор PIC Simulator IDE очень удобен, прост в обращении и позволяет студентам разрабатывать программы в ассемблере для РГР, курсового и дипломного проектирования (не выходя из дома) на персональном компьютере.

.

1 Лабораторная работа №1. Память данных EEPROM

 

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

 

1.1 Общие сведения

 

Данные из EEPROM памяти могут быть прочитаны/записаны в нормальном режиме работы микроконтроллера. Операции выполняются с одним байтом для EEPROM памяти данных. Запись производится по принципу "стирание - запись" для каждого байта.

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

В течение операции записи тактовый генератор продолжает работать, периферийные модули включены и генерируют прерывания, которые "ставятся в очередь" до завершения цикла записи. После завершения записи выполняется загруженная команда (из-за конвейерной обработки) и происходит переход по вектору прерываний, если прерывание разрешено и условие прерывания возникло во время записи.

Доступ к функциям записи/чтения EEPROM памяти данных выполняется через 4 регистра специального назначения:

- EEDATA;

- EEADR;

- EECON1;

- EECON2.

Операции чтения/записи EEPROM памяти данных не приостанавливают выполнение программы. В регистре EEADR сохраняется адрес ячейки EEPROM памяти данных. Данные сохраняются/читаются из регистра EEDATA. В PIC16F877 объем EEPROM памяти данных 256 байт.

Для управления памятью предназначен регистр EECON1, который содержит биты управления косвенной записи/чтения EEPROM памяти данных и FLASH памяти программ. Регистр EECON2 физически не реализован, но используется только при записи для контроля внимания пользователя.

Значение бита EEPRG в регистре EECON1<7> определяет тип памяти, к которой обращаются (см. таблицу 1.1). Если  EEPRG = 0, то операции относятся к EEPROM памяти данных, а если EEPRG = 1, то - к FLASH памяти программ.

В операции чтения используется только один дополнительный бит RD, инициализирующей операцию чтения из указанной памяти. Установив бит RD в «1», значение ячейки памяти будет доступно в регистре данных. 

Для чтения из EEPROM памяти данных необходимо только записать адрес в регистр EEADR и сбросить бит EEPRG в 0. После установки в 1 бита RD данные будут доступны в регистре EEDATA в следующем машинном цикле. Данные в регистре EEDATA сохраняются до выполнения следующей операции чтения или записи в EEDATA.

В операции записи используются два служебных бита WR, WREN и два бита статуса WRERR, EEIF. Бит  WREN применяется для разрешения/запрещения записи. Флаг прерывания EEIF PIR2<4> устанавливается в 1 по завершении записи.

 

Таблица 1.1 – Регистр EECON1 (адрес 18Ch)

EEPGD

   -

   -

  -

WRERR

WREN

  WR

  RD

Бит 7                                                                                                      Бит 0

Бит 7:  EEPGD – выбор памяти

                                   1 = FLASH память программ;

                                   0 = EEPROM память данных;

Биты 6-4:  не используются;

Бит 3:   WRERR – флаг ошибки данных

                                   1 = запись прервана по переполнению;

                                   0 = запись завершена;

Бит 2:   WREN – разрешение записи данных

                                   1 = запись разрешена;

                                   0 = запись запрещена;

 Бит 1:  WR – инициализировать запись данных;

                                   1 =  инициализировать запись;

                                   0 = запись завершена;

Бит 0:   RD – инициализировать чтение данных

                                   1 = инициализировать чтение;

                                   0 = чтение завершено.

 

1.2 Моделирование в PIC Simulator IDE

 

1.2.1 Исследование памяти данных EEPROM.

Необходимо выполнить следующие действия:     

- запустить PIC Simulator IDE;

- нажать Options/Select Microcontroller;

- выбрать PIC16F84 и нажать кнопку Select;

- нажать File/Load Program;

- выбрать файл eeprom.hex и нажать на «Open». Начнется загрузка программы в память PIC;

- нажать на Tools/EEPROM Memory Editor. Откроется окно EEPROM Memory Editor, и  можно отрегулировать его расположение для лучшего обзора;

- нажать на Options/Change EEPROM Write Time, ввести 100 для нового значения и нажать на OK;

Реальное значение составляет около 20000 циклов синхронизации при 4 MHz. Выбранное значение 100 - короткое, потому что оно не может оказать воздействие на функциональность программы, но может значительно сократить время выполнения моделирования;

- выбрать Rate/Extremely Fast;

- выделить опцию в Options/Infinite Loop Stops Simulation;

- нажатием на «Simulation/Start» начнется моделирование.

Эта программа заполняет всю память данных EEPROM и введет МК в бесконечный цикл. Выявив бесконечный цикл, симулятор автоматически остановит моделирование.

 

 

 

Рисунок 1.1 - Вид экрана с выполняемой программой

 

1.2.2 Листинг программы.

Dim a As Byte               ; адрес ячейки в EEPROM

Dim b As Byte               ; данные, которые будут записаны в EEPROM

For a = 0 To 63              ; цикл для адресов EEPROM емкостью 64 байта

b = 255 – a                     ; значение ‘b’ для записи в память

Write a, b                       ; запись ‘b’ в ячейку ‘a

Next a                            ; выбор следующей ячейки ‘a’ EEPROM

 

 

 

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

 

1) Какие регистры управляют памятью микроконтроллера?

2) В какие регистры помещаются адрес и данные?

3) Для чего при операции записи используются EECON1 и EECON2?

4) Какая емкость памяти данных EEPROM?

5) Какая емкость памяти программ FLASH?

 

2 Лабораторная работа №2. Модуль АЦП

 

Цель работы: изучение настройки каналов модуля аналого-цифрового преобразователя с помощью регистров управления ADCON0 и ADCON1, а также методов выравнивания результатов преобразования.

 

2.1 Общие сведения

 

Модуль АЦП имеет восемь аналоговых каналов. Входной аналоговый сигнал через коммутатор каналов заряжает внутренний конденсатор СHOLD. Модуль АЦП преобразует напряжение, удерживаемое на конденсаторе СHOLD, в соответствующий 10-разрядный цифровой код методом последовательного приближения.

      Для управления АЦП используются два специальных регистра: ADCON0 и ADCON1, расположенные в 0 и 1 банках памяти соответственно. Регистр ADCON0 используется для настройки работы модуля АЦП (см. таблицу 2.1).

 

Таблица 2.1 – Регистр ADCON0 (адрес 1Fh)

ADCS1

ADCS0

CHS2

CHS1

CHS0

GO/DONE

-

ADON

Бит 7                                                                                                            Бит 0

Биты 7-6:  ADCS1- ADCS0 – выбор источника тактового сигнала

         00 = FOSC/2;   01 = FOSC/8;  10 = FOSC/32;   11 = FRC (внутренний генератор АЦП).

Биты 5-3:   CHS2- CHS0 – выбор аналогового канала

                   000 = канал 0, (RA0/AN0);  .... 101 = канал 4, (RA5/AN4);

                   101 = канал 5, (RE0/AN5);  … 111 = канал 7, (RE2/AN7);

Бит 2:    GO/DONE – бит статуса АЦП

              1 = начало преобразования;

              0 = состояние ожидания;

Бит 1:    не используется;

Бит 0:   ADON – включение АЦП

             1 = модуль АЦП  включен;

             0 = АЦП выключен.

 

Регистр ADCON1 выбирает входы модуля и режимы работы, выбранных каналов АЦП.

В регистры ADRESH:ADRESL сбрасывается 10-разрядный результат цифрового преобразования и флаг GO/DONE (ADCON0) и устанавливается флаг прерывания ADIF PIR1<6>.

После включения и конфигурации ФЦП выбирается рабочий аналоговый канал. Соответствующие биты TRIS аналоговых каналов должны быть настроены на вход. Перед началом преобразования обязательно необходимо выдержать временную паузу не менее 20мкс.

Запись результата преобразования может выполняться с правым или левым выравниванием (см. рисунок 2.1), в зависимости от значения бита ADFM регистра ADCON1<7>. Не задействованные биты регистров ADRESH:ADRESL читаются как «0». Если модуль АЦП выключен, то 8-разрядные регистры ADRESH:ADRESL могут использоваться как регистры общего назначения.

Рисунок 2.1 – Выравнивание результата  АЦП

 

2.2 Моделирование в PIC Simulator IDE

 

2.2.1 Исследование модуля АЦП.

Необходимо выполнить следующие действия:

- запустить PIC симулятор IDE;

- нажать на Options/Select Microcontroller;

- выбрать PIC16F877 и нажать на Select;

- нажать на File/Load Program;

- выбрать adc.hex file и нажать Open. Начнется загрузка программы в память PIC;

- нажать на Tools/Microcontroller View - откроется окно Microcontroller View;

- отрегулировать расположение окон для лучшего обзора;

- выбрать Rate/Extremely Fast;

- нажать на Simulation/Start - начнется моделирование;

- нажать кнопку А, связанную с выводом RA0/AN0 (использование «панели прокрутки» изменяет аналоговое значение на этом выводе);

- нажать кнопку Accept и посмотреть, как это изменит состояние выводов порта PORTB.

Последние три шага можно повторить несколько раз и посмотреть на результаты. Вид экрана с выполняющейся программой показан на рисунке 2.2.

2.2.2 Листинг программы.

Symbol ad_action = ADCON0.GO_DONE  ;новое название для бита запуска A/D

Symbol display = PORTB                             ;новое название для PORTB

TRISB = %00000000      ; настойка PORTB как выход

TRISA = %111111          ; настройка PORTA как вход

ADCON0 = 0xc0             ; внутренний генератор

ADCON1 = 0                   ; настройка PORTA и PORTE как аналоговых входов

High ADCON0.ADON   ; запуск АЦП (A/D)

main:

Gosub getadresult            ; переход в подпрограмму преобразования

display = ADRESH         ; результат преобразования в PORTB

Goto main                        ; бесконечное повторение программы

End

getadresult:                       ; подпрограмма преобразования

High ad_action                 ; запуск преобразования

While ad_action               ; пауза для окончания преобразования

Wend

Return

 

 

Рисунок 2.2 - Вид экрана с выполняемой программой

 

2.3 Содержание отчета

 

- цель работы;

- листинг программы и ее описание;

- вид экрана микроконтроллера;

- выводы.

 

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

 

1) Как включить модуль АЦП?

2) Зачем выдерживается пауза перед преобразованием?

3) Как происходит настройка каналов АЦП?

4) Где содержится байт результата преобразования?

5) Что такое выравнивание результата преобразования?

 

 

3 Лабораторная работа №3. Модуль UART

 

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

 

3.1 Общие сведения

 

Универсальный асинхронный приемопередатчик (UART) - это модуль последовательного ввода/вывода, который может работать в дуплексном асинхронном режиме для связи с терминалами, персональными компьютерами.

Специальные регистры TXSTA (transmitter status) и RCSTA (receiver status) модуля USART являются регистрами управления и статуса, соответственно передатчика и приемника. 

В асинхронном режиме UART использует стандартный формат (NRZ): один стартовый бит, 8 или 9 битов данных и один стоповый бит.

Модуль USART в асинхронном режиме состоит из следующих элементов:

- генератор скорости обмена;

- цепь опроса;

- асинхронный передатчик;

- асинхронный приемник.

Структурная схема организации связи между МК и ПК в асинхронном режиме показана на рисунке 3.1.

Рисунок 3.1 – Структурная схема организации связи в асинхронном режиме

 

Главным в передатчике USART является сдвиговый регистр TSR, который получает данные из буфера передатчика TXREG (см. рисунок 3.2).

Рисунок 3.2 – Структурная схема асинхронного передатчика USART

 

Данные в регистр TXREG загружаются программно. После передачи стопового бита предыдущего байта, в последнем машинном такте цикла RRG, TSR загружается новым значением из TXREG (если оно присутствует), после чего устанавливается флаг прерывания TXIF (PIR1<4>). Прерывание может быть разрешено или запрещено битом TXIE (Р1Е1<4>). Флаг TXIF устанавливается независимо от состояния бита TXIE и не может быть сброшен в '0' программно. Очистка флага TXIF происходит только после загрузки новых данных в регистр TXREG. Аналогичным образом бит TRMT (TXSTA<1>) отображает состояние регистра TSR.

Для разрешения передачи необходимо установить бит TXEN (TXSTA<5>) в '1'. Передача данных не начнется до тех пор, пока в TXREG не будут загружены новые данные; не придет очередной тактовый импульс от генератора BRG. Можно сначала загрузить данные в TXREG, а затем установить бит TXEN.

 

                    Рисунок 3.3 – Временная диаграмма передачи данных

 

Прием данных производится аналогично, под управлением регистра RCSTA.

 

3.2 Моделирование в PIC Simulator IDE

 

3.3.1 Исследование модуля UART.

Необходимо выполнить следующие действия:

- запустить PIC симулятор IDE;

- нажать на Options/Microcontroller;

- выбрать PIC16F877 и нажать на Select;

- нажать Options/Change Clock Frequency;

- ввести 4 и нажать кнопку OK;

- нажать Options/Change UART Transmit/Receive Time;

- ввести 100 и нажать кнопку OK;

- нажать File/Load Program;

- выбрать файл uart.hex и нажать кнопку Open;

- нажать Tools|Hardware UART Simulation Interface (откроется окно симуляции аппаратного интерфейса UART);

- выбрать Rate/Extremely Fast simulation rate;

- нажать Simulation/Start (начнётся выполнение программы).

 После этого необходимо выждать, пока программа выдаст 6 строк текста в последовательный порт. Для пересылки данных в порт используется одна из трёх доступных кнопок интерфейса UART. Последние два шага можно несколько раз повторить и посмотреть на результаты.

 

Рисунок 3.4 - Вид экрана с выполняемой программой

 

3.2.2 Листинг программы.

Dim i As Byte                                      ; объявим переменную i как байт

Hseropen 9600                                     ; включение UART, скорость 9600 бод

WaitMs 1000                                       ; задержка в 1000 мс

For i = 10 To 5 Step – 1                       ; организуем цикл с уменьшением

Hserout "Number: ", #i, CrLf              ; передача данных

WaitMs 500                                          ; задержка в 500мс

Next i

loop:

Hserin i                                                 ; ожидание данных из порта

Hserout "Number: ", #i, CrLf              ; передача данных в порт

Goto loop                                             ; бесконечный цикл

 

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

 

1) Как включить модуль UART?

2) Как настроить UART в режим приема?

3) Как настроить UART в режим передачи?

4) Какой формат передаваемого слова?

 

4 Лабораторная работа №4. Модуль LCD

 

Цель работы: изучить работу модуля жидкокристаллического индикатора с контроллером HD44780 фирмы Hitachi в различных режимах.

 

4.1 Общие сведения

 

Наибольшее распространение получили ЖКИ (Liquid Christal Display - LCD) с контроллером HD44780 фирмы Hitachi.

 

Таблица 4.1 - Стандартные выводы ЖК-модуля

вывод

1

2

3

4

5

6

7

8

9

10

11

12

13

14

Функ.

Gnd

Vdd

V0

RS

R/W

E

D0

D1

D2

D3

D4

D5

D6

D7

 

Модуль HD44780 содержит два регистра:

- регистр команд IR (Instraction Register);

- регистр данных DR (Data Register).

Выбор регистров осуществляется путем подачи сигнала управления от микроконтроллера  на вывод RS: если RS = 0, то будет подключен регистр команд, а если RS = 1, то регистр данных. Вывод R/W – чтение – 1; запись - 0, а вывод Е – Enable – для строб-сигнала положительной полярности (+5В) длительностью не менее 450 нс, в течение которого записываются передаваемые биты.

Управление ЖКИ осуществляется через порт Е (Е0, Е1 и Е2), питание и подсветка подключаются напрямую - +5В, а данные или команды подаются от порта В (см. рисунок 4.1).

 

Рисунок 4.1 – Схема подключения ЖКИ к микроконтроллеру

 

Регистр IR принимает команды от микроконтроллера, например: смещение курсора, гашение табло или установку адреса ин­дикатора.

Регистр DR служит для промежуточного хранения дан­ных, которые затем с помощью внутренних операций автоматически передаются в память отображаемых данных (DD - Display Data) DDRAM или в память знакогенерато­ра (CG - Character Generator) CGRAM.

Содержимое регистра IR не может быть прочитано МК. Возможно только чтение флага занятости (разряд 7) и текущего состояния внутреннего счетчика адреса AC (Address Counter) (разряды 6...0).

Установленный флаг занятости (В=1) означает, что модуль HD44780 занят выполнением внутренней операции и в данный момент к приему не готов. Соответственно, когда В=0 флаг занятости сигнализирует о том, что модуль готов к приему.

Считывание данных из памяти DD или CG выполняется через регистр DR. После того как МК записал некоторый адрес в регистр IR, байт данных, расположенный в памяти по этому адресу, с помощью внутренней операции переписывается в регистр DR. Процесс чтения завершается считыванием байта данных из этого регистра. Когда текущая операция чтения завершена, с помощью функции автоинкремента в регистр DR записывается байт данных, извлеченный из памяти по следующему адресу, который будет использован при очередном считывании.

В модуле HD44780 используется две разные памяти:

- DDRAM — для хранения отображаемых данных;

- CGRAM — для хранения битовых комбинаций, которые соответствуют матрице размером 5x8 или 5x10 (определяет форму символа).

Емкость памяти  DD составляет 80 знаков, представленных в  8-разрядной ASCII-кодировке. Из них на двухстрочном табло могут быть одновременно отображены 16 символов в каждой строке, однако с помощью операции сдвига последующие символы также могут оказаться в отображаемой области (выделено жирным).

 

Таблица 4.2 – Двухстрочное табло ЖКИ

Позиция

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

39

40

Адрес DD-RAM

00

01

02

03

04

05

06

07

08

09

0A

0B

0C

0D

0E

0F

10

..

26

27

Адрес DD-RAM

40

41

42

43

44

45

46

47

48

49

4A

4B

4C

4D

4E

4F

50

..

66

67

 

Первая строка начинается с адреса 00h, а вторая — с адреса 40h, (64d). Память разбита на две половины по 40d (28h) байт каждая, причем между последним адре­сом первой строки и первым адресом второй строки есть разрыв в 24d байта.

После сдвига вправо первая строка начинается с адреса $01, а вторая строка - с адреса $41, а после сдвига влево первая строка начинается с адреса $27, а вто­рая строка — с адреса $67.

Знакогенератор - это память типа ROM, предназначенная для хранения би­товых комбинаций, соответствующих матрице размерами 5x8 или 5x10. В этой памяти можно хранить информацию о 208 (в случае матрицы 5x8) или 32 (в случае матрицы 5x10) символов. Распределение знаков показано в таблице 7.4, причем четыре старших разряда символа определяют его размещение по горизон­тали, а четыре младших — по вертикали (например, "А" = $41).

В модуле HD44780 используется встроенная схема сброса по включению питания. При этом реализуются следующие функции:

- начальная инициализация: DL = 1 - 8-разрядный интерфейс; N = 1 - двухстрочное табло; F = 0 - матрица 5x8;

- управление табло: D = 0 - табло отключено; С = 0 - курсор отключен
В = 0 - мерцание отключено;

- очистка табло;

- режим ввода данных: I/D = 1 - инкремент на 1; S = 0 - нет сдвига тa6ло.

Все функции управления табло реализуются с помощью команд, перечисленных в таблице 3. Следует учесть, что после записи или чтения байта данных адрес памяти DD или CG автоматически инкрементируется или декрементируется по ниспадающему фронту сигнала занятости. Однако новое значение в счетчик адреса АС записывается только спустя TADD = 1,5/fOSC – тактовая частота HD44780.

 

Таблица 4.3 – Система команд HD44780

Команда

RS

R/W

D7 – D0

Описание

Tвып

Clear Display

 

 

Return Home

 

Display ON/OFF

control

 

Function Set

 

Set Entry Inc

 

 

Set CGRAM address

 

Set DDRAM address

 

Read BUSY flag and

Address

Write Data to RAM

Read Data from RAM

0

 

 

0

 

0

 

 

 

0

 

0

 

 

0

 

 

0

 

 

0

 

 

1

 

1

0

 

 

0

 

0

 

 

 

0

 

0

 

 

0

 

 

0

 

 

1

 

 

0

 

1

00000001

 

 

00000010

 

00001DCB

 

 

 

00111000

 

00000AS0

 

 

01XXXXXX

 

 

1XХХ ХХХХ

 

 

ВХХХХХХХ

 

 

Write Data

 

Read Data

 

Очистка   индикатора   и   перемещение курсора в левую позицию

Возврат курсора в

левую позицию

Включение индикатора (D = 1), курсор (С=1) и выбор типа курсора: курсор мигает (В=1) или подчеркивает (В=0)

Установка 8- битного интерфейса

 

Установка   направления   перемещения (А = 1 приращение) и сдвига (S = 1 сдвиг) курсора

Установка адреса для последующих операций и выбор области CGRAM

Установка адреса DDRAM для последующих операций и выбор области DDRAM-xxxxxx

Прочитать   флаг   занятости B   (В = 1 занят) и содержимое счетчика адреса АС - ххххххх

Запись   данных   в активную область

Чтение данных в активную область

1,64 мс

 

 

4 мс

 

40 мс

 

 

 

40 мс

 

40 мс

 

 

40 мс

 

 

40 мс

 

 

0

 

 

40 мс

 

40 мс

 

Примечание: перед каждой записью кода символа необходима специальная установка адреса командой Set DDRAM Address.

Символы английского алфавита выводятся на индикатор как обычные символьные константы в виде 'simvol′, а для вывода русского алфавита используется таблица 4.4.

 

 Таблица 4.4 – Набор символов знакогенератора

 

4.2 Моделирование в PIC Simulator IDE

 

4.2.1 Исследование модуля LCD.

Необходимо выполнить следующие действия:

- запустить PIC симулятор IDE;

- нажать на Options\ Microcontroller;

- выбрать PIC16F877 и нажать на «Select»;

- нажать на File\Load Program;

- выбрать файл lcd.hex и ЛКМ на Open. Начнется загрузка программы в память PIC.

- нажать на Tools/MicrocontrollerView - откроется окно Microcontroller View;

- нажать на Tools/LCD Module, а затем на «Yes» для модуля LCD, чтобы загрузить параметры установки из исходной программы. Откроется окно моделирования элемента LCD. (параметры элемента LCD могут быть установлены вручную с помощью команды «Setup».)

- отрегулируйте расположение окон для лучшего обзора;

- выбрать скорость моделирования  Rate/Extremely Fast;

- нажать на «Simulation/Start» - начнется моделирование;

- нажать кнопку А, связанную с выводом RA0/AN0 (использование «панели прокрутки» изменяет аналоговое значение на этом вводе).

После изменения аналогового значения нужно нажать кнопку Accept и подождать, пока на LCD отобразится новое значение. Последние три шага можно несколько раз повторить и посмотреть на результаты. Вид экрана с выполняющейся программой показан на рисунке 4.2.

Процедура запуска  LCD займет около 10ms реального времени, которое будет показано в поле «Real Time Duration».

 

 

Рисунок 4.2 - Вид экрана выполняемой программы

 

4.2.2 Листинг программы.

Define ADC_CLOCK = 3             ; значение по умолчанию 3

Define ADC_SAMPLEUS = 10    ; значение по умолчанию 20

Define LCD_BITS = 8                  ; 4 или 8  линий связи интерфейса данных

Define LCD_DREG = PORTB

Define LCD_DBIT = 0                 ; 0 или 4 для интерфейса на 4 бита

Define LCD_RSREG = PORTD

Define LCD_RSBIT = 1

Define LCD_EREG = PORTD

Define LCD_EBIT = 3

Define LCD_RWREG = PORTD    ; по умолчанию 0, если не используем

Define LCD_RWBIT = 2                 ' по умолчанию 0, если не используем

Define LCD_COMMANDUS = 100  ' задержка после LCDCMDOUT, значение по

                                                             умолчанию 5000

Define LCD_DATAUS = 10         ' задержка после LCDOUT, по умолчанию 50

Define LCD_INITMS = 1          ; задержка, используемая LCDINIT, значение по

                                                       умолчанию 100

                                                    ; последние три команды Define устанавливают

                                                    значения, подходящие только для моделирования

Dim an0 As Word

TRISA = 0xff                                    ; настройка PORTA как вход

ADCON1 = 0                                    ';PORTA и PORTE  как аналоговые входы

Lcdinit                                               ; инициализация LCD; курсор выключен

loop:

Adcin 0, an0

Lcdcmdout LcdClear                                ; очистка дисплея LCD

Lcdout "Analog input AN0"                     ; текст для строки 1

Lcdcmdout LcdLine2Home                      ; курсор в начале строки 2

Lcdout "Value: ", #an0                             ; текст для строки 2

WaitMs 1                                                  ; в реальном LCD должно быть больше

Goto loop                                                  ; бесконечный цикл

 

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

 

1) Как осуществляется управление LCD?

2) Какую функцию выполняют регистры IR и DR?

3) Что сообщается микроконтроллеру при В=1?

4) Для чего служит память DDRAM?

5) Для чего служит память CGRAM?

 

5 Лабораторная работа №5. Внешние прерывания и модуль TMR0

 

Цель работы: изучить особенности портов микроконтроллера, регистров управления TRIS и INTCON, а также таймер TMR0 и реагирование на внешние прерывания.

 

5.1 Общие сведения

     

PIC Simulator IDE - приложение, предназначенное для разработчиков в графической среде Windows с интегрированным BASIC компилятором, ассемблером, дизассемблером и отладчиком.

В главном окне программы отображается PIC-микроконтроллер c внутренней мнемоникой, последней выполненной и следующей инструкцией, тактом и счетчиком в режиме реального времени.

PORTA - 6-разрядный порт ввода/вывода (RA5–RA0). Все каналы PORTA имеют соответствующие биты направления в регистре TRISA, позволяющие настраивать канал как вход или выход. Запись 1 в TRISA переводит соответствующий выходной буфер в 3-е состояние. Запись '0' в регистр TRISA определяет соответствующий канал как выход, содержимое защелки PORTA передается на вывод микроконтроллера.

Чтение регистра PORTA возвращает состояние на выводах порта, а запись производится в защелку PORTA. Все операции записи в порт выполняются по принципу «чтение - модификация - запись», т.е. сначала производится чтение состояния выводов порта, затем изменение и запись в защелку.

Основная особенность портов А и Е заключается в том, что они мультиплицированы с аналоговыми входами АЦП и аналоговым входом источника опорного напряжения VREF. Биты управления режимов работы каналов порта ввода/вывода PORTA и PORTE находятся в регистре ADCON1.

Следует отметить, что PORTD работает и как 8-разрядный параллельный порт PSP, когда бит PSPMODE(TRISE<4>) установлен в 1. Внешний микроконтроллер может читать/записывать данные в PORTD. В режиме ведомого данные асинхронно читаются или записываются внешними сигналами -RD (RE0/-RD) или -WR(RE1/-WR) соответственно.

Биты TRISE (TRISE<2:0>) должны быть установлены в 1. В регистре ADCON1 выводы RE2:RE0 должны быть настроены как цифровые каналы ввода/вывода (биты PCFG3:PCFG0).

Запись в PSP происходит, если выводы -CS и -WR имеют низкий уровень сигнала. После перехода сигнала на выводе -CS или -WR в высокий уровень данные сохраняются во входной защелке на такте Q2. На такте Q4 устанавливаются в 1 бит IBF(TRISE<7>) и флаг прерываний PSPIF(PIR<7>). Бит IBF может быть сброшен в 0 только чтением регистра PORTD. Бит переполнения IBOV(TRISE<5>) устанавливается в 1, если произошла следующая запись в PSP, а предыдущий байт не был прочитан.

  Чтение из PSP происходит, если выводы -CS и -RD имеют низкий уровень сигнала. Немедленно сбрасывается в 0 бит OBF (TRISE<6>), указывающий, что PORTD ожидает чтение внешней шиной. После перехода сигнала на выводе -CS или -RD в высокий уровень устанавливается флаг прерывания PSPIF на такте Q4 (только после такта Q2), указывая, что чтение завершено. Бит OBF остается сброшенным в '0' пока не будут загружены новые данные в PORTD.

Когда режим PSP выключен, биты IBF и OBF равняются нулю, а предварительно установленный в 1 бит IBOV должен быть сброшен программно.

Флаг прерывания PSPIF устанавливается в 1 по завершению каждой операции чтения или записи (сбрасывается в 0 программно). Разрешить/запретить прерывания от модуля PSP можно установкой/сбросом бита PSPIE (РIЕ1<7>).

Рисунок 5.1 - Временная диаграмма чтения из параллельного ведомого порта

 

Регистр INTCON доступен для чтения/записи, содержит биты:

- разрешения немаскируемых прерываний от внешних модулей – бит 6 (PEIE);

- разрешения прерывания по переполнению TMR0 – бит 5 (TOIE);

- разрешения прерывания RB0/INT – бит 4 (INTE);

- разрешения прерывания по изменению сигнала на входах RB7-RB4 – бит 3 (RBIE);

-  флаг прерывания по переполнению TMR0 – бит 2 (TOIF);

- флаг внешнего прерывания INT – бит 1 (INTF);

- флаг прерывания по изменению сигнала на входах RB7-RB4 – бит 0 (RBIF).

 

5.2. Моделирование в PIC Simulator IDE

 

5.2.1 Исследование регистров PORTA и PORTB при внешних прерываниях.

Необходимо выполнить следующие действия:

- запустить PIC Simulator IDE;

- нажать Options/Select Microcontroller;

- выбрать PIC16F877 и нажать кнопку Select;

- нажать на Options/Change Clock Frequency;

- в появившемся окне набрать 4 и после этого на OK;

- нажать File/Load Program;

- выбрать файл 7segment.hex и нажать кнопку Open (программа загружена);

- нажать Tools/7_Segment LED Displays Panel (откроется окно с четырьмя 7 сегментными индикаторами);

- нажать кнопку Setup ниже индикатора № 2;

- нажать оранжевое поле рядом справа от Display Enable;

- дважды нажать на Always Enable – появится окно Select pin;

- выделить PORTC и 0 – появится PORTC.0;

- нажать кнопку Setup ниже индикатора № 1;

- нажать оранжевое поле рядом справа от Display Enable;

- дважды нажать на Always Enable – появится окно Select pin;

- выделить PORTC и 1 – появится PORTC.1;

- нажать кнопку Hide Setup, чтобы сохранить немного экранного пространства;

- выбрать Rate/Ultimate (без изменения скорости);

- нажать Simulation/Start.

Программа отобразит числа от 0 до 99 на двух 7 сегментных дисплеях, используя процедуру мультиплексирования прерывания TMR0. Сохраняя данные на экране, необходимо экспериментировать с опцией Keep Last Display. Вид экрана с выполняющейся программой показан на рисунке 5.2.

 

 

Рисунок 5.2 - Вид экрана с выполняемой программой

 

5.2.2 Листинг программы.

Dim digit As Byte     ; входная переменная для подпрограммы GETMASK

Dim digit1 As Byte   ; текущее значение старшей цифры

Dim digit2 As Byte   ; текущее значение младшей цифры

Dim mask As Byte    ; выходная переменная от подпрограммы GETMASK

Dim mask1 As Byte  ; текущее значение старшей цифры

Dim mask2 As Byte  ; текущее значение младшей цифры

Dim i As Byte

Dim phase As Bit

Symbol d1enable = PORTC.0  ;линия управления для старшего элемента

                                                  7 сегментного индикатора

Symbol d2enable = PORTC.1  ;линия управления для младшего элемента

                                                  7 сегментного индикатора

TRISB = %00000000       ; настройка порта PORTB на вывод

TRISC.0 = 0                     ;  настройка RC0 на вывод

TRISC.1 = 0                      ; настройка RC1 на вывод

d1enable = False

d2enable = False

mask1 = 0

mask2 = 0

phase = 0

INTCON.T0IE = 1              ; разрешение прерывания от Timer0

INTCON.GIE = 1                ; разрешение всех прерываний

OPTION_REG.T0CS = 0    ; Timer0 от внутреннего генератора

loop:

For i = 0 To 99

digit1 = i / 10                ; текущая цифра для старшей цифры

digit2 = i Mod 10          ; текущая цифра для младшей цифры

TMR0 = 0                     ; сброс Timer0, чтобы предотвратить его прерывание

digit = digit1

Gosub getmask                     ; значение для старшей цифры

mask1 = mask

digit = digit2

Gosub getmask                    ; значение для младшей цифры

mask2 = mask

Gosub show1                      ;' отобразим новое значение старшей цифры

Gosub show2                       ; отобразим новое значение младшей цифры

WaitMs 500                         ; задержка для моделирования  

Next i

Goto loop

End

On Interrupt           ; подпрограмма прерывания Timer0 непрерывно переключает

                               первый и второй дисплей

If phase = 0 Then

   phase = 1

Gosub show1

Else

   phase = 0

Gosub show2

Endif

INTCON.T0IF = 0                           ; разрешение прерывания от TMR0

Resume

getmask:                        ; соответствующее значение 7 сегментного индикатора

                                       для входной цифры

mask = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), digit

Return

show1:                                           ; вывод старшей цифры на дисплей

           d2enable = False

            PORTB = mask1

           d1enable = True

Return

show2:                                            ; вывод младшей цифры

        d1enable =  False

        PORTB = mask2

         d2enable = True

 Return

 

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

 

1) Чем отличается порт А от порта В?

2) Как изменить направление порта?

3) Как изменить цифровые входы портов А и Е на аналоговые?

4) Какой регистр разрешает внешние прерывания?

5) Какой байт нужно сбросить на индикатор для цифры 6?

 

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

1. Новиков Ю.В., Скоробогатов П.К. Основы микропроцессорной техники. – М.: БИНОМ. Лаборатория знаний, 2006.

2. Тавернье К. PIC – Микроконтроллеры. – М.: ДМК Пресс, 2003.

3. Трамперт В. AVR-RISC микроконтроллеры. – К.: «МК-Пресс», 2006.

4. Техническая документация. Однокристальные 8-разрядные FLASH микроконтроллеры. – М.: ООО «Микро-Чип», 2002. 

 

Содержание 

1 Введение                                                                                                                   3

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

3 Лабораторная работа №2                                                                                        7

4 Лабораторная работа №3                                                                                      10

5 Лабораторная работа №4                                                                                      13

6 Лабораторная работа №5                                                                                      18

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