51單片機學習筆記——基於C與彙編(1)

即便疫情如此還是逃避不了開學啊!最近開始學習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的存儲器組織結構可以分爲三個不同的存儲空間

  1. 64KB的程序存儲器(ROM),包括片內ROM和片外ROM

  2. 64KB的外部數據存儲器(外RAM

  3. 256B的內部數據存儲器(內RAM)(包括特殊功能寄存器)

    在這裏插入圖片描述

(1)8051的程序存儲器(ROM)

地址範圍:0000H~FFFFH,共計64KB

低段4KB:0000H~0FFFH

80518751在片內,8031在片外。高段60KB:1000H~FFFFH。在片外。

讀寫ROMMOVC指令,控制信號是PSENEA

(2)8051的數據存儲器(RAM)

數據存儲器分爲外RAM內RAM

RAM地址範圍:0000H~FFFFH64K

RAM地址範圍:00H~FFH256B,分爲兩個部分:

  1. 內部存儲器空間,地址爲00H~7FH(低128B

  2. 特殊功能寄存器,地址爲80H~FFH高128B

    訪問片外RAMMOVX指令,訪問片內RAMMOV指令

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個特殊功能寄存器,其中字節地址末尾是0H8H的寄存器每一位都有位地址,可以進行位操作

特殊功能寄存器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以上的時間。

(2)復位後內部寄存器狀態

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章