Технический Портал Левши Суббота, 19.08.2017, 21:43
| RSS
Меню сайта

Категории раздела
ПИТАНИЕ [17]
МЕТАЛЛО ДЕТЕКТОРЫ [1]
СВЯЗЬ [5]
НАЧИНАЮЩИМ [6]
МикроКонтроллеры [15]
АВТОМАТИКА [4]
АУДИО. [2]
СИСТЕМЫ ОХРАНЫ И БЕЗОПАСНОСТИ [6]
СИСТЕМЫ ДЛЯ САМООБОРОНЫ [1]
ТЕЛЕФОНИЯ [7]

Мини-чат

Главная » Статьи » РАДИОЭЛЕКТРОНИКА » МикроКонтроллеры

AVR. ПОРТЫ (часть 3)
Порты
Что такое порт?

Порты в AVR являются каналом от процессора к внешней и внутренней периферии и к программному обеспечению МК. Процессорное ядро общается с этими компонентами МК, читает с них или пишет в них данные, например, в таймеры или параллельные порты ввода-вывода. В общем, порт – это физический адрес, к которому может обращаться программа, прошитая в МК.
Наиболее используемым портом является регистр состояния (status register), в который идет запись результатов предыдущих вычислений и откуда читаются состояния для выполнения условных переходов.
Существуют 64 различных порта или регистра, которые физически доступны не во всех типах AVR МК. В зависимости от объема памяти и другой внутренней периферии различные порты могут быть доступными или нет. Которые из них можно использовать мы узнаем из описания на конкретный тип МК.
Например, память данных МК ATmega16 состоит из 32 регистров общего назначения (с R0 по R31), 64 портов (регистров), и 1024 байт внутренней памяти данных SRAM.



Рисунок 1 – Карта памяти данных МК ATmega16

Порты имеют фиксированные адреса, по которым происходит связь с ЦПУ. Адреса не зависят от типа AVR МК. Например, адрес порта PORTB всегда 0x18 (приставка 0x обозначает шестнадцатеричное число). Не нужно запоминать адреса портов, им присвоены символьные имена в подключаемых файлах-оглавлениях. Для ATmega16 такой файл называется m16def.inc и находится в каталогах ассемблера. В нем есть описание всех портов:
.EQU PORTB, 0x18
Файл описания подключается ассемблерной директивой
.include

Или

.include "C:\VMLAB\include\m16def.inc"

или по другому, в зависимости от того, где установлена та или другая программа-компилятор.
Обычно порты организованы в виде 8-битных чисел, но можно проводить операции как с 8 отдельными битами, не зависимыми друг от друга. Если эти биты используются отдельно, то их собственные имена описаны в подключаемом файле. Согласно этому не нужно помнить позицию этих битов. Их имена определены в описаниях на МК и включены в файлы описаний. Например:

;***** I/O Register Definitions

...

.equ PORTB =0x18

...

;***** Bit Definitions

...

; PORTB
.equ PB7 =7
.equ PB6 =6
.equ PB5 =5
.equ PB4 =4
.equ PB3 =3
.equ PB2 =2
.equ PB1 =1
.equ PB0 =0

...

Например, общий регистр управления прерываниями - General Interrupt Control Register – GICR состоит из отдельных бит, определяющих будет ли МК реагировать на внешние прерывания (для подробного описания смотреть ДШ). Этот регистр является портом, у битов которого есть свои имена - (INT1 INT0 INT2 ... ). Если нужно разрешить прерывание INT0, это можно сделать так:

.DEF temp = R16 ;определяем временный регистр
LDI temp, 0b01000000
OUT GICR, temp

Инструкция OUT помещает содержимое temp регистра в порт (регистр) GICR.

Чтение с порта осуществляется инструкцией IN. Следующая команда

IN temp, GICR

читает биты порта GICR в регистр. Так как во многих портах есть неиспользуемые (зарезервированные) биты, при чтении эти биты всегда будут возвращать 0. Чаще чем просто чтитать все восемь бит порта приходится реагировать на определенное состояние порта. В этом случае нет необходимости читать весь порт и выделять значимый бит. Существуют инструкции, которые предоставляют возможность исполнять те или другие действия (команды) в зависимости от состояния определенного бита порта (регистра). Установка значения отдельных бит (равным единице или нулю) осуществляется без чтения или записи других бит порта. Для этого есть две команды: SBI (Set Bit I/O) - установить (равным 1) бит и CBI (Clear Bit I/O) - очистить бит (сделать равным 0). Например

.EQU ActiveBit = 0 ;Этот бит будет изменяться
SBI PORTB, ActiveBit ;Бит порта установлен равным 1
CBI PORTB, ActiveBit ;Бит порта очищен (равен 0)

Эти две инструкции имеют ограничения, они работают с портами, адреса которых менее 0x20, к портам с большими адресами невозможно обратиться этим способом.



обсудить на форуме:  http://elektron.ucoz.ru/forum/9-87-6#2410
Категория: МикроКонтроллеры | Добавил: ЛЕВША (06.06.2008) | Автор: Vasyl Yefуmchuk
Просмотров: 5275 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Статистика

Наш опрос
КАКАЯ ОБЛАСТЬ ЭЛЕКТРОНИКИ ВАС ИНТЕРЕСУЕТ?
Всего ответов: 2462

Друзья сайта
  • Форумы Игростроя
  • CЛОВЕНСК
  • RemEXpert
  • ПАЯЛЬНИК
  • МЕДТЕХНИКА

  • Copyright MyCorp © 2017