Перейти к содержанию

Порты ввода-вывода ATmega328P: регистры и биты

Каждым портом управляют три регистра: DDRx задаёт направление вывода (1 — выход), PORTx — уровень на выходе, а у входа включает подтяжку к питанию, PINx читает уровни на выводах. Запись единицы в бит PINx переключает соответствующий бит PORTx.

Данные: описание ATmega328P из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002061B.

Регистры блока

РегистрАдресНазначениеПосле сброса
PINB0x23 (I/O 0x03)Входы порта B—
DDRB0x24 (I/O 0x04)Направление выводов порта B0x00
PORTB0x25 (I/O 0x05)Выходы и подтяжки порта B0x00
PINC0x26 (I/O 0x06)Входы порта C—
DDRC0x27 (I/O 0x07)Направление выводов порта C0x00
PORTC0x28 (I/O 0x08)Выходы и подтяжки порта C0x00
PIND0x29 (I/O 0x09)Входы порта D—
DDRD0x2A (I/O 0x0A)Направление выводов порта D0x00
PORTD0x2B (I/O 0x0B)Выходы и подтяжки порта D0x00

Состояния вывода

Что делает вывод Pxn при разных битах DDxn и PORTxn и общем бите PUD в MCUCR (PUD = 1 выключает подтяжки всех портов). Таблица 14-1 даташита DS40002061B.

DDxnPORTxnPUDВыводПодтяжкаСостояние
00Xвходнетвысокий импеданс (Hi-Z)
010входдавывод отдаёт ток, если снаружи его тянут к земле
011входнетвысокий импеданс (Hi-Z)
10Xвыходнетнизкий уровень (вывод принимает ток)
11Xвыходнетвысокий уровень (вывод отдаёт ток)

PINB — входы порта B

Адрес 0x23 (I/O 0x03), 8 бит.

Бит76543210
ИмяPINB7PINB6PINB5PINB4PINB3PINB2PINB1PINB0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сбросаN/AN/AN/AN/AN/AN/AN/AN/A

Бит n отвечает за вывод PBn: PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0.

DDRB — направление выводов порта B

Адрес 0x24 (I/O 0x04), 8 бит, после сброса 0x00.

Бит76543210
ИмяDDB7DDB6DDB5DDB4DDB3DDB2DDB1DDB0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000

Бит n отвечает за вывод PBn: PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0.

PORTB — выходы и подтяжки порта B

Адрес 0x25 (I/O 0x05), 8 бит, после сброса 0x00.

Бит76543210
ИмяPORTB7PORTB6PORTB5PORTB4PORTB3PORTB2PORTB1PORTB0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000

Бит n отвечает за вывод PBn: PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0.

PINC — входы порта C

Адрес 0x26 (I/O 0x06), 8 бит.

Бит76543210
Имя—PINC6PINC5PINC4PINC3PINC2PINC1PINC0
ДоступRR/WR/WR/WR/WR/WR/WR/W
После сброса0N/AN/AN/AN/AN/AN/AN/A

Бит n отвечает за вывод PCn: PC6, PC5, PC4, PC3, PC2, PC1, PC0.

DDRC — направление выводов порта C

Адрес 0x27 (I/O 0x07), 8 бит, после сброса 0x00.

Бит76543210
Имя—DDC6DDC5DDC4DDC3DDC2DDC1DDC0
ДоступRR/WR/WR/WR/WR/WR/WR/W
После сброса00000000

Бит n отвечает за вывод PCn: PC6, PC5, PC4, PC3, PC2, PC1, PC0.

PORTC — выходы и подтяжки порта C

Адрес 0x28 (I/O 0x08), 8 бит, после сброса 0x00.

Бит76543210
Имя—PORTC6PORTC5PORTC4PORTC3PORTC2PORTC1PORTC0
ДоступRR/WR/WR/WR/WR/WR/WR/W
После сброса00000000

Бит n отвечает за вывод PCn: PC6, PC5, PC4, PC3, PC2, PC1, PC0.

PIND — входы порта D

Адрес 0x29 (I/O 0x09), 8 бит.

Бит76543210
ИмяPIND7PIND6PIND5PIND4PIND3PIND2PIND1PIND0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сбросаN/AN/AN/AN/AN/AN/AN/AN/A

Бит n отвечает за вывод PDn: PD7, PD6, PD5, PD4, PD3, PD2, PD1, PD0.

DDRD — направление выводов порта D

Адрес 0x2A (I/O 0x0A), 8 бит, после сброса 0x00.

Бит76543210
ИмяDDD7DDD6DDD5DDD4DDD3DDD2DDD1DDD0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000

Бит n отвечает за вывод PDn: PD7, PD6, PD5, PD4, PD3, PD2, PD1, PD0.

PORTD — выходы и подтяжки порта D

Адрес 0x2B (I/O 0x0B), 8 бит, после сброса 0x00.

Бит76543210
ИмяPORTD7PORTD6PORTD5PORTD4PORTD3PORTD2PORTD1PORTD0
ДоступR/WR/WR/WR/WR/WR/WR/WR/W
После сброса00000000

Бит n отвечает за вывод PDn: PD7, PD6, PD5, PD4, PD3, PD2, PD1, PD0.

Частые вопросы

Какими командами ассемблера обращаться к регистрам порты ATmega328P?

Командами IN и OUT доступны PINB (0x03), DDRB (0x04), PORTB (0x05), PINC (0x06), DDRC (0x07), PORTC (0x08), PIND (0x09), DDRD (0x0A) и PORTD (0x0B); из них PINB, DDRB, PORTB, PINC, DDRC, PORTC, PIND, DDRD и PORTD — ещё и командами SBI, CBI, SBIS и SBIC для отдельных битов. В программе на C разницы нет: компилятор сам выбирает команду по адресу из avr/io.h.

Какие значения у регистров порты после сброса?

Все регистры блока, для которых даташит DS40002061B приводит значение после сброса (DDRB, PORTB, DDRC, PORTC, DDRD и PORTD), после сброса равны нулю.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
  2. Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры ATmega328P

Калькуляторы и статьи