펌웨어 = 데이터시트를 보면서 레지스터를 직접 제어
DDRx 레지스터는 입출력 설정 레지스터
0은 입력 1은 출력을 의미
" | " : 다른 설정들은 건드리지 않고 특정 값만 바꾸겠다는 의미
| 없으면 변수초기화하는것,, 싹 다 바꿈
PORTB |= 0 << PORTB5; // HIGH 으로 쓸 수도 있지만 PORTB &= ~(1 << PORTB5); 으로 더 많이 쓴다
/*
* 201103_LedBlink.c
*
* Created: 2020-11-03 오후 12:47:37
* Author : User
*/
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define MY_DELAY 1000
#include <avr/io.h>
int main(void)
{
DDRB |= 1 << DDB5;
while (1)
{
PORTB |= 1 << PORTB5; // HIGH
_delay_ms(MY_DELAY);
PORTB &= ~(1 << PORTB5); //LOW
_delay_ms(MY_DELAY);
}
}
/*
* 201103_LedBlink.c
*
* Created: 2020-11-03 오후 12:47:37
* Author : User
*/
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define MY_DELAY 1000
int main(void) {
DDRD |= 1 << DDD4;
DDRD |= 1 << DDD5;
DDRD |= 1 << DDD6;
while (1) {
PORTD |= 1 << PORTD4;
_delay_ms(MY_DELAY);
PORTD |= 1 << PORTD5;
PORTD &= ~(1 << PORTD4);
_delay_ms(MY_DELAY);
PORTD |= 1 << PORTD6;
PORTD &= ~(1 << PORTD5);
_delay_ms(MY_DELAY);
PORTD &= ~(1 << PORTD6);
}
}
DDRD = (1 << DDD4)|(1 << DDD5)|(1 << DDD6);
로 쓸 수도 있다
왔다갔다 불 켜짐
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define MY_DELAY 300
int main(void) {
DDRD = (1 << DDD4)|(1 << DDD5)|(1 << DDD6);
while (1) {
PORTD |= 1 << PORTD4;
_delay_ms(MY_DELAY);
PORTD |= 1 << PORTD5;
PORTD &= ~(1 << PORTD4);
_delay_ms(MY_DELAY);
PORTD |= 1 << PORTD6;
PORTD &= ~(1 << PORTD5);
_delay_ms(MY_DELAY);
PORTD &= ~(1 << PORTD6);
PORTD |= 1 << PORTD5;
_delay_ms(MY_DELAY);
PORTD &= ~(1 << PORTD5);
}
}
'임베디드 > Atmega328p' 카테고리의 다른 글
atmega 328p port ddrx (0) | 2020.11.04 |
---|---|
button (0) | 2020.11.04 |
arduino uno atmega pin map (0) | 2020.11.03 |
atmega328p datasheet (0) | 2020.11.03 |
AtmelStudio7.0 설치 atmega 328개발환경 (0) | 2020.11.03 |