오늘 포스팅할 내용은 ATmega128 입출력 제어입니다. ATmega128 데이터시트를 보면 I/O Ports에서 Register Description for I/O Ports에서 입출력 관련 레지스터에 대해 자세히 나와있습니다.
PORT Configuration
- ATmega128의 포트 입출력 방향은 DDRx 레지스터로 설정가능합니다. 종류는 DDRA, DDRB, DDRC, DDRD, DDRE, DDRF, DDRG로 총 7가지 입니다. 각 포트의 출력은 PORTx 레지스터로 DDR레지스터와 동일하게 PORTA, PORTB, PORTC, PORTD, PORTE, PORTF, PORTG 총 7가지가 있습니다.
PORTx/DDRx Register
- PORTx, DDRx 레지스터는 MCU 각 핀에 대응되는 설정값입니다. DDRA의 값을 '0'으로 하게 되면 A 핀이 입력이 설정되고 '1'로 하게 되면 출력이 설정됩니다. 데이터 방향이 출력일 때 PORTA의 값이 '1'이 되게 되면 A 핀에서 High를 출력하게 되고 '0'이 되게 되면 Low를 출력하게 됩니다.
PORT 출력 예제
1. PORTA의 모든 핀을 출력으로 설정하게 되면?
- DDRA = 0xFF("1 1 1 1 1 1 1 1")가 된다.
2. PORTA0만 출력으로 설정하게 되면?
- DDRA = 0x01("0 0 0 0 0 0 0 1")가 된다.
3. DDRA = 0xFF 일 때 PORTA4와 PORTA0만 High로 설정하게 되면?
- PORTA = 0x11("0 0 0 1 0 0 0 1")가 된다.
4. DDRA = 0xF0 일 때 PORTA = 0xFF를 설정하게 되면?
- 상위 4bit는 "High"이된며, 하위 4bit는 풀업이 됩니다.
5. DDRA 모든 포트 출력, PORTA 5번 핀만 "High" 구현.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <avr/io.h> int main(void) { DDRA = 0xFF; // 모든 포트 출력으로 설정. /* Replace with your application code */ while (1) { PORTA = 0x20; // 5번만 High } return 0; } |
PINx Register
- 입력으로 설정되어 있는 포트의 상태(High or Low)를 읽는 레지스터입니다.
PORT 입력 예제
1. PORTF의 모든 핀을 입력으로 설정하게 되면?
- DDRF = 0x00("0 0 0 0 0 0 0 0")가 된다.
2. PORTF의 0번 핀과 4번 핀만 입력으로 설정하게 되면?
- DDRF = 0xEE("1 1 1 0 1 1 1 0")가 된다.
3. PORTF0에 스위치(입력)를 이용해 스위치가 ON일 때 PORTA Low, 스위치가 OFF일 때 PORTA High 구현.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <avr/io.h> int main(void) { DDRA = 0xFF; // 모든 포트 출력으로 설정. DDRF = 0x00; // 모든 포트 입력으로 설정. /* Replace with your application code */ while (1) { if(PINF == 0x01) PORTA = 0x00; else PORTA = 0xFF; } return 0; } |
'MCU > AVR' 카테고리의 다른 글
ATmega128 블루투스 제어(HC-06) (1) | 2019.11.24 |
---|---|
ATmega128 타이머를 이용한 DC모터 제어 (0) | 2019.08.13 |
ATmega128 Delay함수 사용 방법 (3) | 2019.05.11 |
[atmel studio7]ATmega128 프로젝트 생성 (6) | 2019.04.05 |