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...