[실험 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)으로 바꾸어 컴파일 한다.
'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 |