微控制器程式設計C51疑難解析 不斷更新中

2021-06-16 18:26:24 字數 1469 閱讀 5759

1.

a|=b

即a=a|b

。新的a 

等於 原來的

a|b。

&是乙個位運算子,就是將兩個二進位制的數逐位相與,就是都是1才是

1,只要有乙個為0則為

0,結果是相與之後的結果。

&&是乙個邏輯運算子,就是判斷兩個表示式的真假性,只有兩個表示式同時為真才為真,有乙個為假則為假,具有短路性質。 2.

while(*p&&*p=='*')

//等價於

while(*p!='\0'&&*p=='*')

//還等價於

while(*p=='*')

//表示當

*p等於

'*'時執行迴圈體。

3. #define是巨集定義語句

想做的是位操作,應該改將#define led    p1^1

#define key_on  p1^6

#define key_off p1^7

改為sbit led = p1^1;

sbit key_on = p1^6;

sbit key_off = p1^7;

這樣文中的「=

」就不違法了 4.

tf0=0;

它的作用是:當定時器0溢位時,由硬體使tf0置1,並申請中斷,進入中斷服務程式後,由硬體自動清0.要注意:如果使用的是軟體查詢方式的話,當查詢到該為置1後得用軟體清0.

5. while(!ti);//while(ti==0)

ti=0;

ti是串列埠的傳送中斷標誌位,需軟體清零

while(ti==0);//表示等待傳送結束

ti=0;//表示軟體清零

ti是微控制器的串列埠傳送資料的標誌位,當微控制器傳送資料後將ti置1,需要軟體清0

那麼while(!ti)的意思也就是當微控制器未傳送資料所要執行的程式。

6.復合賦值運算子

a+=b------a=a+b; a%=b-------a=a%b; a<<=b--------a=a<>=b

對於初學者可能不太習慣,但是非常有利於編譯處理,能夠提高編譯效率便產生高質量的目標**。

7.sda=(bit)(input&0x80)

input & 0x80 意思是取得 該位元組的最高位

加乙個bit  意思是 bit強型別轉化 

如果 最高位是1那麼 sda=1 如果最高位不是1那麼sda=0

8.巨集定義#define fosc 18432000l和#define baud 9600?

如果你外部掛的是11.0592m的晶振,那麼就需要這樣定義

#define fosc 11059200l

baud的定義則是根據你與電腦串列埠所通訊的具體的波特率,

若使用9600的波特率,則定義為

#define baud 9600

若使用115200的波特率,則定義為

#define baud 115200

51微控制器與C51

微控制器又稱單片微控制器,是在一塊晶元中整合了cpu 處理器 ram 資料儲存器 rom 程式儲存器 定時器 計數器和多種功能的i o 輸入 輸出 介面等一台計算機所需要的基本功能部件,從而可以完成複雜的運算 邏輯控制 通訊等功能。51微控制器是對所有相容intel 8031指令系統的微控制器的統稱...

51微控制器C51程式

學習c51程式之前需要對c語言有一定的了解和學習 這裡只介紹與c語言有區別的地方 具體的不同如下 1 c51中增加了幾種針對msc 51微控制器的特有資料型別 a sfr和sfr16 用於定義特殊功能暫存器,如 sfr psw 0xd0 一般情況下這些特殊功能暫存器不需要使用者自定義,通常包含在標頭...

c51微控制器模組化程式設計

在剛接觸微控制器,剛編寫 的時候都只是有乙個.h 和乙個.c檔案。把所有的函式都寫在.c裡面。這樣遇到複雜的系統時,量就很大,一下子就是幾百行。而且把所有函式寫在乙個.c裡不利於移植,對於以後的開發有了很大的限制。為了解決這個缺點就必須學會模組化程式設計。將程式分解成乙個乙個模組。這樣就有了多個.c...