Порты ввода-вывода ATmega328P: регистры и биты
Каждым портом управляют три регистра: DDRx задаёт направление вывода (1 — выход), PORTx — уровень на выходе, а у входа включает подтяжку к питанию, PINx читает уровни на выводах. Запись единицы в бит PINx переключает соответствующий бит PORTx.
Данные: описание ATmega328P из пакета Microchip ATmega_DFP 3.6.299 (Apache-2.0), сверено со сводкой регистров даташита DS40002061B.
Регистры блока
| Регистр | Адрес | Назначение | После сброса |
|---|---|---|---|
| PINB | 0x23 (I/O 0x03) | Входы порта B | — |
| DDRB | 0x24 (I/O 0x04) | Направление выводов порта B | 0x00 |
| PORTB | 0x25 (I/O 0x05) | Выходы и подтяжки порта B | 0x00 |
| PINC | 0x26 (I/O 0x06) | Входы порта C | — |
| DDRC | 0x27 (I/O 0x07) | Направление выводов порта C | 0x00 |
| PORTC | 0x28 (I/O 0x08) | Выходы и подтяжки порта C | 0x00 |
| PIND | 0x29 (I/O 0x09) | Входы порта D | — |
| DDRD | 0x2A (I/O 0x0A) | Направление выводов порта D | 0x00 |
| PORTD | 0x2B (I/O 0x0B) | Выходы и подтяжки порта D | 0x00 |
Состояния вывода
Что делает вывод Pxn при разных битах DDxn и PORTxn и общем бите PUD в MCUCR (PUD = 1 выключает подтяжки всех портов). Таблица 14-1 даташита DS40002061B.
| DDxn | PORTxn | PUD | Вывод | Подтяжка | Состояние |
|---|---|---|---|---|---|
| 0 | 0 | X | вход | нет | высокий импеданс (Hi-Z) |
| 0 | 1 | 0 | вход | да | вывод отдаёт ток, если снаружи его тянут к земле |
| 0 | 1 | 1 | вход | нет | высокий импеданс (Hi-Z) |
| 1 | 0 | X | выход | нет | низкий уровень (вывод принимает ток) |
| 1 | 1 | X | выход | нет | высокий уровень (вывод отдаёт ток) |
PINB — входы порта B
Адрес 0x23 (I/O 0x03), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | PINB7 | PINB6 | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
Бит n отвечает за вывод PBn: PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0.
DDRB — направление выводов порта B
Адрес 0x24 (I/O 0x04), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | DDB7 | DDB6 | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит n отвечает за вывод PBn: PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0.
PORTB — выходы и подтяжки порта B
Адрес 0x25 (I/O 0x05), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | PORTB7 | PORTB6 | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит n отвечает за вывод PBn: PB7, PB6, PB5, PB4, PB3, PB2, PB1, PB0.
PINC — входы порта C
Адрес 0x26 (I/O 0x06), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | PINC6 | PINC5 | PINC4 | PINC3 | PINC2 | PINC1 | PINC0 |
| Доступ | R | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
Бит n отвечает за вывод PCn: PC6, PC5, PC4, PC3, PC2, PC1, PC0.
DDRC — направление выводов порта C
Адрес 0x27 (I/O 0x07), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | DDC6 | DDC5 | DDC4 | DDC3 | DDC2 | DDC1 | DDC0 |
| Доступ | R | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит n отвечает за вывод PCn: PC6, PC5, PC4, PC3, PC2, PC1, PC0.
PORTC — выходы и подтяжки порта C
Адрес 0x28 (I/O 0x08), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | — | PORTC6 | PORTC5 | PORTC4 | PORTC3 | PORTC2 | PORTC1 | PORTC0 |
| Доступ | R | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит n отвечает за вывод PCn: PC6, PC5, PC4, PC3, PC2, PC1, PC0.
PIND — входы порта D
Адрес 0x29 (I/O 0x09), 8 бит.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | PIND7 | PIND6 | PIND5 | PIND4 | PIND3 | PIND2 | PIND1 | PIND0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
Бит n отвечает за вывод PDn: PD7, PD6, PD5, PD4, PD3, PD2, PD1, PD0.
DDRD — направление выводов порта D
Адрес 0x2A (I/O 0x0A), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | DDD7 | DDD6 | DDD5 | DDD4 | DDD3 | DDD2 | DDD1 | DDD0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит n отвечает за вывод PDn: PD7, PD6, PD5, PD4, PD3, PD2, PD1, PD0.
PORTD — выходы и подтяжки порта D
Адрес 0x2B (I/O 0x0B), 8 бит, после сброса 0x00.
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Имя | PORTD7 | PORTD6 | PORTD5 | PORTD4 | PORTD3 | PORTD2 | PORTD1 | PORTD0 |
| Доступ | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
| После сброса | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит 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), после сброса равны нулю.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — сводка регистров, диаграммы битов и значения после сброса
- Microchip ATmega_DFP 3.6.299, описание ATmega328P (ATDF) — регистры, битовые поля и их значения, лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры ATmega328P
- Все регистры ATmega328PТаблица по адресам
- USART0UCSR0A, UCSR0B, UCSR0C, UBRR0, UDR0
- TWI (I²C)TWBR, TWSR, TWAR, TWDR, TWCR, TWAMR
- Таймер-счётчик 1 (16 бит)TIFR1, GTCCR, TIMSK1, TCCR1A, TCCR1B, TCCR1C
- Таймер-счётчик 2 (8 бит, асинхронный)TIFR2, GTCCR, TIMSK2, TCCR2A, TCCR2B, TCNT2
- АЦПADC, ADCSRA, ADCSRB, ADMUX, DIDR0
- Аналоговый компараторACSR, DIDR1
- Таймер-счётчик 0 (8 бит)TIFR0, GTCCR, TCCR0A, TCCR0B, TCNT0, OCR0A
- Внешние прерыванияPCIFR, EIFR, EIMSK, PCICR, EICRA, PCMSK0
- SPISPCR, SPSR, SPDR
- EEPROMEECR, EEDR, EEAR
- Ядро и системные регистрыGPIOR0, GPIOR1, GPIOR2, SMCR, MCUSR, MCUCR