스마트 컨트롤러 - 발광다이오드에 불 켜기
#1. ATmega128A Datasheet(Memory & Register Summary)
학습목표 - 메모리의 Register의 구조를 이해한다.
ATmega128A Datasheet를 본다.
지난 시간에 배웠던 메모리 부분을 복습.
메모리 관련 알아두어야 할 주소는 $0020 - $00FF까지이다.(I/O Reg.)
GPR(General Purpose Register)은 사용자(C언어)가 조작하는 것이 아니라 CPU에서 작업 수행 시 작동한다.
I/O Register는 기능을 수행하는 레지스터이다.
29. Register Summary
표에서 나온 내용 중 괄호 안에 있는 주소가 Configuration A임으로 괄호안의 주소를 참조하여야 한다.
#2 - #4. ATmega128A 실습 - 다이오드에 불켜기
학습목표 - 발광다이오드에 교대로 불이 들어오게 프로그램밍 할 수 있다.
// 다리가 긴 쪽, 다이오드 안에 역삼각형 덩어리가 들은 것이 +
//DDR - Data Direction Register
CPU 공간은 최적화를 시키면 안된다. 최적화는 2개 이상의 명령어가 있을 시 CPU에서 효율성을 따져 명령어를 수행하는 것인데 CPU는 휘발성 메모리이기 때문에 최적화에 적합하지 않다.
실습 - 간단한 입출력 코딩)
발광 다이오드에 불이 들어오도록 코딩을 해보자!
#define으로 주소값을 문자화 시켜서 다시 코딩해보자!
반복적으로 불을 켜고 끄는 명령어를 입력하게 되면 CPU의 처리 속도가 빠르기 때문에 불이 깜빡거리는 효과를 볼 수 없다. 이 때 for문을 넣어서 CPU가 일을 하게 만들어 준다.
하지만! CPU의 최적화기능 때문에 반복문을 다 해내지 않고 결과 값만 도출시키기 때문에 깜빡거리는 현상을 볼 수 없게 된다. 이 때 volatile을 선언하여 최적화 기능을 없애버린다.
이에 발광다이오드에 유휴시간이 생겨나 불이 깜빡거리는 현상을 보게 된다.
//“무궁화 꽃이 피었습니다” 코드 for(uiCnt=0;uiCnt<60000;++uiCnt);
'Busan IT > 스마트 컨트롤러' 카테고리의 다른 글
매크로 함수 (0) | 2015.03.07 |
---|---|
ATmega128A의 메모리 구조(I/O 레지스터) 헤더파일 생성 및 #if (0) | 2015.03.05 |
ATmega128A Datasheet(특징 및 메모리)와 WinAVR설치 (1) | 2015.03.03 |
Atmega 128A데이터 시트와 AVR Studio 세팅 (0) | 2015.03.02 |
ATmega12A 소개, 주소상수를 활용한 초기화, #define (0) | 2015.02.27 |