C언어 기초가 부족해서 소스를 받아서 일단 과제를 했는데 어떻게 돌아가는건지 자세히 알고 싶어서 글남깁니다.
#include <avr/io.h>
#include "OK128.h" void main(void)
{
DDRA=0xff;
int i;
while(1)
{
PORTA=0xFE; for(i=0;i<8;i++)
{
PORTA=PORTA<<1;
PORTA=PORTA|0x01;
Delay_ms(1000);
if(PORTA==0x7F)
{
for(i=0;i<8;i++)
{
PORTA=PORTA>>1;
PORTA=PORTA|0x80;
Delay_ms(1000);
if(PORTA==0xfe)
{
for(i=0;i<8;i++);
}
}
}
}
}
}
#include <avr/io.h>
#include "OK128.h" void main(void)
{
DDRA=0xff;
int i;
while(1)
{
PORTA=0xFE; for(i=0;i<8;i++)
{
PORTA=PORTA<<1;
PORTA=PORTA|0x01;
Delay_ms(1000);
if(PORTA==0x7F)
{
for(i=0;i<8;i++)
{
PORTA=PORTA>>1;
PORTA=PORTA|0x80;
Delay_ms(1000);
if(PORTA==0xfe)
{
for(i=0;i<8;i++);
}
}
}
}
}
}
PORTA : 포트 제어 레지스터 ( 1일경우 High 0일경우 Low)
X << Y : 비트이동 명령 , X를 <<쪽 방향으로 Y 비트만큼 이동
이거면 분석이 되실듯..
PORTA=PORTA<<1;
왼쪽으루
PORTA=PORTA>>1;
오른쪽으루 비트 이동이구요 ~ 비트 이동되면서 불켜지것네요 ㅋㅋ
DDRA=0xff; // A 포트를 출력하는데 사용하겠다는 선언
int i; // 일반 변수 선언
while(1) // 실제프로그램(무한루프)의 시작입니다. 비교값이 1, 즉 true이기 때문에 탈출하지 않습니다.
{
PORTA=0xFE; // PA0에는 0 V의 전압이 출력되네요 led연결에 따라 0번만 불이 켜지고 꺼져있겠네요led의 다른쪽이
// 전원이랑 연결 되어 있는 형태가 일반적이니 아마 0번만 불이 켜져 있을거라 생각합니다.
for(i=0;i<8;i++) // 8번 반복이네요
{
PORTA=PORTA<<1; // 오른쪽에서 왼쪽으로 한비트씩 시프트 시킨다는 뜻입니다. 불이 0에서 1,2,3... 의 순으로 옮겨질태죠
PORTA=PORTA|0x01;// 시프트 되서 팅겨 나온 값이 에러를 일으키지 않도록 방지 하는 안정장치
Delay_ms(1000); //시간지연이네요 불이 1초마다 옮겨지도록 설정됬네요
if(PORTA==0x7F)// 불이 7번까지 다 옮겨졌을 경우에 실행됩니다.
{
for(i=0;i<8;i++) // 반복
{
PORTA=PORTA>>1; // 이번엔 왼쪽에서 오른쪽으로 한비트씩 옮기네요
PORTA=PORTA|0x80; // 위와 같은 안전해로 이번에는 시프트 방향 바껴있어 값이 변했네요
Delay_ms(1000);
if(PORTA==0xfe) // 음 여기부터는 잘못된거 같은데요.. 위에 있는데 왜 또있는건지..
{
for(i=0;i<8;i++);
}// 아래 의 괄호만 제대로 닫으시면 동작하는데 무리는 없을듯..
}
}
}
}
}///동작에는 무리가 없을듯한데 제가 보기에는 for는 특별히 없어도 똑같이 동작 할거 같네요 ㅎㅎ