Keil C基本操作 - Asia University

22
1 yiher 2017/10/17 例說89S51-C語言 2-1 Keil C基本操作 第二章 yiher 2017/10/17 例說89S51-C語言 2-2 為何要使用C51語言 • 8051單晶片引用C51語言,做為程式開發工具, 可協助處理程式瑣碎且重複的細節,並配合相關 硬體的調整 • C語言可將程式移植到其它不同的硬體上時,少程式修改的時間。以因應多樣化的8051單晶片 • 近年來嵌入式系統快速發展,單晶片若能嵌入系 統軟體,將可大幅提昇其功能。展望未來,單晶 片朝向嵌入式系統發展。使用C51有助嵌入式系 統發展

Transcript of Keil C基本操作 - Asia University

Page 1: Keil C基本操作 - Asia University

1

yiher

2017/10/17 例說89S51-C語言 2-1

Keil C基本操作

第二章

yiher

2017/10/17 例說89S51-C語言 2-2

為何要使用C51語言

• 8051單晶片引用C51語言,做為程式開發工具,

可協助處理程式瑣碎且重複的細節,並配合相關

硬體的調整

• C語言可將程式移植到其它不同的硬體上時,減少程式修改的時間。以因應多樣化的8051單晶片

•近年來嵌入式系統快速發展,單晶片若能嵌入系統軟體,將可大幅提昇其功能。展望未來,單晶片朝向嵌入式系統發展。使用C51有助嵌入式系統發展

Page 2: Keil C基本操作 - Asia University

2

yiher

2017/10/17 例說89S51-C語言 2-3

使用Keil發展C51程式

yiher

2017/10/17 例說89S51-C語言 2-4

Keil Vision 5視窗

Page 4: Keil C基本操作 - Asia University

4

yiher

2017/10/17 例說89S51-C語言 2-8

2-2 基本架構

yiher

2017/10/17 例說89S51-C語言 2-9

基本函式範例-延遲副程式

= 1 sec.

Page 5: Keil C基本操作 - Asia University

5

yiher

2017/10/17 例說89S51-C語言 2-10

2-3 變數、常數、資料型態

在C語言裡,常數(constant)與變數(variables)都是為某

個資料指定記憶體位置,其中常數是在指定記憶體位置

裡,放置固定不變的資料,而變數是在指定記憶體位置

裡的資料是可變的。而宣告常數或變數的格式如下:

yiher

2017/10/17 例說89S51-C語言 2-11

2-3-1 資料型態-1

• 通用資料型態

Page 6: Keil C基本操作 - Asia University

6

yiher

2017/10/17 例說89S51-C語言 2-12

2-3-1 資料型態-2

• 8051專屬資料型態

yiher

2017/10/17 例說89S51-C語言 2-13

資料宣告指定記憶體種類

Page 7: Keil C基本操作 - Asia University

7

yiher

2017/10/17 例說89S51-C語言 2-14

2-4 記憶體形式與模式

• 記憶體形式

yiher

2017/10/17 例說89S51-C語言 2-15

MOVX MOV MOVC

程式記憶體

Page 8: Keil C基本操作 - Asia University

8

yiher

2017/10/17 例說89S51-C語言 2-16

2-4 記憶體形式與模式-1

• 程式記憶體char code SEG[3]={ 0x0a,0x13,0xbf };

• 內部資料記憶體char data x; //直接定址char idata x; //間接定址bit bdata x; //可位元定址

• 外部資料記憶體char xdata x; //外部記憶體64k bytes

char pdata x; //外部記憶體256 bytes

yiher

2017/10/17 例說89S51-C語言 2-17

MCS-51之程式記憶體結構AT89S51 AT89S52

Page 9: Keil C基本操作 - Asia University

9

yiher

2017/10/17 例說89S51-C語言 2-18

2-3-1 資料型態-3

• 8051專屬資料型態範例

yiher

2017/10/17 例說89S51-C語言 2-19

2-3-2 保留字-1

• ANSI C與傳統C之保留字

Page 10: Keil C基本操作 - Asia University

10

yiher

2017/10/17 例說89S51-C語言 2-20

2-3-2 保留字-2

• Keil C保留字

yiher

2017/10/17 例說89S51-C語言 2-21

2-5 運算子-1

• 算術運算子

Page 11: Keil C基本操作 - Asia University

11

yiher

2017/10/17 例說89S51-C語言 2-22

2-5 運算子-2• 關係運算子

yiher

2017/10/17 例說89S51-C語言 2-23

2-5 運算子-3

• 邏輯運算子

Page 12: Keil C基本操作 - Asia University

12

yiher

2017/10/17 例說89S51-C語言 2-24

2-5 運算子-4

• 布林運算子

yiher

2017/10/17 例說89S51-C語言 2-25

2-5 運算子-7

• 運算子

優先順序

Page 13: Keil C基本操作 - Asia University

13

yiher

2017/10/17 例說89S51-C語言 2-26

2-6 流程控制

• for 迴圈指令與delay函數 =>

• while 前條件迴圈指令 =>

• do while 後條件迴圈指令 =>

• if 條件選擇指令 =>

• switch 多重選擇指令 =>

• goto 跳躍指令 =>

yiher

2017/10/17 例說89S51-C語言 2-27

2-6-1 for 迴圈指令與delay函數-5

• 巢狀迴圈:for (i=0;i<x;i++)

for (j=0;j<10;j++)

{ 指令1;

指令2;

:

}

重複執行10次

重複執行x次

Page 14: Keil C基本操作 - Asia University

14

yiher

2017/10/17 例說89S51-C語言 2-28

2-6-1 for 迴圈指令與delay函數-6

• delay函數:for (i=0;i<x;i++)

for (j=0;j<120;j++);

重複執行x次

//從0數到119

//花約1毫秒(ms)

總共延遲x ms

yiher

2017/10/17 例說89S51-C語言 2-29

2-6-2 while前條件迴圈指令-1

• 指令格式while(運算式)

{ 指令1;

指令2;

:

[break;]

:

}

若運算式成立,則執行大括號的指令

Page 15: Keil C基本操作 - Asia University

15

yiher

2017/10/17 例說89S51-C語言 2-30

2-6-2 while前條件迴圈指令-2

• 範例while(x>y)

{ 指令1;

指令2;

:

[break;]

:

}

若x>y成立,則執行大括號號的指令

yiher

2017/10/17 例說89S51-C語言 2-31

2-6-2 while前條件迴圈指令-3

• 範例while(1)

{ 指令1;

指令2;

:

[break;]

:

}

無窮盡迴圈

Page 16: Keil C基本操作 - Asia University

16

yiher

2017/10/17 例說89S51-C語言 2-32

2-6-3 do while後條件迴圈指令

• 指令格式do

{ 指令1;

指令2;

:

[break;]

:

} while(運算式)

先執行大括號的指令,

再判斷運算式是否成立,若成立,才繼續執行大括號的指令

yiher

2017/10/17 例說89S51-C語言 2-33

2-6-4 if條件選擇指令-1

• 指令格式

Page 17: Keil C基本操作 - Asia University

17

yiher

2017/10/17 例說89S51-C語言 2-34

2-6-4 if條件選擇指令-2

• 單一指令區塊

yiher

2017/10/17 例說89S51-C語言 2-35

2-6-4 if條件選擇指令-3

• 多重條件判斷

Page 18: Keil C基本操作 - Asia University

18

yiher

2017/10/17 例說89S51-C語言 2-36

2-6-5 switch多重選擇指令

• 指令格式

yiher

2017/10/17 例說89S51-C語言 2-37

2-6-6 goto跳躍指令

Page 19: Keil C基本操作 - Asia University

19

yiher

2017/10/17 例說89S51-C語言 2-38

2-8-1 函數

yiher

2017/10/17 例說89S51-C語言 2-39

2-9 前置命令-1

• 定義命令#define

• 包含命令#include

• 條件式編譯命令#if、#elseif、#else、#endif、#ifdef、ifndef

Page 20: Keil C基本操作 - Asia University

20

yiher

2017/10/17 例說89S51-C語言 2-40

2-9 前置命令-2

• 定義命令

yiher

2017/10/17 例說89S51-C語言 2-41

#include

• #include是一個前置命令,其功能是將標頭檔(*.h)包含到程式裡。

• 「#include <xxx.h>」:以<與>所包括的標頭檔,將從系統目錄(C:\KEIL\C51\INC)中載入該標頭檔。

• 「#include “xxx.h”」:以“與”所包括的標頭檔,將從專案目錄中載入該標頭檔。

Page 21: Keil C基本操作 - Asia University

21

yiher

2017/10/17 例說89S51-C語言 2-42

reg51.h表頭檔

p. 5-15 ~ 5-17

C:\Keil\C51\INC

yiher

2017/10/17 例說89S51-C語言 2-43

註解

• 包括式註解:以「/*」為註解的開始,以「*/」為註解的結束,其間註解文字可包含數個字,也可以數行文字。例如:#include “my.h” /*=包含my.h標頭檔=*/

• 單列式註解:以「//」為註解的開始符號,從「//」以右皆為註解。例如://===== 主程式 =====

Page 22: Keil C基本操作 - Asia University

22

yiher

2017/10/17 例說89S51-C語言 2-45

Q&A

Thank you!