PORTA에 연결된 8개의 LED 를 순차적으로ON 하는 예제입니다.
D0: ●○○○○○○○
D1: ○●○○○○○○
D2: ○○●○○○○○
D3: ○○○●○○○○
D4: ○○○○●○○○
D5: ○○○○○●○○
D6: ○○○○○○●○
D7: ○○○○○○○● |
PORTA의 0 ~ 7 포트까지 LED 8개가 연결되어 있고 LED에 불이 들어오게 하려면 해당되는 포트에 '0'을 출력하면 됩니다. D0(PORTA.0에 연결된 LED)부터 D7까지 차례대로 일정시간 ON된 후 OFF 되게 만들어 보겠습니다.
단 마지막 LED 가 ON/OFF 된 후에는 다시 처음으로 되돌아가서 무한 반복해야 합니다.
PORTA 에 대한 실험을 해보겠습니다. 실험에 사용할 회로와 WAT보드의 연결 방법은 아래와 같습니다.
< WAT-AVR128_EXT 보드와 WAT-IO&ADC 보드를 연결 중 >
< WAT-AVR128_EXT 보드와 WAT-IO&ADC 보드 연결 완료 >
원문은 http://avr128.com 에 있습니다.
주요 코드
main.c 일부
/*
EX_01_01.c
LED 순차적으로ON 하기
AVRStudio 4.18
2011-08-15
http://avr128.com
*/
#include <avr/io.h>
// 일정시간딜레이
void Delay()
{
register unsigned long i;
for(i = 0; i < 300000; i++)
{
asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
asm volatile(" PUSH R0 ");
asm volatile(" POP R0 ");
}
}
int main()
{
DDRA = 0xFF; // ALL OUTPUT
PORTA = 0xFE; // PORTA.0 LED ON
while(1)
{
Delay();
if(PORTA == 0x7F) // 마지막LED 가ON 되었다면.
{
// 처음LED ON 되게
PORTA = 0xFE; // PORTA.0 LED ON
}
else // 그렇지않다면
{
PORTA <<= 1; // 한칸이동한후
PORTA |= 1; // 마지막LED 는OFF 되게
}
}
} |
전체 소스
EX_01_01.zip