51單片機學習筆記(郭天祥版)(1)——單片機基礎和點亮LED燈

 

 

 

 

關於單片機型號的介紹:編程

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

按位異或不經常使用

 

單片機須要掌握如下幾點:

  • 最小系統運行的必要條件:
  1. 電源
  2. 晶振
  3. 復位電路
  • 對單片機任意IO口(4組,32個)的隨意操做
  1. 輸出控制電平高低
  2. 輸出檢測電平高低
  • 定時器:重點掌握最經常使用方式2
  • 中斷:
  1. 外部中斷
  2. 定時器中斷
  3. 串口中斷
  • 串口通訊:
  1. 單片機之間
  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口,用單片機控制發光二極管亮滅,十、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就是真,因此一直進入這個循環。

 


 

做業:

相關文章
相關標籤/搜索