即便疫情如此還是逃避不了開學啊!最近開始學習8051系列單片機的基本原理與應用,不過作爲一個學計算機的本科菜鳥,感覺寫博客也力不從心,因而選擇結合(盜版,嘿嘿)我一個學硬件的朋友的文章,組成一個系列。寫博客是個學習的好手段,大家一起進步吧!能力所限,如果文中有所不妥,懇請指正!
該系列文章基於8051系列單片機,Keil4/Keil2,並主要使用C和彙編實現例程,彙編部分由我的大佬朋友(盜版對象)完成。本文參考了該文的內容:
https://blog.csdn.net/qq_43327300/article/details/104698377
首先我們來介紹動手前我們需要先了解的預備知識。
0、MCS-51系列單片機簡介
MCS-51系列單片機最早由intel公司推出(對,就是那個intel),當時包括51和52子系列,51子系列中包含了8051這一經典產品,我們現在往往使用8051代稱MCS-51系列。
爲了區分各個型號,MCS-51系列有着明確的命名規則:
現在去購買相關開發板一般會買到STC89C52等型號,筆者手上的開發板用的是STC89C516也是一個較爲常見的衍生型號,由於這些單片機指令系統基本一致,因而在學習中區別不大。
接下來本篇主要是基於較爲典型的8051單片機對MCS-51系列單片機進行介紹進行介紹。
1、MCS-51系列單片機硬件結構
1.1 內部結構
單片機的硬件組成有
1、1個8bit的CPU
2、1個片內振盪器和時鐘電路
3、程序存儲器,4KB的掩膜ROM,用於存放程序、原始數據和表格
4、數據存儲器
5、64KB總線擴展控制器(也就是常說的外RAM)
6、4個8位並行I/O口(P0、P1、P2、P3)
7、一個全雙工串行接口
8、2個十六位的定時/計數器
9、5箇中斷源
程序存儲器與數據存儲器是分開的,符合哈佛結構。
1.2 外部引腳功能
8051總共有40個外部引腳,其中並行I/O口占了4x8=32個
1、電源引腳
VCC:芯片電源,+5V
VSS:接地
2、時鐘引腳
XTAL1、XTAL2:晶體振盪電路反相輸入端和輸出端
接下來講個比較,相當重要的內容——8051的時序
細節大家看書吧,我這裏留個例題大家也好結合教材理解
1T機器週期=6T狀態週期S=12T時鐘(振盪)週期P
例:設應用單片機晶振頻率爲12MHz,問機器週期爲多少?
解:由已知得,晶振頻率爲12MHZ,週期爲頻率的倒數
故,1/T=12MHz => T=1/12M (s)
機器週期=12x1/12M=1/1M(s)=1us
同理晶振頻率爲24MHz,機器週期爲0.5us
3、控制引腳
RST/VPD:復位信號輸入端/備用電源輸入端
EA/VPP:內外ROM選擇端/片內EPROM編程電源
ALE/PROG:地址鎖存允許/片內EPROM編程脈衝
PSEN:外部ROM讀選通信號
2、MCS-51系列單片機存儲空間配置和功能
2.1存儲器的類型
ROM:用於存儲程序,斷電後信息保留
RAM:用於存儲數據,斷電後信息消失,分片內片外
2.2存儲單元和存儲單元地址
存儲器是由大量寄存器組成的,其中每一個寄存器稱爲一個存儲單元。它可存放一個二進制代碼。一個代碼由若干位(bit)組成,8051單片機中算術單元是八位,即一個字節(Byte),存儲器的大小也可稱爲存儲器的容量,以字節(B)爲單位,8051單片機內部有4KB的程序存儲器,也就是說8051單片機的內部程序存儲器可以存放4x1024個Byte
2.3存儲單元的讀、寫操作
(1)存儲器的讀操作
讀操作,不會破壞該單元原來的內容,只相當於數據的複製
(2)存儲器的寫操作
寫操作,要改變或刷新該單元原來的內容,相當於原來的內容被覆蓋了
2.4 MCS-51系列單片機存儲空間配置
8051的存儲器組織結構可以分爲三個不同的存儲空間
-
64KB的程序存儲器(ROM),包括片內ROM和片外ROM
-
64KB的外部數據存儲器(外RAM)
-
256B的內部數據存儲器(內RAM)(包括特殊功能寄存器)
(1)8051的程序存儲器(ROM)
地址範圍:0000H~FFFFH,共計64KB
低段4KB:0000H~0FFFH
8051和8751在片內,8031在片外。高段60KB:1000H~FFFFH。在片外。
讀寫ROM用MOVC指令,控制信號是PSEN和EA。
(2)8051的數據存儲器(RAM)
數據存儲器分爲外RAM和內RAM
外RAM地址範圍:0000H~FFFFH共64K
內RAM地址範圍:00H~FFH共256B,分爲兩個部分:
-
內部存儲器空間,地址爲00H~7FH(低128B)
-
特殊功能寄存器,地址爲80H~FFH(高128B)
訪問片外RAM用MOVX指令,訪問片內RAM用MOV指令
2.5 8051片內數據存儲空間(低128B)
(1)工作寄存區(00H~1FH)
作用:有專用於工作寄存器操作的指令,讀寫速度一般比內RAM要快,指令字節比一般直接尋址指令短,還具有間接尋址功能 (只有R0、R1可以)
工作寄存器 區分爲四個區:0、1、2、3區。每區有八個寄存器:R0~R7
(2)位尋址區(20H~2FH)
作用:不但有字節地址,而且每一字節地址還有位地址,可以進行位操作
(3)數據緩衝區(30H~7FH)
作用:用於存放各種數據和中間結果,起到數據緩衝作用。堆棧一般開闢在這個區域
00H~7FH是一般用戶能操作的區
2.6特殊功能寄存器(高128B)
21個特殊功能寄存器,其中字節地址末尾是0H或8H的寄存器每一位都有位地址,可以進行位操作
特殊功能寄存器SFR
佔用地址字節:80H~FFH
位尋址器:其字節地址可被8整除,也即上面講的0H、8H結尾
專用寄存器:
A、B、PSW、DPTR、SP
I/O接口寄存器:
P0、P1、P2、P3、SBUF、TMOD、TCON、SCON…
(1)累加器Acc
最常用的寄存器,所有的運算類指令都要使用它。累加器在指令中助記符位A,自身帶有全零標誌Z,若A=0則Z=1;若A != 0則Z = 0。該標誌常用於程序分支轉移的判斷條件
(2)B寄存器
80C51中,在做乘除法時必須使用B寄存器,不做乘除法時,可作爲一般寄存器使用
(3)程序狀態字PSW
(4)堆棧指針SP
以後用到再來完善
(5)數據指針DPTR
分成DPL(低8位)和DPH(高8位)兩個寄存器,用來存放16位地址值。
2.7並行I/O口
四個8位的雙向並行端口:P0、P1、P2、P3
P0、P1、P2、P3口對應四個數據鎖存器:P0、P1、P2、P3,對應內部RAM地址爲80H、90H、A0H、B0H,訪問I/O端口可以位尋址,當單片機復位時,P0~P3鎖存器內容均爲1
爲了介紹方便我們以P1、P2、P3、P0的順序進行介紹。
(1)P1口
P1口只有簡單的雙向I/O功能,是各口中功能最簡單的一個。
在實現輸出狀態時我們可以參考下圖:
內部總線向D觸發器輸入0時,V1受到高電平導通,vcc接地,因而對外輸出0,同理在總線向D觸發器輸入1時,V1受到低電平截止,P1口從而輸出高電平。
P1口在接受數據時我們可參考下圖:
我們希望P1口接受數據時首先得讓場效應管截止,因而需要先行輸出一個高電平,使D觸發器輸入端爲高電平,從而使高低電平的信號成功到達總線。
因而在輸入數據前首先得輸出一次高電平!
(2)P2口
首先我們可以用P2口實現P1口的功能:
當CPU發出控制信號1時,使多路開關MUX導向內部地址線,使P2口作爲高8位地址線使用。
P2口的驅動能力爲四個LSTTL門電路
(3)P3口
P3在具有我們之前介紹的P1所有的功能(如下圖所示)還有第二功能。
當P3口的第二功能都保持高電平時,P3口作爲通用I/O口使用,功能與P1相同
(4)P0口
P0是一個三態雙向口,可作爲地址/數據分時複用口,也可作爲通用I/O接口也就是P1口的功能。
當控制信號爲低電平時可做通用I/O口使用。
由於其缺乏上拉電阻,需外接一個上拉電阻才能輸出高電平。
當控制信號爲高電平時,P0口作爲地址/數據分時複用總線。
3、MCS-51系列單片機的復位方式
(1)復位條件
復位(RST)引腳(9腳)上加一個持續時間爲兩個機器週期的高電平
若單片機時鐘頻率爲 12MHz,則機器週期爲 1us,那麼則需要持續 2us以上的時間。