單片機C語言知識點全攻略

爲了讓有需要的朋友進一步瞭解單片機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 函數確認有數據輸入。