개발 관련 학습정리/AVR(atmega128) Register 분석

[Atmega128] 1. 입출력 레지스터 I/O Register

호반반 2019. 8. 2. 14:41
반응형

처음으로는 i/o관련 레지스터 들로 input output을 결정하는 레지스터들이다.

avr은 port라는 것을 가지고 있는데 atmega128 기준으로는 porta부터 portf까지 8비트씩 있다.

 

 

 

위의 그림은 atmega328의 자료이니 그냥 참고용 사진이다.

 

 

 

 

위와 같이 포트 하나당 수행하는 역할이 있으며, 328 기준에서 portd와 portb가 아두이노 핀으로 사용되는 것 같다.

우리가 포트를 읽고 쓰려면 그전에 모드를 설정해 주어야 한다.

avr에 그 모드를 설정해 주는 레지스터가 바로 DDRx레지스터이다..

 

 

 

 

 

 

 

 

1.DDRx - Port X Data Diretion Register

 

예시로 포트b를 사용한다.

 

안의 8비트는 포트 b의 0... 7까지의 비트들을 조정하여

1일 경우, 출력으로 설정하고,

0일 경우, 입력으로 설정한다.      (기본값은 0으로 세팅되어있다.)

 

 

 

 

 

 

 

 

2.PORTx - Port X Data Register

 

DDRx로 출력을 사용할 경우, 이 레지스터를 사용해 포트에 값을 출력할 수 있다.

비트 별로 수정하려면 PORTx.n = 1을 사용하여 수정할 수 있다.

 

 

 

 

 

 

 

 

3. PINx - Port X Input Pins Address

 

DDRx로 입력을 사용할 경우, 이 레지스터를 사용해 포트에서 값을 받을 수 있다.

PORTx와 같이 비트 별로 받을 경우 PINx.n = 1을 사용하여 수정할 수 있다.

 

 

 

 

 

 

 

 

 

4. SFIOR - Special Function IO Register

2번 비트인 PUD를 사용한다

 

PUD : pull-up disable로,

이 비트를 1로 세팅하면 pull-up저항을 disable 시킨다.

 

 

 

 

 

 

 

 

 

예제 코드

// 아두이노 환경을 사용함

void setup()
{
    DDRB = 0x02; //8비트중 2번째비트를 output으로 설정.

    PORTB = 0x02; //output으로 설정된 2번째 비트를 high시킨다.

    PINB = 0x01; //기본값이 입력모드로 되어있는 나머지 비트중 1bit를 읽어온다.

    SFIOR = 0x00; // pullup 저항을 disable 시키려면 mux(2bit) 를 1로만든다. -> 0x02
}

void loop()
{

}

 

 

 

고등학생이 정리용으로 올린 글이니 코드나 글에 오류가 있을 수 있습니다.

 

 

 

 

 

 

 

 

[복두출판사]AVR ATmega128 프로그래밍 응용실습:ED-4513 마이크로프로세서 콤보 IT를 이용한, 복두출판사
반응형