오늘은 처음으로 LED 켜기를 해 봤다.
간단한 듯 하면서도 포트에 대한 개념이 조금 잡히는 듯 하였다.
여기에서는 DDRD와 PORTD 개념이 나왔는데
DDRD는 포트 D의 입출력 방향을 설정하는 레지스터라고 나오면서
여러가지 말이 나왔는데 이 코드를 보고 비트 1로 설정이 되면 출력 0으로 설정이 되면 입력
으로 이해를 하였다.
그리고 PORTD는 포트 D의 데이터 출력 레지스터로 LED를 켜고 끄는 걸 말하는 걸로 이해 하였다.
그리고 3가지의 코드를 작성해 보았는데
첫번째 코드는 8개의 LED를 켜고 끄는 코드를 작성해 보았다.
==============================================================================
#include<avr/io.h>
#include<avr/delay.h>
int main(void)
{
char i;
DDRD = 0XFF;
while(1)
{
PORTD = 0XFF;
for(i = 0; i < 20; i++)
{
_delay_ms(10);
}
PORTD = 0X00;
for(i = 0; i < 20; i++)
{
_delay_ms(10);
}
}
}
==============================================================================
두번째 코드는 12, 34, 56, 78 순서대로 LED가 켜지도록 코드를 작성하였다.
==============================================================================
#include<avr/io.h>
#include<avr/delay.h>
int main(void)
{
char i;
DDRD = 0xff;
do{
PORTD = 0xc0;
for(i = 0; i < 200; i++)
{
_delay_ms(10);
}
PORTD = 0x30;
for(i = 0; i < 200; i++)
{
_delay_ms(10);
}
PORTD = 0x0c;
for(i = 0; i < 200; i++)
{
_delay_ms(10);
}
PORTD = 0x03;
for(i = 0; i < 200; i++)
{
_delay_ms(10);
}
}while(1);
}
==============================================================================
세번째 코드는 시프트 연산을 이용하여 전체에서 하나씩 LED가 꺼지는 코드를 작성하였다.
==============================================================================
#include<avr/io.h>
#include<avr/delay.h>
int main(void)
{
char i;
DDRD = 0XFF;
PORTD = 0XFF;
while(1)
{
PORTD = PORTD >> 1;
for(i = 0; i < 100; i++)
{
_delay_ms(10);
}
if(0x00 == PORTD)
{
PORTD = 0XFF;
}
}
}
==============================================================================
이제 대충 LED 자체를 켜고 끄는 코드는 어느정도 이해를 한 것 같다.
다음에는 버튼을 입력 받아 LED를 켜고 끄는 것을 해 봐야겠다.
'AVR' 카테고리의 다른 글
외부 인터럽트를 이용한 LED 켜고 끄기(이론) (0) | 2009.07.03 |
---|---|
버튼 입력 받아 LED 켜고 끄기 (0) | 2009.07.02 |
AVR Studio 4의 간단한 사용법 (0) | 2009.07.01 |
LED 연습을 할 브레드 보드 (0) | 2009.06.30 |
WINAVR과 AVR Studio 4.16 설치 (0) | 2009.06.30 |