當前位置:才華齋>計算機>C語言>

微控制器C語言知識點全攻略

C語言 閱讀(2.11W)

為了讓有需要的朋友進一步瞭解微控制器C語言知識,下面的文章將為大家講解微控制器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 函式確認有資料輸入。