제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf ·...

11
제3장. 8051 개발환경 제3편 8051 인터페이스와 주변기기 Keil Compiler Package uVisionII : 프로그램 작성 컴파일, 디버그 작업을 모두 관리할 수 있는 기능을 내장한 통합개발환경(IDE)이다. A51 Assembler: Assembly로 작성한 프로그램을 Object 파일이나 머신코드로 변환해 주는 기능을 담당한다. C51 Compiler: C 언어로 작성한 프로그램을 링커&로케이터가 사용할 Object 파일로 변환해 주는 기능을 담당한다. BL51 Linker&Locator: 각 모듈별로 어셈블이나 컴파일된 오브젝트 파일들을 하나로 묶어 설계된 하드웨어 메모리 맵에 맞게 변환하여 마이크로 컨트롤러가 실행할 수 있는 파일을 생성시키는 기능을 담당한다. dScope(tScope) Debugger: BL51에 의해 생성된 실행파일의 정상 동작 여부를 판별할 수 있도 록 디버그 기능이 내장된 어플리 케이션이다. 1. 학습보드 개발(학습) 환경 2. uVisionII의 컴파일 및 링크과정 CD의 Keil_Evaluation\Keil uVision2\ek51v7xx.exe를 실행 -참고 :CD에는 2KByte 코드 제한을 갖는 Keil Evaluation Version 내장되어 있다. 그러나 코드 크기가 몇몇 실험 (Ex. 그래픽 LCD한글 디스플레이와 전자 계산기 실험) 외에는 충분하다. 3. uVisionII 설치 4. 라이선스 체크 윈도우 5. 사용자 및 시리얼 번호 기입 윈도우 Serial: 항목은 Evaluation Version이므로 그대로 둔다.

Transcript of 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf ·...

Page 1: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

1

제3장. 8051 개발환경

제3편 8051 인터페이스와 주변기기Keil Compiler Package uVisionII: 프로그램 작성 및 컴파일, 디버그 작업을 모두 관리할 수 있는기능을 내장한 통합개발환경(IDE)이다.

A51 Assembler:Assembly로 작성한 프로그램을 Object 파일이나 머신코드로 변환해

주는 기능을 담당한다.

C51 Compiler:C 언어로 작성한 프로그램을 링커&로케이터가 사용할 Object 파일로변환해 주는 기능을 담당한다.

BL51 Linker&Locator:각 모듈별로 어셈블이나 컴파일된 오브젝트 파일들을 하나로 묶어설계된 하드웨어 메모리 맵에 맞게 변환하여 마이크로 컨트롤러가실행할 수 있는 파일을 생성시키는 기능을 담당한다.

dScope(tScope) Debugger:BL51에 의해 생성된 실행파일의 정상 동작 여부를 판별할 수 있도록 디버그 기능이 내장된 어플리 케이션이다.

1. 학습보드 개발(학습) 환경

2. uVisionII의 컴파일 및 링크과정

CD의 Keil_Evaluation\Keil uVision2\ek51v7xx.exe를 실행

-참고 : CD에는 2KByte 코드 제한을 갖는 Keil Evaluation Version이 내장되어 있다. 그러나 코드 크기가 큰 몇몇 실험 (Ex. 그래픽LCD한글 디스플레이와 전자 계산기 실험) 외에는 충분하다.

3. uVisionII 설치

4. 라이선스 체크 윈도우 5. 사용자 및 시리얼 번호 기입 윈도우

Serial: 항목은 Evaluation Version이므로 그대로 둔다.

Page 2: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

2

6. 윈도우 시작 프로그램 메뉴 등록

위 그림과 같이 윈도우의 시작 메뉴에 Keil PK51 – Eval로 등록 된다.

여기서 PK는 Professional development Kit의 약어이다.

7. Utility 설치 및 실험 Sample 소스 Copy

CD의 Keil_Evaluation\Util_CodeGen\setup.exe를 실행하면된다. 이 프로그램은 ‘Font Generator’, ‘Graphic Code Generator’문자 LCD ‘Font Generator’, ‘Serial Comm’, ‘Dot Matrix Code GEnerator’를 포함하고 있으며 C 코드 데이터를 생성해 준다.

‘Code Generator’를 설치한 후 아래 그림처럼 맨 처음 실행하면 위 그림처럼경로 선택 윈도우가 열리게 된다. 위의 경로는 Keil Compiler Package(PK51)이 설치된 경로를 설정해 주고 아래 경로는 제공된 CD(Keil Evaluation과 Code Generator가 내장된 CD)가 들어있는 CD롭 드라이브를 선택하면 된다.

8. 설치 후 CodeGen 실행 초기화면

위의 메시지는 앞 장의 경로 설정 위도우의 경로 값을 잘못 설정한경우 나타나는 윈도우로 확인을 누르면 앞 장의 윈도우를 다시 설정할 수 있도록 한다.

9. 경로 선택이 잘못된 경우 열리는 메시지 윈도우

맨 위의 아이콘을 누르면 해당모드로 변환된다.

10. 정상적으로 설정이 끝난 후 ‘Code Generator’ 초기화면

PC에는 컴파일 및 디버그 환경인 uVisionII가 설치되고 PC와 학습보드는 Serial(Serial 암-암 Cable)로 연결된다.

11. 학습보드 설치

Page 3: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

3

12. UVisionII 사용법: 프로젝트 생성 및Compile & Linking 작업

새로운 프로젝트(New Project) 생성 : “Project Menu의 New Project…” 클릭

한 후 원하는 폴더에 새로운 프로젝트 생성

13. 사용하는 8051 Device 선택

학습보드 80C31을 사용하므로 반도체 회사명에 상관없이 8031AH나 80C31BH를 선택하면 된다.

‘File’ 메뉴의 ‘New’를 클릭하여 새로운 파일을 생성한 후 ‘Save AS’를 클릭하여 ?.C나 ?.ASM 또는 ?.A51로 저장한다.*.A51이나 *.ASM은 어셈블리 파일로 인식한다.

14. 코드 파일 생성

저장한 파일을 프로젝트에 추가하기 위해 좌측의 프로젝트 윈도우에서 ‘Source Group1’을 선택한 후 오른쪽 버튼을 클릭하고 위 그림과 같이 ‘Add Files to Group….’을 클릭하면 소스 브라우저 윈도우가 나타난다. 원하는 파일을 선택한 후 ‘확인’하면 프로젝트에

정상적으로 추가된다.

15. 생성한 파일 프로젝트에 추가

16. 프로젝트 옵션 설정

앞 장의 좌측 프로젝트 윈도우에서 ‘Target1’을 클릭한 후 마우스 오른쪽 버튼을클릭하면 ‘Option for Group…’이 나타나는데 이를 클릭하면 위와 같이 옵션 설정 윈도우가 나타나게 된다. 위의 옵션 탭은 학습 보드의 메모리 맵을 설정하는부분이 된다. 위와 같이 설정하면 프로그램 메모리가 5000H~AFFFH가 된다.

‘Output’의 탭은 실행파일 이름을 정의(Default로 프로젝트 이름과 동일)하며 디버거를 사용하기 위해 ‘Debug Information’이 설정되어 있어야한다. 기본 값으로 설정되어 있으며 Hex 파일을 생성하고자 한다면 ‘CreAte Hex file’을 클릭하기 바란다.

17. 실행파일 출력 옵션

Page 4: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

4

C51 탭은 C언어로 작성된 코드를 컴파일할 때 사용할 옵션을 정의.학습보드에서는 위의 그림과 같이 Interrupt Vector…’을 0x5000으로 반드시설정하여야 한다. 좌측 ‘Code Optimization’은 코드 최적화 레벨 설정 옵션이다.

18. C51 컴파일러 옵션 19. BL51 Misc 옵션 설정

BL51 Misc 탭은 Warning Level을 설정할 수 있다. 특정 Warning Message 발생을원하지 않을 경우 위 그림과 같이 설정하면 된다.

생성한 프로젝트 소스를 어셈블, 컴파일, 링크하는 모든 작업을 빌드(Build)라 하며 위 그림과 같이 빌드 아이콘을 클릭하므로서 실행된다.uVisionII IDE는 앞에서 설정한 옵션에 따라 프로젝트를 빌드하게 된다.

20. 프로젝트 빌드(Build)

빌드(Build) 아이콘

21. 프로젝트 빌드 후 생성된 실행파일

빌드 후 생성된 파일을 보면 확장자 없는 파일이 디버거에서 사용할 실행 파일이 된다. *.hex는 Intel Hex 형식의 실행 파일이며*.M51은 멥파일로서 실행파일의 구성과 옵션등에 대한 정보를포함하고 있다.

디버거 사용을 위해 옵션 윈도우의 디버그 탭 설정이 필요하다. 위의 그림과같이 ‘Use Keil Monitor-51 Driver’를 설정하고 ‘Load Application at Startup’을 설정하기 바란다.

22. uVisionII 사용법: 디버거 사용을 위한 설정

uVisionII의 소스작성 및 컴파일 환경에서 디버그 모드로 전환하기 위해서는컴파일 및 링크 후 위 그림과 같이 디버그 모드 전환 아이콘을 클릭하면 된다.dScope 버튼을 클릭하면 디버그 모드로 전환한 후 실행 파일을 다운로드 하게 된다.

23. uVisionII 사용법: 디버거 ‘tScope’로의 전환

디버그 모드 변환 아이콘‘tScope’ 버튼

Page 5: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

5

디버그 기능을 갖는 아이콘 설명

24. uVisionII 디버거 tScope 환경 사용법 25. 레지스터와 와치 윈도우

노랑 화살표: 현제 실행할어드레스, PC가 가리키는 번지

레지스터 윈도우는 현제의 8051 내부 시스템 레지스터 값을 보여주며와치 윈도우는 현제 변수가 갖는 값을 보여준다.

심볼 윈도우는 우리가 작성한 코드 심볼(함수명, 변수명)을 쉽게참조할 수 있도록하며 메모리 윈도우는 현제 메모리 값을 보여주는 윈도우이다.

27. 심볼(Symbol)과 메모리 윈도우

Peripheral 메뉴의 각 항목은 8051 내부 주변기기(Ex. 타이머, 인터럽트)의정보(현제 값)를 보여주는 윈도우로서 8051 내부 상태를 파악할 수 있도록한다.

28. Peripheral 메뉴

디버그 명령 입출력 윈도우이다. 커맨드 방식을 통해 사용자 의도를 디버거에게 전달 할 수 있다. 일 예로 레지스터 값을 변경하거나 프로그램 Run등의 명령을 할 수 있다.

29. Output 윈도우

레지스터 수정 명령

형식: Register Name=Value

30. Output 윈도우 : 레지스터 수정 및 메모리 디스플레이 명령

ex) >r0=0x7f : r0레지스터에 0x7f 값을 써넣는다. >dptr=0x1234 : dptr에 0x1234를 써넣는다.

메모리 디스플레이 명령 : Display

형식 : D [c,x,i,d]:번지

c : 코드메모리 영역을 보고자 할 때 사용한다. x : 외부 데이터 메모리(XDATA) 영역을 보고자 할 때 사용i : 간접 어드레스 지정(Indirect Addressing) 방법에 의해 엑세스 가능한 내부 데이터

메모리(IDATA) 영역을 보고자 할 때 사용d: 직접 어드레스 지정(Direct Addressing) 방법에 의해 엑세스 가능한 내부 데이터

메모리(DATA) 영역을 보고자 할 때 사용한다.

ex) >d x:0x8000 : XDATA 영역 0x8000번지 데이터를 보여준다.

Page 6: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

6

메모리 수정 명령 : Enter

형식 : E [byte,word,dword] [c,x,i,d]:번지=값

31. Output 윈도우 명령 : 메모리 수정 및 프로그램 실행 명령

ex) >e byte x:0x1000=0x78 : 외부 램0x1000번지에 byte 단위로 0x78을 쓴다.

>e word i:70=0x1243 : 내부램 78번지에 word(16bit)단위로 0x1234을 쓴다.

>e dword x:1000=0x12345678 : 외부 램1000(십진수)번지에 dword(32bits): 단위로 0x12345678를 쓴다.

프로그램을 실행 명령: Go

형식: G 프로그램 실행 시작 어드레스

ex) >g : 다운로드된 프로그램을 현제 PC가 가리키는 번지부터 실행

: 시키게 된다. 디버그 윈도우의 상태라인에 'run'으로 표시된다.

ex) >g 0x5000 : 0x5000 번지부터 프로그램을 실행시킨다.

프로그램 Step Into 명령 : Tstep

형식 : T

32. Output 윈도우 명령 : Tstep, Pstep 명령

프로그램 한라인을 수행하도록 한다. 함수를 만나면 함수 안으로 들어간다.‘tScope’ 윈도우 Tstep(Step Into) 아이콘을 사용해도 동일한 기능을 한다.

ex) >t

프로그램 Step Over 명령: Pstep

형식: P

프로그램 한 라인을 수행하도록 한다. 함수를 만나면 함수도 한 라인이라생각하고 함수를 모두 수행한 후 다음라인으로 간다. ‘tScope’의 Pstep

(Step Over) 아이콘을 사용해도 동일한 기능을 한다.ex) >p

33. Output 윈도우 명령 : Tstep, Pstep 명령 실행 전

노란 화살표 : 현제 실행할 위치(Program Counter 값)Output 윈도우에서 ‘t’ 명령을 사용해도 되나 위 그림과 같이 Step Into

(Tstep) 아이콘을 사용해도 동일한 기능을 수행한다.

33. Output 윈도우 명령 : Tstep(Step Into) 명령 실행 후

Init() 함수로 들어감

34. Output 윈도우 명령 : Pstep(Step Over) 명령 실행 후

Output 윈도우에서 ‘p’ 명령을 사용해도 되나 위 그림과 같이 Step Over

(Pstep) 아이콘을 사용해도 동일한 기능을 수행한다.

Init()함수를 모두 수행하고 다음라인으로 감

프로그램 GoTilCurs 명령 : GoTilCurs , 커맨드라인 명령 없음

35. 디버그 명령 : GoTilCurs 명령

Page 7: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

7

36. 디버그 명령 : 프로그램 Stop 명령

프로그램 Stop 명령: Ctrl+C나 ESC 키 누름, Run 상태에 있는프로그램을 정지하도록 하는 명령이다.

그러나 이 명령을 실행하면 위 그림과 같이 나타남. 따라서 이 명령이실행되도록 하기 위해 다음과 같이 옵션을 설정하여야 한다.

옵션 설정 윈도우 디버그 탭의 ‘Setting’ 버튼이나 ‘tScope’의 ‘Peripheral’메뉴의 ‘Targetting ’을 클릭하면 위와 같은 위도우가 열리는데 위의 설정처럼 ‘Stop Program Excution with Serial Interrup’를 체크 하면 시리얼

인터럽트를 이용해 실행(Run) 중인 사용자 어플리케이션(Application)을정지시키도록 하는 기능이 활성화 된다.

37. 디버그 명령 : 프로그램 Stop 명령이 실행되도록 하기 위한 설정

38. Output 윈도우 명령 : 변수 디스플레이 및 수정 명령

Watch window에 변수를 등록하는 명령 : WatchSet

형식 : WS Watch 창 탭 번호(1 or 2) 변수이름

ex) ws 2, My_Var : My_Var이란 변수를 Watch window2에 등록해서

보여준다.ws 2, My_Var=0x78 : 와치(Watch) 윈도우2에 등록 되어 있는 변수

My_Var의 값을 0x78로 변경한다.

39. Output 윈도우 명령 : tScope에서 변수 디스플레이 및 수정

위의 그림과 같이 변수를 선택하고 오른쪽 버튼을 클릭하여 등록 해도 WS 명령과 동일한

기능을 수행한다. 또한 변수 값에 천천히 두번 클릭하면 변수 수정을 가능하도록 해준다.

40. Output 윈도우 : 브레이크포인트 설정 및 취소명령

브레이크 포인트(Break point) 설정 명령 : BreakSet 형식 : BS [address, symbol]

ex) >bs main : main에 브레이크 포인트가 설정(설정이 처음이면: 번호가 0으로 할당됨)된다.

>bk 0 : 번호가 0인 브레이크 포인트를 제거한다. 이 예제에서는 main에 설정된 브레이크 포인트 번호가 0이므로 main에설정된 브레이크 포인트가 제거된다.

브레이크 포인트(Break point) 제거명령 : BreakKill 형식 : BK break point number

ex) >bs 0x5000 : 0x5000번지에 브레이크 포인트가 설정됨

>bs main : main함수의 맨 첫 번지에 브레이크 포인트가 설정됨

tScope 디버그 환경에서 브레이크 포인트 설정은 원하는 라인에 더블클릭하는 것으로가능하다. 그렇게 하면 위와 같이 빨간 색으로 브레이크 포인트를 표시하며 다시 더블클릭하면 토글되어 제거된다.

41. 디버그 명령 : tScope에서 브레이크포인트 설정 및 취소

브레이크 포인트 리스트 윈도우

Page 8: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

8

42. Output 윈도우 : 그 외 브레이크 포인트 관련 명령

브레이크 포인트 리스트 표시 명령 : BreakList 형식 : BL위와 동일한 tScope 디버그 환경에서의 기능은 ‘debug’ 메뉴의 ‘breakpoint’를 클릭하는 것으로도 가능하다. 앞 장의 ‘breakpoint’ 윈도우가 바로 그것이다.

ex) be 0 : 브레이크 포인트 번호 0을 인에이블 한다.

브레이크 포인트 디스에이블(disable) 명령 : BreakDisable 형식 : BD break point number

ex) >bl : 지금까지 설정된 유효한 브레이크 포인트들의 상태를 표시

브레이크 포인트 인에이블(enable) 명령 : BreakEnable 형식 : BE break point number

ex) >bd 0 : 브레이크 포인트 번호 0을 디스에이블(Disable)

아래의 두 명령은 브레이크 포인트 리스트 윈도우에서 클릭하는 것으로도 가능하다.

우리가 작성한 프로그램은 실제로 Main() 함수부터 시작한다. 따라서 프로그램을 다운로드 한 후 main()까지 오기 위해서는 여러 번의 작업이 필요하게 된다.이를 자동으로 하기 위해 Output 윈도우에서 사용할 수 있는 명령들을 배치파일 형식으로 작성하여 자동화할 수 있다. 등록하는 방법은 다음 장에 있다.

43. 스크립트 파일(Init.ini 작성)을 이용한 자동화 작업

// Init.ini 파일 내용$=0x5000 // PC=0x5000 EX0=0 // 외부 인터럽트 디스에이블ET0=0 // 타이머/카운터0 인터럽트 디스에이블EX1=0 // 외부 인터럽트1 디스에이블ET1=0 // 타이머/카운터1 디스에이블IE.4=0 // ES=0, 시리얼 인터럽트 디스에이블r0=0 // r0 값 리셋r1=0 // r1 값 리셋r2=0 // r2 값 리셋r3=0 // r3 값 리셋r4=0 // r4 값 리셋r5=0 // r6 값 리셋r6=0 // r7 값 리셋r7=0 // r8 값 리셋bs main // main()에 브레이크 포인트를 설정g // 프로그램 실행, main에 Break Point가 설정되었으므로 main에서 멈추게 됨

옵션 윈도우의 디버그 탭을 클릭하면 ‘Initialization File 항목이 있다. ‘File Browse’버튼을 클릭해 등록한다. 이렇게 설정하면 디버그 모드 전환 시 Init.ini 파일 내의 명령들을 자동으로 실행하게 된다. 번거로움을 덜 수 있게 된다.

44. 자동화를 위해 작성한 Init.ini파일 등록

파일 등록

어셈블리 Expression에 사용할 수 있는 연산자는 다음과 같다.

45. A51(어셈블리) 프로그래밍 : Expression에 사용할 수 있는 연산자

어셈블리 기술 형식

46. 어셈블리 기술 형식

어셈블리 심볼(Symbol)에 사용 가능한 문자는 A~Z, a~z, 0~9, _, ? 만이가능하다.

[Label:] Mnemonic [Operand1] [,Operand2] [,Operand3] [;Comment]

1) Immediate Data

Ex) MOV R1, #27H ; 숫자 27H를 R1에 넣음2) Direct Addressing : DATA 영역에만 가능하다.

Ex) MOV R1, 27H ; 27H 번지의 데이터를 R1에 넣음3) Indirect Addressing : 간접 번지 지정 방법으로 '@'를 사용하여 표시한다.

Ex) MOV A, @R0 ; IDATA의 27H번지의 데이터를 ACC에 전송MOVX A, @DPTR ; XDATA의 1234H번지의 데이터를 ACC에 전송MOVX A, @R1 ; XDATA의 간접번지 지정MOVC A, @A+DPTR ; CODE영역 간접번지 지정

4) Direct Bit Addressing : 비트 어드레서블 영역의 비트를 지정하는 방법Ex) SETB 20H.6 ; DATA 영역의 20H번지의 비트6의 값을 세트시킴

CLR 10 ; 비트 어드레스 10번지의 값을 클리어 시킴, 비트 어드레스로 지정

데이터 어드레싱 방법

Location Counter $ : 현제 명령의 첫 번째 바이트 어드레스를 의미

47. 어셈블러 디렉티브: Segment Control

어셈블리 디렉티브 : 메모리 및 시스템 리소스에 대한 관리의 편의성을 제공하기 위한 지시어

Segment Control Directive

CSEG, DSEG, BSEG, XSEGAbsolute Segment

SEGMEMT, RSEGGeneric Segment

종류Segment

Generic Segment는 Linker에 의해 재배치가 가능한 Relocatable Segment이다.

Absolute Segment는 사용자가 고정 어드레스를 정의하는 고정세그먼트이다.

Page 9: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

9

48. 어셈블러 디렉티브 : SEGMENT

SEGMENT : Relocatable Segment, 정의 형식은 다음과 같다.

Segment_Name : 세그먼트 이름을 정의Class : 메모리 클래스를 정의, 메모리 클래스는 다음과 같다.

CODE-정의된 세그먼트는 프로그램 메모리 영역에 배치된다.DATA-내부 데이터 메모리(0~127)와 SFR 영역을 의미한다. 즉 'Direct Add-

ressing'을 사용하여 엑세스 가능한 영역이다.IDATA-내부 데이터 메모리(0~127)와 상위 내부 데이터(128~255) 메모리 영

역을 나타낸다. 즉 'Indirect Addressing'을 사용하여 엑세스 가능한 영역이다.

XDATA-외부 데이터 메모리 영역을 나타낸다.

BIT-비트 어드레서블(20H~2FH) 영역의 비트 세그먼트를 의미한다.

RSEG

프로그램 시 SEGMENT 디렉티브를 사용하여 정의한 세그먼트들 중 하나를 선택한다.Ex) Myprog SEGMENT CODE

RSEG Myprog ; 여기서부터 Myprog의 내용을 기술한다.

Segment_Name SEGMENT Class [Reloctype]

49. 어셈블러 디렉티브 : Absolute Segment

Absolute Segment 정의 형식은 다음과 같다.

Absolute_Segment : Absolute 세그먼트 이름을 정의한다.CSEG-프로그램 메모리 영역을 정의DSEG-DATA 영역을 정의BSEG-비트어드레서블(Bit Addressable) 영역ISEG>-IDATA 영역XSEG>-XDATA 영역

Absolute_Segment_Name AT address여기서 address는 정의한 세그먼트의 시작 어드레스를 의미한다.

50. 어셈블러 디렉티브 : 심볼 정의 EQU, SET

Symbol EQU or SET Expron or Register

Symbol IDATA or DATA or XDATA or CODE Expron or Register

Ex) Symbol1 IDATA 70H ; IDATA 70H의 어드레스를 갖는 Symbol1을 정의한다. Symbol2 DATA 60H ; DATA 70H의 어드레스를 갖는 Symbol2를 정의한다. Symbol3 XDATA 6500H Symbol4 CODE 5500H

Ex) Value SET 200H ; Value는 200H 값을 갖는 심볼이다. Value SET Value/2 ; 여기서부터 Value는 100H 값을 갖는다. ACCU EQU A ; ACCU는 ACC의 번지 값을 갖는다. SDPTR SET DPL ; SDPTR은 DPTR의 번지 값을 갖는다.

51. 어셈블러 디렉티브 : 메모리 예약 및 초기화

Label: DBIT or DS Expression

Label: DB or DW Expression [, Expression, ....]프로그램 메모리 영역에 저장될 데이터를 정의 한다.

Ex) My_Lookup_Tbl : DB 0, 1, 80H, 'M', 'C', 'U', 'K', 'O', 'R', 'E', 'A' CONST_TBL : DW 0123H, 0F245

Ex) MyFlag : DBIT 1 ; 현제 세그먼트에 비트 어드레서블 영역 1비트를 예약한다. MyData : DS 5 ; 현제 세그먼트에 5바이트 메모리를 예약한다.

52. 어셈블러 디렉티브 : PUBLIC, EXTRN

PUBLIC Symbol [, Symbol, ....]

EXTRN Memory Class(Symbol, Symbol, ) [, Memory Class(Symbol, ....), ...]

Ex) EXTRN CODE(_Delay), XDATA(Glob_Var) EXTRN CODE(_Access, MyFunc)

Ex) PUBLIC Glob_Data, My_Symbol PUBLIC Semaphore

53. 어셈블러 디렉티브 : 어드레스 제어 ORG, USING

ORG Expron

USING 직접번지를 위한 뱅크번호(0~3)

Ex) USING 3 ; AR0~AR7가 뱅크3의 'Direct Addressing'을 하도록 한다.

Ex) ORG 1000H

END : 어셈블리 모듈의 끝을 나타내는 디렉티브이다. 각 모듈의 끝에는 항상 END 디렉티브를 사용해야 한다.

Page 10: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

10

54. 어셈블러 디렉티브 : 조건 어셈블

SET (Symbol [=number] [, Symbol [=number], ....])

RESET Symbol [, Symbol, ....]

Ex) $RESET (MyFlag, True, False) ; 괄호 내의 심볼을 리셋 시킨다. $RESET (Debug) ; Debug 값을 리셋 시킨다.

Ex) $SET (Debug) ; Debug에 0FFFFH를 세트함$SET (MyFlag=1) ; MyFlag에 1을 세트함

IF or ELSEIF Expron

조건 어셈블을 위한 심볼 정의 SET, RESET

조건 어셈블 IF, ELSEIF, ENDIF

Ex) $IF (Debug) ; Debug가 0보다 크면 아래 내용을 어셈블하고 그렇지 않으면 무시$ELSEIF (MyFlag=1) ; MyFlag가 1이면 아래내용을 어셈블

ENDIF : 앞의 조건문을 끝내는 디렉티브이다.

55. C51(C 언어) 프로그래밍 : 키워드

_at_, alien, bdata, bit, code, compact, data, farIdata, interrupt, large, pdata, _priority_, reentrantSbit, Sfr, sfr16, small, _task_, using, xdata

8051에 최적화 하기 위한 ANSI C 에서 확장된 키워드

데이터(변수) Location을 위한 확장 키워드

C51에서 사용하는 데이터 타입

56. C51(C 언어) 프로그래밍 : 데이터 타입

8051의 구조 상 비트 엑세스 영역을 지원하기 위한 비트 변수 선언 키워드

57. C51(C 언어) 프로그래밍 : 비트변수 지원

인터럽트 서비스를 위한 지시어 및 함수 선언 형식

58. C51(C 언어) 프로그래밍 : 인터럽트 서비스 지원 지시어

void Int_Function_Name() interrupt Interrupt_Number

어셈블리와 C 언어 심볼 공유 예제 : Sample_Source\ASM_C 폴더 참조

59. C51(C 언어) 프로그래밍 :어셈블리와 C 언어 심볼 공유

Page 11: 제3장. 8051 개발환경 - suwon.ac.krcslee/uproc/3-2_Keil2.pdf · LCD한글디스플레이와전자계산기실험) 외에는충분하다. 3. uVisionII ... 노란화살표: 현제실행할위치(Program

11

60. C51(C 언어) 프로그래밍 :어셈블리와 C 언어 함수 인자 전달

C51의 C 함수는 특정 개수 이하의 인자는 내부 레지스터를 이용해 전달 된다.

C51은 함수 리턴 값 역시 내부 레지스터를 통해 전달한다.

61. C51(C 언어) 프로그래밍 : 어셈블리와 C 언어 함수 리턴 값 전달

Startup Code는 C의 올바를 프로그램 수행을 위해 main() 함수호출 전에 스택의 초기화 보드 초기화를 담당하며 보통 인터럽트

벡터를 포함하고 있다.

62. C51(C 언어) 프로그래밍 : Startup Code

학습보드는 프로그램 다운로드 기능과 디버그 기능을 포함하기 위해 ROM영역(리셋 벡터와 인터럽트 벡터를 포함하고 있는 어드레스 영역)에 모니터프로그램을 위치시키고 있으므로 학습보드 실험용 프로그램 메모리로서는0x5000 번지부터 사용하게 된다. 따라서 Startup Code의 수정이 필요하다.

학습 교재 설명에서와 같이 현제 프로젝트에 Startup.A51을 추가하고 다음과 같이 수정하기 바란다.

63. C51(C 언어) 프로그래밍 : 학습보드 Startup Code 수정

CSEG AT 0 ?C_STARTUP: LJMP STARTUP1

CSEG AT 5000H ?C_STARTUP: LJMP STARTUP1