관리 메뉴

거북이처럼 천천히

GPIO - LED control (1) 본문

Embedded Programming (AVR)/Atmega 128A (실습)

GPIO - LED control (1)

유로 청년 2024. 5. 25. 11:09

GPIO - 8개의 LED를 Shift하며 출력

1) 목표: Atmega 128a의 PORTD 8개의 LED를 연결 한 뒤, 0번째 비트에서 7번째 비트까지 Shift하면서 출력

2) 환경: Microchip Studio

 

3) Source code

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

#define TIME 150

int main(void) {
   // PORTD의 8핀을 출력으로 설정
   // PORTD = 1111 1111
   DDRD = 0xff;
   
   while(1) {
      for(int i=0; i<8; i++) {
         // PORTD0 : 0000 0001
         // PORTD의 0번째 비트에서 부터 왼쪽으로 1bit씩 Shift.
         PORTD = PORTD1<<i;
         _delay_ms(TIME); 
      }
   }
}

※ 0번째 핀에서 부터 시작하여 7번째 핀까지 150ms 주기로 Left Shift하면서 출력

※ PORTD1은 define 전처리기를 통해 1로 정의 (자세한 내용은 Data Sheet 참고)

 

 

4) 회로도

PORTD의 8개의 핀을 모두 LED에 연결하여 출력

 

 

5) 만약, 7번째 핀에서 부터 Right Shift하면서 출력을 발생 시키고 싶다면 아래와 같이 코드 구성

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

#define TIME 150

int main(void) {
   // PORTD의 8핀을 출력으로 설정
   // PORTD = 1111 1111
   DDRD = 0xff;
   
   while(1) {
      for(int i=0; i<8; i++) {
         // PORTD0 : 0000 0001
         // PORTD의 7번째 비트에서 부터 오른쪽으로 1bit씩 Shift.
         PORTD = 0x80>>i;
         _delay_ms(TIME); 
      }
   }
}

'Embedded Programming (AVR) > Atmega 128A (실습)' 카테고리의 다른 글

궁금증 정리 노트 - Atmega128A  (0) 2024.05.25
Pointer  (0) 2024.05.25
Separate Compilation  (0) 2024.05.25
Atmega128a의 변수 정리  (0) 2024.05.25
GPIO - LED control (2)  (0) 2024.05.25