내장형 하드웨어/ATmega128

ATmega Pin Configurations, DDR, PORT, PIN

동화다아아 2011. 4. 20. 15:52

ATmega Pin Configurations

 


- RESET(핀20) : 입력단자로 1레벨이 입력되면 리셋되어 PC(Program Counter)는 일반적으로 0번지를 가르키고 0번지부터 프로그램이 시작된다. 리셋시 대부분의 레지스터는 0으로 된다.

- XTAL1,XTAL2(핀24,23) : 발진용 증폭기 입력 및 출력 단자.

- VCC(핀21,51) : 전원 입력 단자.

- GND(핀22,53,63) : 그라운드 입력 단자.

- AVCC(핀64) : AD변환기 및 포트 F에 대한 공급 전압.

- AREF(핀62) : ADC 참조 전압.

- PEN(핀1) : SPI를 활성화시키는 단자로 일반적인 동작모드에서는 사용하지 않고 파워 온 리셋시 0상태로 유지해 SPI를 허용하게 한다.


- 포트A(PA7~PA0:핀44-51) : 내부 풀업 저항이 있는 8비트 양방향 입출력 단자. 외부메로리를 둘 경우에는 주소버스(A7-A0)와 데이터버스(D7-D0)로 사용.

- 포트B(PA7~PA0:핀10-17) : 내부 풀업 저항이 있는 8비트 양방향 입출력 단자. SPI용 단자 혹은 PWM 단자로도 사용된다.

- 포트C(PA7~PA0:핀35-42) : 내부 풀업 저항이 있는 8비트 양방향 입출력 단자. 외부메모리를 둘 경우에는 주소버스(A15-A8)로 사용된다.

- 포트D(PA7~PA0:핀25-32) : 내부 풀업 저항이 있는 8비트 양방향 입출력 단자. 타이머용 단자 혹은 외부인터럽트용 단자로도 사용된다.

- 포트E(PA7~PA0:핀2-9) : 내부 풀업 저항이 있는 8비트 양방향 입출력 단자. 타이머용 단자, 외부인터럽트, 아날로그 비교기, USART용 단자로도 사용된다.

- 포트F(PA7~PA0:핀54-61) : 내부 풀업 저항이 있는 8비트 양방향 입출력 단자, AD변환기 혹은 JTAG 인터페이스용 단자로도 사용된다.

- 포트G(PA4~PA0:핀19,18,43,34,33) : 내부 풀업 저항이 있는 8비트 양방향 입출력 단자. 외부 메모리접속을 위한 스트로브 신호용, RTC(Real Time Counter) 타이머용 발진기 단자로도 사용된다.


DDRx : 입출력 방향 설정

PORTx : 출력하려는 값 설정

PINx : 외부에서 들어오는 값

DDRF = 0xFF;    : F포트를 출력용으로 쓰겠다.

DDRF = 0b11111111 : F포트를 출력용으로 쓰겠다.


// 테스트 - led 가 4개씩 좌우로 깜박인다.

#include<avr/io.h>


int main(void)

{

        // 실행 포트 초기화

        DDRF = 0xFF;

        PORTF = 0xFF;

        volatile unsigned int i;

        for(;;)

        {

                PORTF = 0b11110000;

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                

                

                PORTF = 0b00001111;

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                for(i=0;i<20000;i++);

                

        }

        return 0;

}