keil c基本操作 - asia university
TRANSCRIPT
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有助嵌入式系統發展
2
yiher
2017/10/17 例說89S51-C語言 2-3
使用Keil發展C51程式
yiher
2017/10/17 例說89S51-C語言 2-4
Keil Vision 5視窗
3
yiher
2017/10/17 例說89S51-C語言 2-6
認識 Keil C
yiher
2017/10/17 例說89S51-C語言 2-7
C51程式語言的基本結構:
4
yiher
2017/10/17 例說89S51-C語言 2-8
2-2 基本架構
yiher
2017/10/17 例說89S51-C語言 2-9
基本函式範例-延遲副程式
= 1 sec.
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
• 通用資料型態
6
yiher
2017/10/17 例說89S51-C語言 2-12
2-3-1 資料型態-2
• 8051專屬資料型態
yiher
2017/10/17 例說89S51-C語言 2-13
資料宣告指定記憶體種類
7
yiher
2017/10/17 例說89S51-C語言 2-14
2-4 記憶體形式與模式
• 記憶體形式
yiher
2017/10/17 例說89S51-C語言 2-15
MOVX MOV MOVC
程式記憶體
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
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之保留字
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
• 算術運算子
11
yiher
2017/10/17 例說89S51-C語言 2-22
2-5 運算子-2• 關係運算子
yiher
2017/10/17 例說89S51-C語言 2-23
2-5 運算子-3
• 邏輯運算子
12
yiher
2017/10/17 例說89S51-C語言 2-24
2-5 運算子-4
• 布林運算子
yiher
2017/10/17 例說89S51-C語言 2-25
2-5 運算子-7
• 運算子
優先順序
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次
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;]
:
}
若運算式成立,則執行大括號的指令
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;]
:
}
無窮盡迴圈
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
• 指令格式
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
• 多重條件判斷
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跳躍指令
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
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”」:以“與”所包括的標頭檔,將從專案目錄中載入該標頭檔。
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標頭檔=*/
• 單列式註解:以「//」為註解的開始符號,從「//」以右皆為註解。例如://===== 主程式 =====
22
yiher
2017/10/17 例說89S51-C語言 2-45
Q&A
Thank you!