Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект мпсу.doc
Скачиваний:
88
Добавлен:
22.09.2019
Размер:
6.71 Mб
Скачать

Урок №22

      1. Подключение к выводам параллельного порта внутреннего подтягивающего резистора.

Возможность использовать внутренний подтягивающий резистор при вводе облегчает подключение кнопок, тумблеров, датчиков – любых внешних контактов. Обычно при подключении внешнего контакта используется внешний резистор (рисунок 2), который обеспечивает подключение входа порта к источнику питания, в результате чего при разомкнутом контакте вход не «повисает в воздухе», а на него подается лог.1. В МК AVR нет необходимости подключать внешний резистор, так как имеется возможность использовать внутренний подтягивающий резистор.

Рисунок 2 – Схема подключения внешнего резистора

Проанализируем схему подключения внутреннего резистора по схеме порта (рисунок 1).

Резистор может быть подключен ко входу порта при выполнении двух условий. Первое условие - соответствующая линия порта должна быть настроена на ввод, второе условие – в соответствующий разряд регистра данных порта должна быть записана 1. При выполнении этих условий на выходе лог. элемента & появляется 1 и замыкается ключ S4, который подключает нагрузочный резистор в питанию Vcc.

В режиме вывода данных резистор отключен: Qddrb=1, контакт S4 разомкнут.

Таблица 1 – Режимы работы порта

Регистр ddrb

Регистр portb

Режим

Подтягивающий резистор

0

0

Ввод

Нет

0

1

Ввод

Да

1

данные

Вывод

Нет

      1. Сброс порта

Во время сброса в регистр направления ddrb записывается 0, порт настраивается на ввод, ключ S3 разомкнут. В регистр данных portb также записывается 0, поэтому ключ S4 разомкнут, нагрузочные резисторы отключаются, и выводы порта находятся в третьем состоянии (Z-состояние).

2.7.5 Нагрузочная способность портов

Выход микроконтроллера AVR способен «поглощать» выходной ток силой до 20 мА, однако сумма всех выходных токов не должна превышать 200 мА, а суммарная сила токов портов В и С – 100 мА.

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

1 Зачем ко входу параллельного порта подключается внутренний подтягивающий резистор?

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

3 Что происходит с регистрами портов при сбросе?

4 Объясните значение параметров параллельного порта: 20мА, 100мА, 200мА

5 Объясните, как сконфигурировать

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

Рекомендуемая литература:

Урок №23

Тема 2.8 Команды обращения к параллельным портам микроконтроллеров семейства avr

Вопросы темы:

2.8.1 Типичные действия МК по управлению простейшими устройствами, подключенными к параллельным портам.

2.8.2 Номера и имена портов

2.8.3 Общие правила записи команд на языке Ассемблера

2.8.4 Основные команды обращения к портам

2.8.5 Описание команд обращения к портам

2.8.6 Пример программы «copy»

2.8.7 Пример программы «opros»

2.8.1 Типичные действия МК по управлению простейшими устройствами, подключенными к параллельным портам

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

На рисунке 1 изображена схема подключения к портам МК простейших устройств: к 4-му разряду порта D подключено устройство вывода - светодиод VD1, к 1-му разряду порта А подключено устройство ввода - замыкающий контакт SB1. Какие задачи по управлению этими устройствами можно поставить перед МК? Светодиод можно включить или выключить. Контакт замыкается или размыкается под действием внешней силы, а МК может определить состояние контакта.

Рисунок 1 – Схема подключения простейших устройств

Чтобы включить или выключить светодиод необходимо:

  • настроить на вывод линию PD.4 или весь порт D (если никакие другие разряды порта не используются для ввода или вывода данных). Для настройки направления используется регистр «ddrd»порта;

  • сформировать на выходе порта PD.4 лог.1, чтобы включить VD1 или лог.0, чтобы выключить VD1 или сформировать лог.1 на всех выходах порта (если никакие другие разряды порта не используются). Для формирования данных используется регистр «portd» порта.

Чтобы определить состояние контакта SB1 необходимо:

  • настроить на ввод линию PА.1 или весь порт A (если никакие другие разряды порта не используются). Для настройки направления используется регистр «ddrа»порта;

  • определить уровень сигнала на входе PА.1, например, скопировать сигнал со входа PА.1 во внутренний регистр МК

Эти простейшие действия лежат в основе всех программ управления простейшими устройствами, например, устройствами индикации, реле, кнопками, датчиками. Чтобы составить программы управления портами необходимо знать: логику работы порта, имена регистров и состав команд обращения к портам.

2.8.2 Номера и имена портов

Каждый порт содержит три регистра: регистр вывода, регистр направления и регистр ввода. Исходным адресом порта является его номер. В программах, написанных на Ассемблере, каждому порту присваивается имя. Имен упрощают запись команд обращения к портам. В таблице 1 приведены имена и номера регистров портов МК ATmega8535.

Таблица 1 – Номера регистров параллельных портов МК ATmega8535

Порт

Регистр

Номер, h

Назначение

a

port

1b

вывод данных из МК

ddr

1a

конфигурирование порта

pin

19

ввод данных в МК

b

port

18

вывод данных из МК

ddr

17

конфигурирование порта

pin

16

ввод данных в МК

c

port

15

вывод данных из МК

ddr

14

конфигурирование порта

pin

13

ввод данных в МК

d

port

12

вывод данных из МК

ddr

11

конфигурирование порта

pin

10

ввод данных в МК

2.8.3 Общие правила записи команд на языке Ассемблера

При записи команд на языке Ассемблера следует выполнять некоторые общие правила:

  • числа записываются в двоичном, шестнадцатеричном или десятичном коде. Используются следующие формы записи чисел:

двоичных – 0b00001111;

шестнадцатеричных - 0x9f; или $9f;

десятичных – 255, 174 и т.п.

  • между командой и операндами ставится хотя бы один пробел;

  • операнды, если их два, отделяются один от другого запятой;

  • номер бита отделяется от имени регистра, ячейки или порта запятой: pind,1; ddrc,0 и т.п;

  • если в команде два операнда, первый операнд является приемником результата

2.8.4 Основные команды обращения к портам

Таблица 1- Команды, применяемые для обращения к регистрам портов микроконтроллеров AVR

Мнемо-

ническая запись команды

Действие

Описание

Примеры

1

out ddrx, rn

n=0-31

x=a, b, c, d

ddrx← rn

Загрузить данные из регистра общего назначения в регистр направления порта. Используется для конфигурирования порта

ldi r16,$ff

out ddrc,r16

;настроить порт С на вывод

2

out portx, rn

n=0-31

x=a, b, c, d

portx← rn

Загрузить данные из регистра общего назначения в регистр вывода порта. Используется для вывода данных через выходы порта

сlr r4

out portb,r4

;очистить выходы порта B

3

in rn,pinx

n=0-31

x=a, b, c, d

rn←pinx

Загрузить данные из регистра ввода порта в регистр общего назначения. Используется для чтения данных со входов порта

in r6,pina

;скопировать данные со входов порта А в регистр

4

sbi ddrx,b

x=a, b, c, d

b=0-7

Установить бит в регистре направления порта. Используется для конфигурирования отдельного бита порта на вывод

sbi ddrd,0

;настроить нулевой разряд порта D на ввод

5

sbi portx,b

x=a, b, c, d

b=0-7

Установить бит в регистре вывода порта. Используется для формирования «1» на отдельной линии порта

sbi porta,3

6

cbi ddrx,b

x=a, b, c, d

b=0-7

Очистить бит в регистре направления порта. Используется для конфигурирования отдельного бита порта на ввод

сbi ddrd,0

;настроить нулевой разряд порта D на ввод

7

cbi portx,b

x=a, b, c, d

b=0-7

Очистить бит в регистре вывода порта. Используется для формирования «0» на отдельной линии порта

сbi porta,3

8

sbis pinx,b

x=a, b, c, d

b=0-7

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

again: sbis pinb,0

jmp again

sbi porta,3

;если нулевой бит порта В установлен установить «1» в 3-м разряде порта В, в противном случае повторять опрос линии pinb,0

11

sbic pinx,b

x=a, b, c, d

b=0-7

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

again: sbiс pinb,0

jmp again

sbi porta,3

;если нулевой бит порта В сброшен установить «1» в 3-м разряде порта В, в противном случае повторять опрос линии pinb,0

2.8.5 Описание команд обращения к портам

2.8.5.1 Команда «out» записи данных в порт

Мнемоническое обозначение команды:

out P,Rn,

где Р=0-63 –номер порта, n=0-31- номер РОН.

Действие команды: передать (скопировать) данные из РОН в порт:

P ← Rn

В команде может быть указан номер порта (0-63) или его имя. Как правило, указывается имя порта. Номера портов приведены в таблице 1

Пример 1. Записать команды, выполняющие следующие действия:

а) переписать данные из регистра r16 в регистр porta: out porta,r16;

б) переписать данные из регистра r16 в регистр ddra: out ddra,r16;

В микроконтроллерах AVR отсутствует команда непосредственной записи данных в регистр порта. Запись данных в регистры порта выполняется в два этапа:

  1. данные загружаются в один из регистров общего назначения r16-r31 при помощи команды ldi rn,k, где n=16-31- номер регистра, k=0x00-0xff - код данных;

  2. данные переписываются в регистр порта при помощи команды

out Р, rn, где n= 0-31, Р=0-63

Пример 2. Записать число 9f h в порт вывода данных portb: portb←$9f

ldi r16,$9f ;запишем число 9f и регистр r16

out portb,r16 ;перепишем число 9f из регистр r16 в portb

Пример 3. Настроить порт В на вывод данных.

Чтобы настроить порт на вывод, в его регистр направления необходимо записать все единицы, т. е число $ff. Сделать это можно в два этапа:

ldi r16,$ff

out ddrb,r16

Пример 4. Настроить разряды 0-3 порта В на вывод, а разряды 4-7 на ввод

ldi r16,$0f

out ddrb,r16

Пример 5. Определить конфигурацию портов A, B, C, D.

ldi r16,$ff

out ddra,r16

out ddrb,r16

ldi r16,0

out ddrc,r16

ldi r16,0b01111110

out ddrd,r16

2.8.5.2 Команда «in»чтения данных со входов порта

Мнемоническое обозначение команды: in Rn,P, где Р=0-63, n=0-31.

Действие команды: записать данные из регистра порта в РОН:

Rn ← P

Пример 6. Записать команды, выполняющие следующие действия:

а) переписать данные из регистра pinc в регистр r16: in r16,pinc;

б) переписать данные из регистра pind в регистр r0: in r0,pind

Пример 7. Скопировать данные со входов порта В на выходы порта А

ldi r16,$0 ;настроим порт В на ввод

out ddrb,r16

ldi r16,$ff ;настроим порт А на вывод

out ddra,r16

in pinb,r16 ;скопировать данные со входов порта В в РОН r16

out porta,r16 ;скопировать данные из РОН r16 в регистр данных порта A

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

  1. Назовите типичные действия МК по управлению устройствами, подключенными к параллельным портам МК

  2. Как настроить порт на ввод?

  3. Как настроить порт на ввод?

  4. Назовите регистра порта. Приведите их имена и адреса.

  5. Какой регистр порта подключен к выходам порта?

  6. Какой регистр порта подключен ко входам порта?

  7. Перечислите основные команды обращения к портам

  8. В чем основное отличие друг от друга команд вывода out, sbi, cbi?

  9. Как действует команда in?

  10. Как действует команда sbis?

  11. Как действует команда sbic?

  12. Составьте по одному примеру на каждую команду обращения к портам

В каком формате записаны числа: $05, 0x05, 05, 0b00110011

2 Какой регистр является приемником данных в командах:

out ddra,r0; in r0,pind

Урок №24

Тема урока: продолжение темы 2.8

2.8.5.3 Команды битовых операций с регистрами портов sbi, cdi, sbis, sbic

Мнемоническое обозначение команды:

sbi P,b,

где Р=0-63 –номер порта, b=0-7- номер разряда порта

Действие команды: установить бит в регистре порта P,b ← 1

Пример: sbi ddrd,3 – установить 3-ий бит регистра ddrd

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

Мнемоническое обозначение команды:

сbi P,b,

где Р=0-63 –номер порта, b=0-7- номер разряда порта

Действие команды: очистить бит в регистре порта P,b ← 1

Пример: сbi ddrd,3 – очистить 3-ий бит регистра ddrd

Эта команда позволяет очистить отдельный бит порта, не влияя на состояние остальных битов.

Мнемоническое обозначение команды:

sbis P,b,

где Р=0-63 –номер порта, b=0-7- номер разряда порта

Действие команды: пропустить, если бит в регистре порта установлен

Пример: sbis pinb,3 – если 3-ий бит регистра pinb установлен, пропустить (перепрыгнуть) следующую команду и выполнить команду, которая записана за ней.

Мнемоническое обозначение команды:

sbiс P,b,

где Р=0-63 –номер порта, b=0-7- номер разряда порта

Действие команды: пропустить, если бит в регистре порта очищен

Пример: sbiс pinb,3 – если 3-ий бит регистра pinb очищен, пропустить (перепрыгнуть) следующую команду и выполнить команду, которая записана за ней.

Урок №25 Упражнения

Упражнение 1

Выполните анализ фрагмента программы и укажите стрелочками направление работы портов:

ldi r16,$ff

out ddra,r16

out ddrc,r16

ldi r16,0

out ddrb,r16

ldi r16,$f0

out ddrc,r16

Упражнение 2

Запишите фрагменты программ, выполняющие действия:

а) настроить порт В на вывод;

б) настроить порт С на ввод;

в) настроить порт А на ввод и подключить ко всем входам подтягивающие резисторы

г) скопировать данные из порта А в порты В и С;

д) скопировать данные со входов порта С в регистр r0

Упражнение 3

Напишите фрагмент программы, который

настроит порты микроконтроллера так,

как указано на рисунке

Упражнение 4

Составьте комментарии к фрагментам программ:

а) ldi r16,$ff

out ddrb,r16

б) ldi r16,$f0

out ddrc,r16

в) ldi r16,$ff

out ddrb,r16

cbi portb,7

г) m: sbis pinb,0

rjmp m

sbi porta,3

д) sbi ddrc,0

cbi ddrc,1

sbi portc,1

У пражнение 5

Выполните конфигурирование

линий портов

Урок №26 Подготовка к лабораторным работам №5,6

Задание 1

Разработайте программу svetodiod.asm

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

Вариант

Комбинация, hex

Вариант

Комбинация, hex

1

25

9

aa

2

78

10

cc

3

67

11

9d

4

d4

12

17

5

f0

13

3e

6

0f

14

44

7

66

15

2f

8

38

16

b7

Задание 2

Разработайте программу copy.asm”.

Постановка задачи: Постановка задачи: Cкопировать данные со входов порта A микроконтроллера ATmeg8535 на выходы порта С.

Рисунок 1 – Алгоритм программы “copy”

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

; ** Текст программы **

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

;Автор Воробьева Н.Г.

;дата 5.02.2010

;Имя файла "copy"

;для AVR ATmega 8535

;Выполняемые функции: копирует данные со входов порта А на ;выходы порта С

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

.include "m8535def.inc" ;присоединение файла описания

; имен микроконтроллера

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

;конфигурирование порта A на ввод

ldi r16,0

out ddra,r16

; конфигурирование порта С на вывод

ldi r16,$ff

out ddrс,r16

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

again:

in r0,pina ;скопировать данные со входов порта А в ре ;гистр

out portc,r0 ;передать данные в порт С

rjmp again ;вернуться в начало программы

Задание 3

Разработайте программу opros.asm”.

Постановка задачи: требуется опросить нормально открытый контакт, подключенный к 1-му разряду порта В и выполнить следующее действие: установить PD.0=1, если контакт замкнут или ждать, пока контакт замкнется.

Рисунок 2 – Контакт подключен ко входу порта В

Рисунок 3 – Алгоритм фрагмента программы

Чтобы определить состояние контакта: замкнут или разомкнут, необходимо опросить первый разряд регистра ввода данных порта В: pinb,1. По реакции программы определяется состояние контакта. Ниже приведен фрагмент программы.

opros:

sbic pinb,1 ;пропустить следующую команду, ;если контакт замкнут

rjmp opros ;прыжок на метку opros, если кон- ;такт разомкнут

sbi portd,0 ;установить лог.1 на выходе PD.0

Задание 4

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

а) опросите вход РА.0, если на нем присутствует 1, установите 1 на РС.0, в противном случае установите 1 на РВ.0

б) опросите вход РА.2, если на нем присутствует 0, установите 1 на РС.0, в противном случае повторите опрос входа РА.2

в) ) опросите вход РВ.0: если на нем присутствует 1, выполните копирование данных со входов порта А на выходы порта С, в противном случае, ждите.

Задание 5

Найдите логические ошибки в следующих фрагментах:

а)постановка задачи: включить светодиоды, подключенные к порту С, в комбинации 11110000

Фрагмент1

ldi r16,$ f0

out ddrc,r16

Фрагмент 2

ldi r16,$ ff

out ddrc,r16

ldi r16,$f0

out ddra,r16

Фрагмент 3

ldi r16,$ ff

out ddrc,r16

ldi r16,$f0

out pinc,r16

Фрагмент 4

ldi r16,$ f0

out ddrc,r16

ldi r16,$f0

out portc,r16

Задание 6

Найдите синтаксические ошибки в следующих фрагментах:

а)постановка задачи: включить светодиоды, подключенные к порту С, в комбинации 11110000

Фрагмент1

ldi r1, ff

out ddrc,r16

ldi r16,$f0

out portc,r16

Фрагмент 2

ldi r16, $ff

out ddrc

ldi r16,$f0

out portc

Задание 7

Найдите синтаксические ошибки в следующем фрагменте:

opros

sbic pinb.1 ;пропустить следующую команду, ;если контакт замкнут

rjmp opros ;прыжок на метку opros, если кон- ;такт разомкнут

sbi portd.0 ;установить лог.1 на выходе PD.0

Контрольные вопросы и задания

  1. В чем суть копирования данных?

  2. Как скопировать данные со входов одного порта на выходы другого?

  3. Как определить состояние контакта, подключенного ко входу МК?

  4. Составьте алгоритмы программ для задания 4