關於單片機型號的介紹:
STC89C52RC40C-PDIP 0721CV4336.....
- STC:STC公司
- 89:89系列
- C:COMS
- 52(還有51,54,55,58,516,):2表示存儲空間的大小,2*4K=8K
- 40:晶振最高頻率40MHZ,單片機工作的速度
- C(commercial):商業級。(還有I(industry):工業級)區別在於溫度可用范圍,商業級:0~85℃,工業級:-40~125℃,還有軍品級:-55~160℃(這個不確定)。
- PDIP:封裝形式,雙列直插式
- 0721:07年第21周
AT89C51,S51,LV51
- S:支持串口下載
- C:必須要專門的編程器才能寫程序
- LV:低電壓,工作電壓3V即可
STC89E,LE,C52AD
- E:低電壓
- AD:芯片自帶模擬電壓到數字電壓的轉換器
總線型:有4組IO口,P0-P3,每組都是8位
非總線型:不能構成一組,例如P3。
單片機內部總線是8位為一個總線。
此處不會也沒事,后面用到會單獨講
程序存儲器、數據存儲器都有總線(3條,送數據的時候,數據是在總線跑)與之相連,暫時不會沒事
單片機由這幾部分組成:(作為了解)
C-51(C語言),ASM-51(匯編語言),了解即可
需要知道,否則浪費空間等
char是8位,而bit就是一位
單片機每個寄存器都有一個固定的地址,這里sfr不常用
sbit常用,PSW是寄存器,^2是寄存器的第二位,定義后,以后想要使用直接使用OV即可
頭文件之后會說
邏輯與、邏輯或、邏輯非和數字電路中相同:0&&1=0 1&&1=1 0||1=1 !0=1 !1=0
左移右移:原1110 1111 左移后1101 1110,左移后最低位補0,右移后最高位補0
按位與可以是變量之間:5&2 -> 0101&0010(5和2的二進制) -> 0000(一位一位的與) 所以5&2=0
按位異或不常用
單片機需要掌握以下幾點:
- 最小系統運行的必要條件:
- 電源
- 晶振
- 復位電路
- 對單片機任意IO口(4組,32個)的隨意操作
- 輸出控制電平高低
- 輸出檢測電平高低
- 定時器:重點掌握最常用方式2
- 中斷:
- 外部中斷
- 定時器中斷
- 串口中斷
- 串口通信:
- 單片機之間
- 單片機與計算機之間
發光二極管電阻的值怎么選取:
發光二極管是內部電流點亮,3mA~10mA左右,有鍺管、硅管,常用硅管,點亮后發光二極管兩端1.7V左右,得到電阻上電壓(5-1.7=3.3V),電流為3mA,求得到電阻為1kΩ,用300Ω也行(更亮,電流就變為了10mA,再高容易燒壞)。
電源(USB接口數據線D1和D2下面的線就是電源線):
USB可用於做MP3或U盤開發
電源上有限流電阻1k(有三種,下拉電阻,上拉電阻,限流電阻:限制這條道線上通過電流大小),去耦電容(穩壓,去除雜波,並濾波,起緩沖作用)兩個,USB供電的時候,計算機USB使用的是開關電源(像是內部有個開關控制電流大小,電流一大自動關閉,一小就自動打開,是電流平均,最后轉換成5V電壓,示波器觀察發現電壓不穩定)
74HC573鎖存器
OE非(out enable使能,低電平有效),D輸入,Q輸出,當OE為H,輸出為Z高阻態(介於高電平與低電平之間,總線與其他元器件相連接,其他元器件輸出高電平,高阻態就變為高電平,其他元器件輸出低電平,就變為低電平),所以OE接地,D0-D7為輸入,與DB1-DB8連接,這里DB1-DB8為單片機P1口,用單片機控制發光二極管亮滅,10、20接地和電源,11為LE(鎖存器鎖存端),LE為H時,輸出為輸入變化,LE為L時,輸出都保持上一次的值。這里LE為H(51單片機上電后,默認所有IO口都是高電平),相當於不存在鎖存器,其用於后面拓展使用AD轉換。
編程正式開始
main,任何一個C程序都有且僅有一個main函數,它是程序開始執行的入口
花括號{}成對出現,所以先打出來以免忘了
注意下面C語言的格式(注意用Tab,一般設置為Tab為4個空格),嚴格遵循,方便閱讀修改
再一次重復,51單片機上電后(接通電源開機)所有IO口都為高電平(即1)
(原理圖)電路圖:
發光二極管陽極分別連接了排阻(電阻)和電源,陰極連接了鎖存器的輸出Q0-Q7,,鎖存器的DB0-DB7連接了單片機的P1.0-P1.7口,鎖存器這里11引腳上電為1,相當於輸入直接給輸出(不會了再回去看鎖存器,會常用到),要想讓發光二極管(LED燈)點亮,需要讓陰極為負(低電平0),陽極為正(高電平1)),由於LED燈陽極接了電源所以為高電平,因此要想讓LED亮,只需要讓單片機對應的IO口為低電平,進而輸出給對應的Q0-Q7的某一個即可。
使用單片機必須要會看電路圖!因為電路圖不同,編程就不同(例如P1口不再是連接燈而是連接鍵盤燈),而且以后需要自己畫電路圖設計單片機,或者學習新的單片機也需要會看。
位操作方法點亮一個二極管
1 #include<reg52.h> 2 sbit D1=P1^0; 3 void main() 4 { 5 D1=0; 6 }
程序最后進行講解,總線方法也先等到點亮觀看到結果后再嘗試。
總線操作方法點亮一個二極管(點亮第二個,DB8-DB1:1111 1101,4個一組換為16進制fd)
#include<reg52.h> void main() { P1=0xfd;//0x表示16進制 }
第一個不知道,第二個編譯當前文件,第三個編譯所有工程文件
無錯誤
下載到單片機,有兩種,hex文件(16進制),bin文件(2進制),keil只能生成hex文件,weifu生成hex和bin文件。
找到生成hex的方法:
Xtal晶振頻率,此處不用管,這里不需要計算單片機運行速度
Memory Model內存形式,Code..編碼內存程序空間大小64K,你可以直接生成64K大小的程序,89c52支持片外存儲器,如果片內不夠,會存於片內。
選中Output,勾選Create HEX,再重新編譯即可。
下載程序:
先選擇型號,STC89C52RC,選擇Open File打開文件,選擇生成的HEX,選擇COM串口(右鍵我的電腦,選擇管理,設備管理器,打開端口,其中rs232對應的COM,若為COM10+,雙擊rs232,選擇設置Setting,高級Advanced就可以修改了),波特率默認。單片機下載時需要冷啟動(單片機不知道你要下載,所以先在軟件點擊下載,然后打開實驗板電源,就會給單片機發送指令,單片機剛上電會通過串口接收數據,檢測是否下載數據,如果檢測到下載命令,就和這個上位機(電腦)接通開始下載程序,若之前已開啟則重新開啟單片機)上述只需設置(型號,選擇COM,波特率)一次,以后默認。
程序講解:
1 #include<reg52.h>//頭文件
2 sbit D1=P1^0;//特殊寄存器的位定義
3 void main() 4 { 5 D1=0;//D1=0即為P1^0=0,即IO口為低電平,即二極管陰極為低電平 6 }
頭文件里有許多寫好的程序,include后相當於把程序直接放入c文件內。
在reg52.h上右鍵,點擊open document...就能打開這個頭文件,看到里面的內容(或者在keil文件夾下的C51文件夾里,點開INC文件夾(include),里面很多頭文件,就能看到REG52.H)。
52兼容51,52比51多一個寄存器(T2CON),如果不用那個定時器,那么寫51和52都行。
P0是特殊功能寄存器,單片機有21個特殊功能寄存器,不同的特殊功能寄存器位於單片機內不同地址,單片機P0口的地址是0x80。
頭文件是把編譯器和單片機硬件連接器來的東西,編譯器不知道你操作的是單片機還是什么,所以需要把地址都定義一下。
例如sfr P0=0x80;這里就和我們c文件里定義sbit D1=P1^0一樣。sfr是定義一個特殊功能寄存器也就是8位,而sbit是一位。
正如上面提到的,include頭文件相當於把頭文件的內容放入c文件,所以我們才能用P1這種方式,不能用P1^0是因為沒有位定義,而這里的AC等就可以直接使用,因為頭文件里定義了。頭文件也可以自己寫。
例如這里我們頭文件里位定義了D1,然后c文件里直接使用沒有定義也不會出錯了。
最后再說一下注釋,有兩種
- 單行注釋 //這里是注釋內容,只在本行內有效
- 多行注釋 /*這里是注釋內容,可以換行*/
P1^2:單片機四組IO口,P1就是P1口,每組IO口有8位,用^2可以選擇P1口的第2位,使用某一位以前必須定義,記住,除非頭文件里有寫好的。而P1這些IO口就是在頭文件寫好的。
完整的程序應該有始有終,點亮后應該停在那里
while(1),死循環,當滿足while括號內的內容時(即括號內為真時)就進入while循環,而1就是真,所以一直進入這個循環。
作業: