뉴티씨



  • HOME
  • 고객지원
  • 자주하는 질문

 
[AVR 소스 관련] 포트(GPIO) I/O 제어쉽게 하는 법
 글쓴이 : NEWTC
작성일 : 09-12-22 17:46
조회 : 7,286  
안녕하세요?

8051 등에서는 비트별로 제어하는 함수들이 있었는 데 AVR에서는 그런 함수들이 잘 없어서,
불편해 하시는 분들을 많이 보았습니다.
예를 들어서, 8051에서는 P1.0 = 1; 이렇게 하면 포트 1의 0번 비트를 1로 쓸 수 있었지요.
무척 편리했습니다. 

그런데, 그렇게 하면 헥사 코드가 커지게 되어서, ICCAVR에서는 그러한 함수가 없습니다.
자체적으로 제작하여 사용해야 하지요. 그래서, 아래와 같이 만들어서 쓰곤 합니다.

아래는 비트 제어 하는 입출력 관련 정의입니다.
함수로 만들어도 쓰지만, 아래와 같이 define문으로 만들어 쓰면 편리하고 빠릅니다.
함수로 들어가지 않아도 되니까요. 함수로 들어가는 시간이 절약 되겠지요.

참고 하시길 바랍니다.

- 아래 1-
#define sbi(port, bit)        (port) |= (1 << (bit))
#define cbi(port, bit)        (port) &= ~(1 << (bit))

- 아래 2 -
#define        OUTPORT                        PORTC

#define        BIT_4                                0x10
#define        BIT_5                                0x20

#define        BIT4(m)                m?(OUTPORT|=BIT_4):(OUTPORT&=~BIT_4)
#define        BIT5(m)                m?(OUTPORT|=BIT_5):(OUTPORT&=~BIT_5)

아래 2처럼 하시면 나름 편리할 수도 있습니다.
하지만, 보통은 아래 1로 많이 씁니다.

입력 받는 것은

#define        INPORT                        PINC 

  unsigned char test4, test5;
  test4=INPORT&(0x10);
  test5=INPORT&(0x20);

이렇게 하시면 됩니다.
감사합니다.

 
   
 


1