文章內容
KEIL C語言
KEIL C與一般的C語言類似採取函式設計方式,已圖2-1之test1.c成是為例,概略介紹C語言主要成份。
一、主程式:開機時必定由主程式開始執行,主程式由main()開始,如圖2-1程式中5~17行,第13行呼叫名為delay的函式。
二、函式:圖2-1程式中18-23行即為一個函式,其名稱命名為“delay”,提供主程式呼叫使用(第13行)。
三、標頭檔:圖2-1程式第2行使用“#include”將檔名為“AT89X51.H”之標頭檔引入,標頭檔主要定義I/O位址、常數與符號等,圖2-2為“AT89X51.H”之標頭檔部份內容。
另外,設計程式時為了方便閱讀或維護,通常會加入註解(Comment),C語言之註解有“//…”與“/*…*/”兩種方式,圖2-1第1行“// test1.c”表示“//”之後的“test1.c”註解,第4行“/* global */”表示“/*”與“*/”之間的“global”為註解,此種註解表達方式具有換行之功能(參考圖2-2第1~3行均為註解)
變數在使用前,必須先經過宣告期資料型態與名稱,表2-1為KEIL C支援的資料型態,變數宣告格式如下所示:
資料型態 變數名稱1,變數名稱2 [=常數],…;
變數名稱的一些限制如下:
1. 第一個字元限制為文字“A~Z”、“a~z”或“_”(不可為數字“0~9”)。
2. 第二個以後的字元為文字“A~Z”、“a~z”或“_”,增加數字“0~9”。
3. 標記長度最多為31個字。
4. 大、小寫字元視為不同變數。
5. 變數名稱宜避開系統保留字。
變數依據宣告位置,分成區域變數(Local Variable)與全域變數(Global Variable)兩種。
一、區域變數(Local Variable)
在函式之內部宣告的變數、均為區域變數,其有效範圍只在宣告的函式涵蓋範圍內。參考圖2-1第7行“unsigned char k;”,此變數k屬於main主函式之區域變數,在程式6~17行之間有效範圍。圖2-1第20行“unsigned int k;”,此變數k屬於delay函式之區域變數,在程式19~23行之間有效範圍。
二、全域變數(Global Variable)
在函式之外宣告的變數稱之為全域變數,其有效範圍適用在同一個檔案內所有函式。參考圖2-1第4行“unsigned char i=0;”,變數i為無符號字元初值為0,此變數i在main主函式及delay函式均有效。
一般變數的使用只需標示變數名稱及資料型態,編譯器會自動安排內部資量記憶體儲存變數值。若要明確標示使用記憶體類型,甚至指定記憶體位址時其變數宣告格式如下所示:
資料型態 記憶體類型識別字 變數名稱1,變數名稱2[=常數],…;
資料型態 記憶體類型識別字 變數名稱 _at_ 位址;
記憶體類型識別字總共分成程式記憶體與資料記憶體兩大類,程式記憶體(參考圖1-7(a))其類型識別字為code,而資料記憶體部份(參考圖1-7(b)及圖1-8)類型識別字可分成data、idata、bdata、xdata與pdata,pdata是以256個位元組為單位稱之為頁。
檢視圖2-1之test1.c範例程式與表2-1之KEIL C支援之資料形態表,尚有bit、sbit、sfr與sfr16等資料型態沒有範例介紹,因此將圖2-1範例程式略作調整成圖2-3之test2.c範例程式。
一、sfr資料型態
test2.c範例程式第3~5行程式使用sfr宣告特殊功能暫存器之值,例如P1之位址為90H(參考表1-2)。
二、sfr16資料型態
sfr16主要宣告16位元特殊功能暫存器,並且限制必須兩相鄰且相關的暫存器才可,例如DPL(0X82)與DPH(0X83)、TL0(0X8A)與TL1(0X8B)、TH0(0X8C)與TH1(0X8D)、RCAP2L(0X0CA)與RCAP2H(0X0CB)及TL2(0X0CC)與TH2(0X0CD)。宣告位址時必須宣告較低的位址,第6行宣告將兩相鄰且有關的8位元暫存器TL0與TL1合併成16位元之timer0、其位址宣告為0x8a。
三、sbit資料型態
sbit有兩種功能,一種是宣告可位元定址特殊功能暫存器中的位元、另一種是宣告設定位元地址區(RAM 20H~2FH)中的位元。若要命名P3位元3為P33有下列三種:
sbit P33=P3ˆ3;
sbit P33=0Xb0ˆ3;
sbit P33=0Xb3;
四、bit資料型態
第14行“bit b2;”宣告位元變數b2,位元位址由軟體安排。
【推薦閱讀】其它詳細內容請參閱「MCS-51原理與實習-KEIL C語言版,鍾明政、陳宏明編著,全華圖書出版」