본문 바로가기
Mcu 만져보기

Atmega128 LED 구동하기2

by 닉네임 없네용 2024. 3. 1.

[실험 2] 시간 지연 함수를 이용한 LED 반복점등하기

 

(0) 시간 지연 함수를 만들어서, PORTA의 비트 0~3번과 4~7번에 해당하는 LED를 약 1초 간격으로 반복적으로 점등하여 보자.

 

(1) 다음 프로그램을 작성하여라.

#include <avr/io.h>
void delay(int temp);            //  (가)
int main()
{
  DDRA=0xFF;
  for (;;)                                //   (나)
{
   PORTA=0xF0;
   delay(200);
   PORTA=0x0F;
   delay(200);
}
  return 0;
}
void delay(int temp)            //   (다)
{
    volatile int i,j;                   //   (라)
     for(i=0;i<1000;i++)         //   (마)
      for(j=0;j<temp;j++);
}

 

(2) 프로그램을 컴파일하고, Atmega128로 다운로드하고, 정상작동 여부를 확인하라.

 

(3) 프로그램 의미를  파악하시오.

 

-(나)문장의 "FOR(;;)"의 의미는?

 c함수 for문으로서 무한루프이다.

 (마)의 경우도 for문이기는 하지만 변수 i가 0부터 999까지 총 1000번 루프를 수행한다는 의미이다. 

 

-(라)문장의 "volatile"의 의미는?

 우리가 작성한 c언어를 기계어로 바꾸어주는 컴파일러의 재량을 제한하는 역활로 개발자가 설정한 개념을 구현하기 위해   코딩된 프로그램을 온전히 컴파일되도록 한다.

 

-delay( ) 함수의 역할은?

시간 지연함수로서 실행중 설정한 값의 시간만큼 정지시키는 역활을 한다.

만약 delay(200)이면 200ms 즉 0.2초를 정지시키고 delay(1000)이면 1초를 정지시킨다.

 

(4) 응용 실험1

점등간격을 반으로 줄이시오.

delay(200)을 delay(100)으로 바꾸어 컴파일한다.

 

(5) 응용 실험 2

(나)문장을 while문으로 바꾸어 보시오.

 "for (;;)"를 while(0)으로 바꾸어 컴파일 한다.

 

실험 결과

 

응용 실험 결과 1

 

'Mcu 만져보기' 카테고리의 다른 글

Atmega128 LED 구동하기 4  (0) 2024.03.03
Atmega128 LED 구동하기 3  (0) 2024.03.02
Atmega128로 LED구동하기  (0) 2024.03.01
MCU vs MPU 둘의 차이는 무엇일까?  (2) 2024.02.01
Amega128 vs 라즈베리파이 뭐가 다른가?  (0) 2024.02.01