Параллельные порты ввода/вывода

Микроконтроллер РIС16F84 имеет 13 линий ввода/вывода, разделенных на два порта. Регистpы PORTA и PORTB соответствуют двум поpтам ввода/вывода, имеющимся у PIC16F84. Поpт A имеет 5 линий ввода/вывода, отображенных на адресном пространстве памяти данных по адресу Н‘05’. Остальные 8 линий относятся к порту В, размещенному по адресу Н’06’.

Значения, записанные в эти регистры, появляются на выводах микроконтроллера RA4-RA0 и RB7-RB0 соответственно. Линия порта может быть запрограммирована как на вход, так и на выход. Для этого предназначены регистры направления данных TRISA и TRISB соответственно, расположенные по адресам Н‘85’ и Н‘86’.

Название TRIS образовано от слова TRIState. Эти регистры находятся на page 1, поэтому они настраиваются в начале программы и впоследствии не изменяются.

Пpи чтении поpта считывается непосpедственное состояние вывода, пpи записи в поpт запись пpоисходит в буфеpный pегистp.

С параллельными портами ввода/вывода связаны следующие регистры:

PORTA

В этом регистре задействовано 5 младших битов, подключенных к выводам RA4-RA0 микроконтроллера. Вывод RA4 является входом таймера 0.

TRISA

Этот регистр предназначен для конфигурации линий порта А в качестве входов/выходов. Задание 1 в pазpядеpегистpа TRISА пpогpаммиpует соответствующий pазpядпоpта как вход, а задание 0 – как выход.

PORTB

Двунаправленный 8 битный порт ввода/вывода подключен к выводам RB7-RB0 микроконтроллера. Вывод RB0 используется также в качестве входа аппаратного прерывания.

TRISB

Этот регистр предназначен для конфигурации линий порта в качестве входов/выходов аналогично регистру. TRISA.

Пример. Сконфигурировать младшие разряды PORTВ в качестве входов, а старшие в качестве выходов.

BSF STATUS,5;Установка 5 бита в регистре STATUS

;позволяет обратиться к page 1 памяти данных

MOVLW В’00001111’;Загружаем константу В’00001111’

MOVWF TRISB;;и копируем в регистр TRISB

BCF STATUS; сбрасываем RP0 для возврата на page 0

ПРОГРАММА SMOTOR_1: ФОРМИРОВАНИЕ УПРАВЛЯЮЩИХ СИГНАЛОВ

В двигателе имеются четыре обмотки A, B, C и D которые могут возбуждаться поодиночке или попарно для формирования магнитного поля в одном из восьми направлений с шагом 450 Рис.7.4. Так обмотка B формирует поле в направлении север, C+В - северо-восток, C- восток и т.д. Соответственно ротор вращается вслед за изменением направления магнитного поля, при условии, что конструкция двигателя обеспечивает стабилизацию положения ротора при разгоне и торможении.

ПРОГРАММА формирует управляющие работой шагового двигателя статические сигналы в виде лог.1. и лог.0, которые поочередно подаются в управляющие обмотки двигателя. На Рис.1. изображен принцип работы шагового двигателя.

В двигателе имеются четыре обмотки A, B, C и D которые могут возбуждаться поодиночке или попарно для формирования магнитного поля в одном из восьми направлений с шагом 450 . Так обмотка А формирует поле в направлении север, А+В - северо-восток, В- восток и т.д.

Соответственно ротор вращается вслед за изменением направления магнитного поля, при условии, что конструкция двигателя обеспечивает стабилизацию положения ротора при разгоне и торможении. Коды управления обмотками шагового двигателя для всех восьми направлений магнитного поля приведены в табл. Рис. 2

  Рис. 1. Формирование магнитного поля  

Рис. 2. Коды управления обмотками шагового двигателя

`Программа состоит из трех частей:

1. START; Инициализация микроконтроллера, которая настраивает на выход RB[3:0]

Первая команда BSF STATUS,RP0 осуществляет переход в 1-й банк: устанавливаем бит RP0 (STATUS<5>). Так как направления работы выводов порта В на выход, то сбрасываем младшие биты регистра TRISB: MOVLW B’11110000’ и MOVWF TRISB. Дальнейшие манипуляции будут производиться в нулевом банке, поэтому сбрасываем бит RP0 (STATUS<5>): BCF STATUS,RP0 и возвращаемся в нулевой банк.

2. S_COD; Загрузка кодов управления обмотками шагового двигателя в память данных микроконтроллера

3. LOOP; Вывод управляющегокода в порт В

Последовательность управляющих импульсов формируется командами копирования управляющих кодов из памяти данных командой MOVFW с последующим выводом в порт MOVWF PORTB (обмотки А, A+B, В, B+С, C, C+D, D, D+A).

+5В
RA0 Vdd RA1 PIC Vss RA2 16F84A RB0 RA3 RB1 RA4 RB2 Mclr RB3 Х1 RB4 X2 RB5 X2 RB7 Vdd


R1







ZQ1


C1 C2


Рис. 7.4. Управление работой шагового двигателя

3. Задание 1

3.1. Загрузите программу MOTOR в редактор исходного кода.

3.2. Загрузите машинные коды в оперативную память эмулятора: кнопка [Tools/Assembler and Load], вокне редактора исходного кода Assembler Motor1.asm

3.3. К основному окну симулятора PIC Simulator IDE добавьте окна [Tools/Breakpoints Manager] и [Tools/Stepper Motor Phase Simulation], и установив пошаговый режим работы симулятора, выполните программу.

4. ЗАДАНИЕ 2

4.1. Внесите изменения в программу MOTOR (MOTOR_1): организуйте вращение двигателя с помощью косвенной адресации.

5. ЗАДАНИЕ 3

5.1. Внесите изменения в программу MOTOR_1 (MOTOR_2):

· для подключения шагового двигателя выберите порт А RA[1:4]

· организуйте вращение двигателя с шагом 900 против часовой стрелки.

6. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Оформите программу формирования управляющих сигналов в виде подпрограммы.

2. Как программно организовать вращение двигателя с разной частотой?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: