為了讓有需要的朋友進一步瞭解微控制器C語言知識,下面的文章將為大家講解微控制器C語言的知識內容,歡迎學習!
C51運算子和表示式
運算子,雙目運算子和三目運算子。單目就是指需要有一個運算物件,雙目就要求有兩個運 算物件,三目則要三個運算物件。表示式則是由運算及運算物件所組成的具有特定含義的式 子。C 是一種表示式語言,表示式後面加“;”號就構成了一個表示式語句。
賦值運算子
對於“=”這個符號大家不會陌生的,在 C 中它的功能是給變數賦值,稱之為賦值運算 符。它的作用不用多說大家也明白,就是但資料賦給變數。如,x=10;由此可見利用賦值運 算符將一個變數與一個表示式連線起來的式子為賦值表示式,在表示式後面加“;”便構成 了賦值語句。使用“=”的賦值語句格式如下:
變數 = 表示式; 示例如下
a = 0xFF; //將常數十六進位制數 FF 賦於變數 a
b = c = 33; //同時賦值給變數 b,c d = e; //將變數 e 的值賦於變數 d
f = a+b; //將變數 a+b 的值賦於變數 f 由上面的例子能知道賦值語句的意義就是先計算出“=”右邊的表示式的值,然後將得到 的值賦給左邊的變數。而且右邊的表示式能是一個賦值表示式。
在一些朋友的來信中會出現“==”與“=”這兩個符號混淆的錯誤原碼,問為何編譯報 錯,一般就是錯在 if (a=x)之類的語句中,錯將“=”用為“==”。“==”符號是用來進行相 等關係運算。
算術,增減量運算子
對於 a+b,a/b 這樣的表示式大家都很熟悉,用在 C 語言中,+,/,就是算術運算子。微控制器c語言 中的算術運算子有如下幾個,其中只有取正值和取負值運算子是單目運算子,其它則都是雙 目運算子:
+ 加或取正值運算子
- 減或取負值運算子
* 乘運算子
/ 除運算子
% 取餘運算子 算術表示式的形式:
表示式 1 算術運算子 表示式 2 如:a+b*(10-a), (x+9)/(y-a)
除法運算子和一般的算術運算規則有所不一樣,如是兩浮點數相除,其結果為浮點數。
10.0/20.0 所得值為 0.5,而兩個整數相除時,所得值就是整數,如 7/3,值為 2。像別的語 言一樣 C 的運算子與有優先順序和結合性,同樣可用用括號“()”來改變優先順序。這些和我們 小時候學的數學幾乎是一樣的,也不必過多的說明了。
++ 增量運算子
-- 減量運算子
這兩個運算子是 C 語言中特有的一種運算子。在 VB,PASCAL 等都是沒有的。作用就是 對運算物件作加 1 和減 1 運算。要注意的是運算物件在符號前或後,其含義都是不一樣的,雖 然同是加 1 或減 1。如:I++,++I,I--,--I。
I++(或 I--) 是先使用 I 的值,再執行 I+1(或 I-1)
++I(或--I) 是先執行 I+1(或 I-1),再使用 I 的值。增減量運算子只允許用於變數的運算中,不能用於常數或表示式。 先來做一個實驗吧。學習運算子和另外一些知識時,我們還是給我們的實驗板加個序列
介面吧。藉助電腦轉件直觀的看微控制器的輸出結果,如果你用的是成品實驗板或模擬器,那你就能跳過這一段了。
在製作電路前我們先來看看要用的 MAX232,這裡不去具體討論它,只要知道它是 TTL和 RS232 電平相互轉換的晶片和基本的引腳接線功能就行了。通常我會用兩個小功率電晶體加少量的電路去替換MAX232,能省一點,效 果也不錯 (如有興趣能檢視 網站中的相關資料)。下圖就是 MAX232 的基本接線圖。
圖 6-1 MAX232
在上兩課的電路的基礎上按圖 6-3 加上 MAX232 就能了。序列口座用 DB9 的母頭,這樣 就能用買來的 PC 序列口延長線進行和電腦相連線,也能直接接到電腦 com 口上。
圖 6-2 DB9 接頭
圖 6-3 加上了 MAX232 的'實驗電路 做好後,就先用回前面的“Hello World!”程式,用它來和你的電腦說聲 Hello!把程式
燒到晶片上,把序列口連線好。嘿嘿,這個時候要開啟你的序列口除錯軟體,沒有就趕快到網上 DOWN 一個了。你會用 Windows 的超級終端也行,不過我從不用它。我用 的 comdebug,它是個不錯的軟體,我喜歡它是因為它功能好而且還有“線路狀態”功能,這對
我製作小玩意時很有用。序列口號,波特率調好,開啟序列口,微控制器上電,就能在接收區看 到不斷出現的“Hello World!”。一定要先開啟軟體的序列口,再把微控制器上電,不然可能因字元不對齊而看到亂碼哦。
運算子和表示式(關係運算符)
關係運算符,同樣我們也並不陌生。微控制器C語言中有六種關係運算符,這些東西同樣是在我們小時候學算術時就已經學習過了的:
> 大於
< 小於
>= 大於等於
<= 小於等於
== 等於
!= 等於
或者你是個非 C語言 程式設計師,那麼對前四個一定是再熟悉不過的了。而“==”在 VB 或 PASCAL 等中是用“=”,“!=”則是用“not ”。
國小時的數學課就教授過運算子是有優先級別的,計算機的語言也不過是人類語言的一種擴充套件,這裡的運算子同樣有著優先級別。前四個具有相同的優先順序,後兩個也具有相同的優先順序,但是前四個的優先順序要高於後2個的。
當兩個表示式用關係運算符連線起來時,這個時候就是關係表示式。關係表示式通常是用來判別某個條件是否滿足。要注意的是用關係運算符的運算結果只有 0 和 1 兩種,也就是邏輯的真與假,當指定的條件滿足時結果為 1,不滿足時結果為 0。
表示式 1 關係運算符 表示式 2 如:I
藉助我們在上一課做好的電路和學習了的相關操作。我們來做一個關係運算符相關的例項程式。為了增加學習的趣味性和生動性,不妨我們來假設在做一個會做算術的機器人,當然真正會思考對話的機器,我想我是做不出來的了,這裡的程式只是用來學習關係運算符的基本應用。
#include 《AT89X51.H》
#include 《stdio.h》
void main(void)
{
int x,y;
SCON = 0x50; //序列口方式 1,允許接收 TMOD = 0x20; //定時器 1 定時方式 2
TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8;
TI = 1;
TR1 = 1; //啟動定時器
while(1)
{
printf(“您好!我叫 Robot!我是一個會做算術的機器人! ”); //顯示
printf(“請您輸入兩個 int,X 和 Y ”); //顯示
scanf(“%d%d”,&x,&y); //輸入
if (x 《 y)
printf(“X《Y ”); //當 X 小於 Y 時
else //當 X 不小於 Y 時再作判斷
{
if (x == y)
printf(“X=Y ”); //當 X 等於 Y 時
else
printf(“X》Y ”); //當 X 大於 Y 時
}
}
}
要注意的是,在連線 PC 序列口除錯時。傳送數字時,傳送完一個數字後還要傳送一個回車符,以使 scanf 函式確認有資料輸入。