MCU/AVR

atmega128 간단정리중

고냥정권 2013. 5. 3. 21:31

명령어와 cpu의 사양이 뒤죽박죽입니다만. 인터넷에서 필수적인 것들을 모으고있습니다.



PINA는 입력된 값을 읽고
PORTA는 출력할 값을 읽고
DDRA는 그 포트의 방향을 정해준다.


DDRA 는 제일 처음에 0xFF 이런식으로 모두다 쓴다는 식으로 설정해준다. (LED 모두를 다 쓴다는거다.)

 FF 가 16진수 인데 2진수로 11111111 이므로 LED 8개 다 사용한다!!!!


PORTA 는 출력할 값을 읽는다고 했는데

 PORTA =0xCC 이런식으로 주어지게 되면 1100 1100 이렇게나온다(2진수로) 그러면 LED도 저런 식으로 똑같이 사용된다.

 반대는 0x33; 00110011 이다




- VCC : 전원 전압 공급 핀

- GND : 접지핀

- XTAL1 ~ XTAL2 : 발진기 입력단자. 크리스탈 또는 오실레이터를 접속한다.

- TOSC1 ~ TOSC2 : 타이머/카운터에 공급되는 클록 발진기를 접속한다.

- AVCC, AGND : AVR 내부 A/D 변환기에 공급되는 전원 입력 단자. 보통 VCC 전원에 저역필터를 거친 전원을 접속한다.

- AREF : A/D 변환기의 기준 전압 입력핀으로 AVCCAGND사이의 전압을 인가한다.

- ALE : Address Latch Enable 신호로 외부 메모리 또는 I/O를 확장할 때 사용하는 핀이다.

- WR : 외부 메모리 또는 I/O를 확장할 때 사용하는 쓰기(Write) 신호

- RD : 외부 메모리 또는 I/O를 확장할 때 사용하는 읽기(Read) 신호

- RESET : 리셋 입력 핀

- PEN : 저 전압 직렬 프로그램 모드에서 사용하는 Program Enable 신호이다.

- Port A (PA7..PA0) : 양방향 포트로 내부 풀업이 되어있다.

- Port B (PB7..PB0) : 양방향 포트로 내부 풀업이 되어있다.

- Port C (PC7..PC0) : 양방향 포트로 내부 풀업이 되어있다.

- Port D (PD7..PD0) : 양방향 포트로 내부 풀업이 되어있다.

- Port E (PE7..PE0) : 양방향 포트로 내부 풀업이 되어있다.

- Port F (PF7..PF0) : 양방향 포트이고, A/D 변환기 입력 포트 또는 JTAG 프트로도 사용된다.

- Port G (PG4..PG0) : 양방향 포트로 5비트만 있다.


입출력 포트

총 53개의 입출력 포트를 가지고 있다.

포트 에 대해 알아보기로 한다.

  <?xml:namespace prefix = o /><?xml:namespace prefix = o />

□ 포트 데이터 방향 레지스터 (DDRA) - Port A Data Direction Register

포트 A의 입출력 방향을 제어한다.

0 = 입력 방향

1 = 출력 방향

 

 포트 A 데이터 레지스터 (PORTA) - Port A Data Register

- 출력 모드 일 때

0 = Low 출력

1 = High 출력

입력 모드 일 때

0 = No Pull-up (3-state(HI-Z) 상태)

1 = Pull-up 상태

 

□ 포트 입력 핀 어드레스 (PINA) - Port A Input Pin Address

PINA는 레지스터가 아닌 입력 핀의 상태를 읽는데 사용한다.


8비트로 나타낼 수 있는 비트의 형태는 총 256가지가 됩니다.

signed라하면 -128 ~ 127까지의 정수를 표현하고

unsigned로하면 0 ~255까지 수를 표현할 수 있읍니다.


핀 값

#define SW1 0x00

#define SW2 0x02

#define SW3 0x04

#define SW4 0x08

#define SW5 0x10

#define SW6 0x20

#define SW7 0x40

#define SW8 0x80



if((PIND & SW2)==0x00)  <= 스위치 2가 눌리지 않았다면

if((PIND & SW2)!=0x00)  <= 스위치 2가 눌렸다면


차이점을 잘 봅시다.

if((PIND == 0x04)   <= 스위치 2만 눌러져야합니다. 다른건 안되는거죠.

if((PIND & SW2) != 0x00) <= 스위치2만 눌리면 됩니다. 다른건 상관없습니다.


if(PIND ==0x00) 전부 눌리면 안되는 거죠

if(PIND !=0x00) 어느 하나라도 눌리면 되는 겁니다. 


if((PIND &SW0)==0x00) 스위치 0이 눌리지 않았으면

if((PIND &SW0)!= 0x00 ) 스위치 0만 누르면 됩니다.



반응형