關於單片機型號的介紹:編程
STC89C52RC40C-PDIP 0721CV4336.....函數
AT89C51,S51,LV51學習
STC89E,LE,C52AD編碼
總線型:有4組IO口,P0-P3,每組都是8位spa
非總線型:不能構成一組,例如P3。設計
單片機內部總線是8位爲一個總線。3d
此處不會也沒事,後面用到會單獨講code
程序存儲器、數據存儲器都有總線(3條,送數據的時候,數據是在總線跑)與之相連,暫時不會沒事blog
單片機由這幾部分組成:(做爲了解)接口
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
按位異或不經常使用
單片機須要掌握如下幾點:
發光二極管電阻的值怎麼選取:
發光二極管是內部電流點亮,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口,用單片機控制發光二極管亮滅,十、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就是真,因此一直進入這個循環。
做業: