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) 회로도
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 |