Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- atmega 128a
- pwm
- behavioral modeling
- vivado
- ATMEGA128A
- Algorithm
- Pspice
- KEYPAD
- soc 설계
- Edge Detector
- stop watch
- java
- structural modeling
- half adder
- ring counter
- BASYS3
- gpio
- LED
- Linked List
- FND
- Recursion
- test bench
- verilog
- dataflow modeling
- i2c 통신
- D Flip Flop
- prescaling
- DHT11
- uart 통신
- hc-sr04
Archives
- Today
- Total
거북이처럼 천천히
GPIO - LED control (1) 본문
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 |