① 單片機C語言的一個問題 static bit a 什麼意思
在單片機C語言中,bit
a表示定義一個變數a,其類型為bit型,所謂的bit型就是用一位二進制數來表示變數。bit型的取值為0或1。
static
bit
a表示定義一個bit型的變數a,其為靜態變數,只初始化一次即可。
② 51 微控制器中 DPH 和 DPL
DPH和DPL是DPTR暫存器的高八位和低八位。DPTR是16位暫存器。DPH/DPL可以單獨作為8位暫存器使用。
開侍肢中斷以後,在中斷服務子程式中設定一個中斷次數計數器,統計達到2次後
中斷次數計數器清0,然後再把莫暫存器加一。
51微控制器中 equ p2.1
這是一個巨集指令,申明一個變數,在程式中它代表P2.1這個IO口。
不是C51,是51系列微控制器.
51系列微控制器和PIC系列微控制器的在內部結構上完全不一樣:51微控制器的一個指令周期佔12個機器周期,但PIC微控制器一個指令周期只佔4個機器周期;51微控制器有上百條指令,屬於RISC系統,PIC的中端8位微控制器最多隻有38條指令屬於CISC系統。傳統型51微控制器只有40和44和20引腳的,而PIC的8位單片機種類繁多,從6引腳到64引腳的微控制器都有。
51微控制器只有8位的,而PIC微控制器有8位、16位、32位的微控制器,還有特殊的內嵌DSP功能的dsPIC微控制器。
在中斷方面,51系列微控制器有中斷向量,微控制器內CPU直接判斷中斷型別來呼叫中斷子程式。而PIC的8位微控制器沒有中斷向量,需在中斷子程式內判斷中斷型別(16位和32位的PIC微控制器有中斷向量,而且比51微控制器的多得多沖塌)
IO方面,所有PIC微控制器的IO口驅動能力比51的要強,因為pic微控制器全是推挽輸入輸出。並且對PIC微控制器的IO操作前需要指定該IO口是輸入還是輸出。不是說雙向還是單向,而是說,51微控制器只要讀IO口就是輸入,寫IO口就是輸出,而PIC的需要在讀之前指定為IO輸入才能讀到正確的數值,如果是IO輸出,則程式讀到的值恆為1。
INT0是外部中斷0,INT1是外部中斷1,這兩個是不同的中斷源,實現的功能是完全一樣的。
區別是在優先順序設定一樣的情況下,INT0的優先順序比INT1高。即如果兩者同時發生中斷,那麼先響應INT0。
不能 可以加一條指令
MOV A,DPH
CJNE A,#00H,LOOP1
或者
MOV R2,DPH ; R0 - R7 都可以
CJNE R2,#00H,LOOP1
自定義的資料 一般是因為不能定義data做變數名 所以定義dat 來表示資料
static(靜態) 是一種資料變數的儲存方式而已,不存在什麼用法之說,但了解它的特性,能幫你寫出好程式。
靜態變數的特性:
1、變數只定義一次(含定義時的初始化值);
2、只在定義范圍內有效(其他地方、函式並不認識這個變數);
3、函式結束,變數值不丟失。
變數有 全域性變數、區域性變數之分;
全域性變數在程式中,分配有固定物理儲存空間,程式執行過程中,資料不丟失(就是自己有個房子)。
區域性變數在程式中,沒有固定物理儲存空間。一般出現在子函式中,呼叫子函式,隨機分配儲存空間,子函式結束後,該空間回收,隨機分配給其他函式使用。(就是租屋,你不租了,就租給別人)
有些時候,你又希望這個區域性變數老判世能保持,這樣你下次回來還能接著算,於是就需要static 這個「靜態」功能了。它能讓這個分配的空間,一直給你保留著。
也許你會說,用全域性變數就好了。是的,沒錯,它的功能幾乎與全域性等價了。但為什麼不用全域性,可能原因有以下2種:
1、全域性變數對所有子函式都有效,誰都可以修改,可能會超出你的預計范圍(就是說,房子雖然是你的,但大家都有鑰匙,可以隨便進來換換裝修,你掌握並不了)
2、移植性高,子函式內的靜態區域性變數,只需要輸出子函式即可。但全域性變數,要麼需要主檔案為你定義這個全域性變數,要麼就會在多個C檔案包含你的標頭檔案時,發生重復定義全域性變數問題。
當然,除了靜態區域性變數,還有靜態全域性變數,這個用於模組化程式設計里,為了避免其他模組出現同名全域性變數問題,就使用了只針對本模組程式有效的 靜態全域性變數
差不多,各有各的好處
銳志的配件多一點,帶一個u *** -ISP,可以用AT89C51;多一個可以下載AVR微控制器的功能,但液晶是1062,普中的最新款我記得是12864,60塊;
普中的開發箱不自帶ISP下載線,得花點錢買個轉接板,不過一般用不到。
看完淘寶,個人覺得最好買普中最新款微控制器開發箱,支援STM32的那個。因為學完C51可以直接學ARM了,AVR什麼的和51都差不多。能把ARM和微控制器做到了一塊板子上,可以給你省掉以後買ARM學習板的錢。
那個電容不是用來助振的,是用來濾除外界串入的干擾波的,有兩個組成,在晶振的兩個腳與地之間串聯。
詳細的設計理論,與EMI(電磁相容)方面有關。
如果不裝這兩個電容,會給微控制器造成不好的工作條件,容易宕機,或程式指標異常跳轉。
如果要換,只能往小一點換,但不能換的太小,而且大小與晶振的主頻有關系。
③ 如圖所示:單片機的Keil軟體里在子函數里為什麼定義static 會有警告
靜態局部變數在函數內定義,生存期為整個源程序,但作用域與自動變數相同,只能在定義該變數的函數內使用。退出該函數後,盡管該變數還繼續存在,但不能使用它。所以 b =100會常駐內存,單片機的RAM本來就小,所以編譯器可能不允許。
④ 單片機C語言中static bit 是什麼類型側重點是後面的bit是什麼意思,前面的static是靜態
bit是位定義,就是單純一個位,類似於BOOL型變數,不過這個定義不是正規,不是所有的編譯器都能編譯的,static你都知道啦,我就不解釋了
⑤ static在51單片機中幾種用法
static(靜態) 是一種數據變數的存儲方式而已,不存在什麼用法之說,但了解它的特性,能幫你寫出好程序。
靜態變數的特性:
1、變數只定義一次(含定義時的初始化值);
2、只在定義范圍內有效(其他地方、函數並不認識這個變數);
3、函數結束,變數值不丟失。
變數有 全局變數、局部變數之分;
全局變數在程序中,分配有固定物理存儲空間,程序運行過程中,數據不丟失(就是自己有個房子)。
局部變數在程序中,沒有固定物理存儲空間。一般出現在子函數中,調用子函數,隨機分配存儲空間,子函數結束後,該空間回收,隨機分配給其他函數使用。(就是租屋,你不租了,就租給別人)
有些時候,你又希望這個局部變數能保持,這樣你下次回來還能接著算,於是就需要static 這個「靜態」功能了。它能讓這個分配的空間,一直給你保留著。
也許你會說,用全局變數就好了。是的,沒錯,它的功能幾乎與全局等價了。但為什麼不用全局,可能原因有以下2種:
1、全局變數對所有子函數都有效,誰都可以修改,可能會超出你的預計范圍(就是說,房子雖然是你的,但大家都有鑰匙,可以隨便進來換換裝修,你掌握並不了)
2、移植性高,子函數內的靜態局部變數,只需要輸出子函數即可。但全局變數,要麼需要主文件為你定義這個全局變數,要麼就會在多個C文件包含你的頭文件時,發生重復定義全局變數問題。
當然,除了靜態局部變數,還有靜態全局變數,這個用於模塊化程序設計里,為了避免其他模塊出現同名全局變數問題,就使用了只針對本模塊程序有效的 靜態全局變數
⑥ static 在單片機c語言用用法
首先static變數不是全局變數,全局變數在整個程序中均可見。且可以在整個程序的任何位置進行修改。
而static變數,只在聲明它的函數內看見,也只有在聲明它的函數內可以被修改。即便在函數外或其它函數中有同名的變數,也和它不是同一變數。
和局部變數相比,局部變數在每次調用函數時,變數值都會重置。而static變數,在每次調用函數時,它都會保留這上次調用時最後一次賦值過的值。
總之,static是一種特殊的局部變數,它可以保存函數上次調用時這個變數的狀態。
⑦ 單片機變數定義類型
C語言中,變數一般有兩種屬性,分別是:存儲類別、數據類型。
例如定義一個變數:static unsigned char var = 0; 上述語句中,static(靜態的)為變數的存儲類別,unsigned char(無符號字元型)為變數的數據類型,var為變數名,初始化值為0。
下面給你說明幾點。
存儲類別:即變數在代碼運行期間的存儲方式。c語言提供了4種,分別是:auto(自動的)、static(靜態的)、extern(外部的)、register(寄存器的)。
默認情況下,如果不加存儲類別,則該變數是auto類的,該關鍵字可以省略,其它三個不能省。static的用法是,定義一個局部變數,該變數只進行一次初始化,在程序運行期間一直佔用著內存,每次調用完畢都保持本次調用完後得到的值(而auto調用完一次即釋放內存,下次調用用從新進行初始化)。extern:一個變數被定義成全局變數,加上該關鍵字,意思是提醒編譯器,該變數是在別的C文件中(即你想再一個C文件中調用另外一個C文件的變數,需用該關鍵字進行引入)。register:定義一個變數為該存儲類型,建議編譯器將該變數存放在CUP內部寄存器中,以便該變數頻繁調用而提高代碼運行速度。注意,它是建議型的,一般用在循環次數多的地方,因為變數一般存放在內存中,每次CUP訪問它都得跑到內存去提取,次數多了,影響運行速度。放在內部寄存器就快多了(當然放不放我們不知道,只是建議編譯器這么做),這種變數也是用完就釋放。
數據類型:C語言提供了三種基本數據類型:char型 int型 float型。
默認情況下,char/int/float是指有符號的,即前面都省略了signed關鍵字,如果需要定義成無符號型的,需在前面加上不可省略的unsigned關鍵字。char佔一個位元組,int佔2個位元組(在有的環境下是4個位元組),float佔4個。表示的數據范圍也比較明確,char一個位元組8位,共256種狀態,有符號的最高位表示符號,0為正,1為負,其餘7位表示數字位,2的7次方。int型16位 的,一樣。float型的數據必須要有小數點,一般float能表示6~7位有效數字。上述的數據類型中,如果范圍還不夠大,還可以定義成long型,即長整型,佔4個位元組,而浮點型可以定義成double型,可以表示16~17為小數,當然,它也只佔四個位元組。