應廣單片機(PADAUK) MINI-C 編程指南初級(系列1),臺灣科技的 MINI-C 編譯器基本上是構建于 ANSI C,但受限于應廣單片機的硬件結構,因此只能支持部
分的 ANSI C。并根據應廣單片機的硬件結構,擴展了一些語法,以提高編譯效率及節省程序空間。
1. 了解MINI-C語言特性:MINI-C是一種類似于傳統C語言的編程語言,但在一些細節上有所不同。首先,需要注意MINI-C不支持變量的乘除法和數組的自加操作。因此,在編寫代碼時,需要使用其他方式來實現這些功能,例如使用移位操作來代替乘除法,使用循環來實現數組的自加操作。
2. 使用比較器作為偽ADC:在臺灣應廣單片機PMS150C/PMS150G中,由于硬件限制,無法直接使用模擬數字轉換器(ADC)。但可以利用比較器來模擬ADC的功能。比較器可以將模擬信號與參考電壓進行比較,并輸出相應的數字信號。通過合理設置參考電壓和比較器的閾值,可以實現對模擬信號的采樣和轉換。
3. 模擬串口收發:在臺灣應廣單片機PMS150C/PMS150G中,沒有內置的硬件串口模塊。但可以通過軟件來模擬串口的收發功能。通過設置GPIO口的輸入輸出狀態和時序,可以實現串口數據的發送和接收。需要注意的是,由于軟件模擬的串口速度較慢,需要合理設計數據傳輸的協議和時序,以確保數據的可靠性和穩定性。
1 MINI- C 語言
1.1 簡介
1.2 MINI-C 的程序結構
1.3 預處理
1.4 標示符
1.5 數據類型
1.6 常量
1.7 變量
1.8 表達式
1.9 特殊的符號或者符號串
1.10 指針
2.程序控制語句
2.1 賦值語句
2.2 if 語句
2.3 switch 語句
2.4 while 語句
3.查表
4.函數
5.參考程序范例
1 MINI- C 語言
1.1 簡介
臺灣科技的 MINI-C 編譯器基本上是構建于 ANSI C,但受限于應廣單片機的硬件結構,因此只能支持部
分的 ANSI C。并根據應廣單片機的硬件結構,擴展了一些語法,以提高編譯效率及節省程序空間。
1.2 MINI-C 的程序結構
MINI-C 語言程序由語句、注釋和預處理指令組合而成的。
語句
語句由變量、常量、運算符和函數共同組成,以分號作為結束符。主要是執行以下的動作:
宣告數據變量與數據結構
定義數據空間
執行算術與邏輯運算
執行程序的控制動作
一行程序可以包含多個語句;復合語句由一個或多個被包含在一對大括號內的語句組成,并且可以將其當
單一語句來使用。
源程序必須定義主函數 fppa0。工程可能不只一個源程序文件,但只有一個源程序文件中可以定義主函數fppa0。
應廣早期的產品具有雙核和 8 核,如果采用雙核,程序中還可以有第二個程序指針所指的一套程序 fppa1;
如果采用 8 核,則還可以有 fppa2,fppa3....,fppa7 等。
注釋
注釋一般是在文件中解釋源程序語句的意義與作用來提供程序的可讀性。注釋不可以嵌套。
行注釋符[ // ],開始于//直至此行結束。
塊注釋符[ /*…*/ ],開始于/*結束于*/。
1.3 預處理指令
1)文件包含
語法:
#include “filename”
說明:
用雙撇號時,系統先在用戶當前工程目錄中尋找要包含的文件,該文件可以是用戶頭文件或者 C 程序文件,
或者用戶私密庫文件 .在應廣單片機開發中,各類型的單片機所使用的的寄存器定義頭文件,會被系統根
據用戶選擇的單片機型號自動載入,不需要用戶在單獨使用“#include”來載入。
2)宏定義
#define 標識符 value
其中 value 可以是數值或者語句。注意#define 不能用來定義 IO 名稱。
一般用#define 來定義常數或者宏名是可以的。
比如定義常數:
#define
C_AD_PB0
0 //定義 AD 通道 PB0 為數據 0;
宏語句定義:
#define
WTD_ON
set1 clkmd.1 ;//定義宏語句,將看門狗 WTD 打開;
set0 clkmd.1 ;//定義宏語句,將看門狗 WTD 關閉;
#define
WTD_OFF
定義后,便可以在程序中直接使用宏語句,以方便程序的閱讀
3)條件編譯
#if 標識符
statement1
#else
Statement2
#endif
測試#if 后面是否為真,為真則編譯#if 和#else 之間的程序,否則編譯#else 和#endif 之間的程序。其
中標識符只能為#define 或者 EQU 定義的標識符。
#ifdef 標識符
statement1
#else
Statement2
#endif
測試#ifdef 后面的標識符是否用#define 定義過,如果定義過則編譯#ifdef 和#else 之間的程序,否則編譯#else
和#endif 之間程序。
#ifndef 標識符
statement1
#else
Statement2
#endif
測試#ifndef 后面的標識符是否用#define 定義過,如果沒有定義過則編譯#ifndef 和#else 之間的程序,否則
編譯#else 和#endif 之間程序。
1.4 標識符(深圳逐高電子應廣單片機授權代理商)
標識符的名稱包含連續的字母、數字或下劃線,并遵守下列規則:
第一個字符不可為數字
最長只能為 27 個字符
區分大小寫
不可以使用保留字
MINI-C 語言中的保留字
Break, case , const,continue,default , do,else,extern,
Goto,if,byte ,word, eword ,dword,int
return,switch void,while
asm bit,interrup,
1.5 數據類型:
MINI-C,支持的所有數據都是無符號數字,位長度有 1 位,8 位,16 位,24 位,32 位,分別如下表描
述。
1.4 數據類 長度(bit) 長度(byte) 值域范圍
型數據類型
bit | 1 | —— | 0,1 |
byte | 8 | 1 | 0~255 |
int | 8 | 1 | 0~255 |
word | 16 | 16 |
0~65535 |
eword | 24 | 3 | 0~16777215 |
dword | 32 | 4 | 0~4294967295 |
1.6 常量
數字常量:
MINI-C 支持二進制,十進制以及 16 進制的常數
(1). 十六進制,以 0x 開頭或者 H 結尾: 例如: 0xAB, 0CDh
(2). 十進制,以 D 結尾或者不寫: 例如: 12, 34d
(3). 二進制,以 0B 開頭或者 B 結尾: 例如: 0B11_00_1100, 01011010B
(4). 在二進制中,可以增加 `_`,以提高程序撰寫的可讀性
(5). 范例: MOV A, 31h
MOV A, 49
MOV A, 0B11_0001
MOV A, '1'
字符常量:可以為 `A~Z`,`a~z`,`_`,`0~9`作為常量的開頭,字符常量使用前需要
定義具體的數字,定義字符常量的作用是方便程序閱讀。比如:
#define C_LED_ON 0;
#define C_BRIGHTNESS_MAX 220;
1.7 變量
(1). 變量名稱不分大小寫,變量開頭為英文字母或者下滑線,如 `A~Z`,
`a~z` , ` _`。
(2). @ 不能做變量名稱之開頭,@用于系統定義最近的向前或者向后跳轉地址
(3). 非變量之名稱開頭則可以為 `A~Z`,`a~z`,`_`,`0~9`。
(4). 變量字符串長度不限。
(5). 變量分位變量,單字節變量,雙字節變量,三字節變量,和 4 字節變量。
請見 1.4 的數據類型表。
(6). 范例:
位變量的定義:
在單核的單片機中,位變量必須存放在 RAM 前 16,或者前 32 字節內,具體
根據 IC 的型號確定。位變量,可以指定具體 RAM 的位,也可以
由系統分配。
當定義一個具體 RAM 的位時,需要先定義一個或者幾個字節的變量。
定義格式:bit 位變量名 :具體 RAM 名.x (x 由 0~7 組成,或者更大的數字 0~31)
如:
Byte my_flag; //先定義一個字節,作為一些標志定義
Bit f_key_busy : my_flag.0;//指定具體變量的具體第 0 位
Bit f_led_on : my_flag.1;//指定具體變量的具體第 1 位
當不指定 RAM 位置的位定義,則具體 RAM 位置由系統分配,直接由 bit 定義;
定義格式:bit 位變量名
如:
Bit f_charge_full;
變量的定義:
變量的定義格式:數據類型 變量名;
比如:
Byte my_flag;
Word t16_cnt;
Word user_piont;
Dword timer_10ms;
1.8 表達式:
【 算 術 表 達 式 】
本發展系統已提供 ~、+、-、&、|、^、( )、=、+=、-=、&=、|=、^= 等操作數。
以下為例:
BB1 = BB2;
WW1 += (WW2 + BY2) & 1234h;
不過以下三點請注意:
(1). 尚未提供連等的表達式,如下范例:
BB1 = (BB2 = BB3) + 2;
BB1 = BB2 = BB3;
(2). 對于 ++、-- 的操作數,暫時只允許如下單一格式。
BB1++; WW1--;
(3). 對于 <<、>>、<<<、>>>、<<=、>>=、<<<=、>>>= 的操作數,
如使用太復雜的表達式,最佳化可能不夠理想,請多包涵。
<< 對應到匯編語言是 SL。
<<< 對應到匯編語言是 SLC。
>> 對應到匯編語言是 SR。
>>> 對應到匯編語言是 SRC。
運算子的優先級,由高排到低,分別為:
邏 輯 表 達 式 】 MINI-C 提供支持 ==、!=、>、>=、<、<=、&&、||、!、( ) 等
表達式。 運算子的優先級,由高排到低,分別為:
1.9 幾個特殊的符號或者符號串:
(1)“;”分號:MINI-C 語句的結束符,或者匯編中的注釋符,每一句 MINI-C 語句,都必
須要有一個“;”做結束。
(2)“@”,簡易標記符,有時為了避免取太多的標號名,可以使用簡易的標記符。簡易標
記符往往配合字母 F 和字母 B 用,以告知編譯器是向前還是向后跳轉,此處說的前是
指后面書寫程序,后指更早書寫的程序。
例如:
goto @F // 跳躍到后面的 @@標記 1
…
@@: // 標記 1
…
goto @F // 跳躍到后面的 @@標記 2
…
goto @B // 跳躍到前面的 @@標記 1
…
@@: // 標記 2
…
goto @B // 跳躍到前面的 @@標記 2
你也可以為簡易的標記命名,那么跳越的距離就更有彈性了,如下例:
@@.XX: // 標記 XX
goto @F // 跳躍到后面的 @@
…
@@: …
goto @B.XX // 跳躍到前面的 @@標記 XX
…
goto @F.XX // 跳躍到后面的 @@標記 XX
…
@@: …
goto @B // 跳躍到前面的 @@
(未完待續)
深圳逐高電子應廣單片機授權代理商