가장 기초적인면서도 가장 중요하다고 할 수 있는 MCU 8051 을 가지고 여러가지를 콘트롤 할 수 있는 여러가지 시도를 해볼 것이다.
그 전에 나에게 실험할 기회를 준 dearwolf 형에게 감사를 드린다.
문서는 내가 해본 것들을 중심으로 쓰여질 것이다. 여기서는 직접 만들 프로그램을 가지고 실험을 해볼 수 있는 환경을 만드는 데, 중점적으로 설명한다.
해보면서 느낀 것이지만, 일반 적인 타겟보드의 환경구축과 크게 다르지 않았다. 다음은 실험을 하는 데, 필요한 나의 PC 환경이다.
디바이스 | 성능 or 수량 |
CPU | 펜4 1.5GMHz |
OS | Windows 2000 server |
RAM | 512M |
그외 | 8051보드, 시리얼 케이블, 파워서플라이, 등등 |
환경 구축하기
위에 표에서 보면 알겠지만, OS 가 윈도우이다. 현재 까지는 어쩔 수가 없다. 8051 크로스 컴파일러가 리눅스용으로 구하지 못했기 때문이다. 게다가 윈도우용도 상용이다. dearwolf 형의 지원으로 구할 수 있었다.
keil uvision2 라고 하는 프로그램을 설치하면, 우선 크로스 컴파일을 위한 환경은 끝났다.
이제 8051 보드를 시리얼 포트에 꽂고, 파워 서플라이의 전원을 켜자! 그럼 8051 보드에 있는 8개의 LED 가 차례로 불이 들어올 것이다.
컴파일 및 실행하기
keil 프로그램을 실행해보자!
가장 먼저 해야 할 것은 project 를 만드는 일이다.
- Project 탭의 'New Project“ 을 실행한다. 여기서 프로젝트를 저장할 경로와 이름을 정해준다.
- CPU 의 타입을 정해주어야 한다. 워낙 종류가 많아서, 주의 해야 한다. 여기서는 'Atmel → AT89C51' 을 선택한다.
- 다음 메세지 창에서, 프로젝트에 필요한 파일을 복사할지를 묻는다. 일단(?) 여기서는 'Yes' 를 선택한다.
- 새로운 프로젝트가 시작되면, 왼쪽 창에 STARTUP.A51 파일이 보인다. 이 파일은 하드웨어에 대한 정보가 들어있다. 기본적으로는 0h 번지부터 실행이 되도록 세팅이 되어있다. 나의 경우는 8000h 부터 실행이 되어야 하므로 제대로 된 파일로 바꾸어주어야 한다.
- 프로젝트 디렉토리 안에 있는 STARTUP.A51 파일을 지우고, 나의 설정에 맞는 STARTUP.A51을 복사한다.
- 소스파일을 하나 만든다. 예를 들면, test.c 로 만든다. 그리고 나서 프로젝트 창에서 마우스 오른쪽 버튼을 이용해서 'Adds to…' 메뉴를 이용해서 추가한다.
이제 아래의 간단한 프로그램을 만들어 보자!
#include "reg51.h" delay(int i){ while(i--); } void main(void) { unsigned int i; while(1){ P1=0x05; delay(20000); P1=0x64; delay(20000);} }
저장을 한다. 아직 끝난 것이 아니다. 'Target 1' 에서 마우스 오른쪽 버튼을 이용해서 'Option to Target..' 을 선택한다.
- Target 탭에서 Xtal (MHz) : 11.0592
- Off-chip Code memory : Eprom → 0x8000 , 0x4000
- Output 탭에서 'Create HEX File' 을 체크한다.
- C51 탭에서 'Interrupt vectors at address : 0x8000' 입력한다.
이제 컴파일을 해보자!! 에러가 없이 컴파일 되었다면, 결과로 .hex 파일이 생성되었을 것이다. 이제 보드를 호스트 PC 에 연결하고 전원을 넣는다.
그리고 Multi-threaded TTY 를 이용해서 접속한다. 아래 표와 같이 설정한다.
포트번호 | COM4(호스트에 따라 달라질 수 있음) |
Baud | 9600 |
Parity | None |
Data Bits | 8 |
Stop Bits | 1 |
모니터 프로그램이 뜬다면, 올바르게 연결이 된것이다. 이제 'l' 버튼을 누르고 파일을 전송한다. 'r' 을 눌러서 직접 돌려보자!!
어떤가?? LED 가 움직이는게 보이는가??
제대로 동작을 하지 않을 때
나의 경우 제대로 컴파일 했음에도 불구하고, 직접 프로그램을 upload 하면, 제대로 실행이 안되는 문제가 있었다. 나중에 알고 봤더니, 컴파일을 하는 과정에서 소스파일을 제대로 add 하지 않았던 점이 발견되었다.