【金善愚】 單片機(jī)應(yīng)用原理篇 筆記整理
課程視頻 :https://space.bilibili.com/483942191/channel/collectiondetail?sid=51090
一、引腳分布介紹
1.分類
三類
- 電源及晶振引腳(共4只)
- 控制引腳(共4只)
- 端口引腳(共32只)
2.電源引腳
- Vcc(40腳):電源端,接+5V電源。
- Vss(20腳):接地端。
3.時(shí)鐘引腳(2根)
- XTAL1(19腳):接外部晶振和微調(diào)電容的一端。
- XTAL2(18腳):接外部晶振和微調(diào)電容的另一端。
4.控制引腳(4根)
-
RST/Vpp(9腳):復(fù)位信號(hào)/備用電源輸入引腳。
○ 當(dāng)RST引腳保持兩個(gè)機(jī)器周期的高電平后,就可以使80C51完成復(fù)位操作。
○ 該引腳的第二功能是VBp,即備用電源的輸入端,具有掉電保護(hù)功能。
○ 若在該引腳接+5V備用電源,在使用中若主電源VCC掉電,可保護(hù)片內(nèi)RAM中的信息不丟失。 ○ -
ALE(30腳):地址鎖存允許信號(hào)輸出。
○ 當(dāng)CPU訪問(wèn)片外存儲(chǔ)器時(shí),ALE輸出信號(hào)控制鎖存PO口輸出的低8位地址,從而實(shí)現(xiàn)PO口數(shù)據(jù)與低位地址的分時(shí)復(fù)用。
○ 當(dāng)80C51上電正常工作后,自動(dòng)在ALE端輸出頻率為fosc/6的脈沖序列(fosc代表振蕩器的頻率)。 -
EA(31腳):外部程序存儲(chǔ)器地址允許輸入端。
○ 當(dāng)EA接高電平時(shí),CPU執(zhí)行片內(nèi)ROM指令,但當(dāng)PC值超過(guò)OFFFH時(shí),將自動(dòng)轉(zhuǎn)去執(zhí)行片外ROM指令;
○ 當(dāng)EA接低電平時(shí),CPU只執(zhí)行片外ROM指令。對(duì)于80C31,由于其無(wú)片內(nèi)ROM,故其EA必須接低電平。 -
PSEN(29腳):片外ROM讀選通信號(hào)端。
5.端口引腳(32根)
- P0.0 ~ P0.7 (39 ~ 32腳) —— P0口
- P1.0 ~ P1.7 ( 1 ~ 8腳) —— P1口
- P2.0 ~ P2.7 (21 ~ 28腳) —— P2口
- P3.0 ~ P3.7 (10 ~ 17腳) —— P3口
1、P0口既可以作為普通I/O口,又可以作為外部擴(kuò)展時(shí)的數(shù)據(jù)總線和地址總線的低8位,分時(shí)復(fù)用;作為普通I/O口時(shí),外部要接上拉電阻。
2、P1口可以作為普通I/O口使用,內(nèi)部帶上拉電阻
3、P2口可以作為普通I/O口使用,又可作為外部擴(kuò)展時(shí)地址總線的高8位,作為普通I/O時(shí),內(nèi)部帶上拉電阻
4、P3口可以作為普通I/O口使用,又具有第二功能,作為普通I/O時(shí),內(nèi)部帶上拉電阻
二、存儲(chǔ)器結(jié)構(gòu)及空間分布介紹
1.存儲(chǔ)器的劃分方法
馮諾依曼結(jié)構(gòu) 與 哈佛結(jié)構(gòu)
(51單片機(jī)是改進(jìn)的哈佛結(jié)構(gòu),分時(shí)復(fù)用,但是物理存儲(chǔ)空間分開(kāi),總線統(tǒng)一。)
2.程序存儲(chǔ)器(ROM)
- 作用:存放程序、表格或常數(shù),具有非易失性
- 特點(diǎn):片內(nèi)ROM與片外ROM可有2種組合方案
方案1:4KB以內(nèi)的地址在片內(nèi)ROM,大于4KB的地址在片外ROM中(圖中折線),兩者共同構(gòu)成64KB空間;
方案2:片內(nèi)ROM被禁用,全部64KB地址都在片外ROM中(圖中直線)。
2種組合方案由EA引腳的電平狀態(tài)決定:EA=1時(shí)為方案1,EA=0時(shí)為方案2
注意:ROM有6個(gè)特殊儲(chǔ)存器單元——用于程序引導(dǎo)
存器單元 | 存器內(nèi)容 |
---|---|
0000H | 主程序入口地址 |
0003H | INT0中斷程序入口地址 |
000BH | T0中斷程序入口地址 |
0013H | INT1中斷程序入口地址 |
001BH | T1中斷程序入口地址 |
0023H | RI/TI中斷程序入口地址 |
中斷程序執(zhí)行過(guò)程:某一突發(fā)事件 → 相應(yīng)中斷入口地址自動(dòng)裝入PC → 引導(dǎo)兩次跳轉(zhuǎn) → 執(zhí)行相應(yīng)中斷服務(wù)程序
主程序一般應(yīng)安排在0030H地址以后(有中斷需要時(shí))
3.數(shù)據(jù)存儲(chǔ)器(RAM)
作用:存放程序運(yùn)行結(jié)果
(1) 低128字節(jié)的區(qū)域
①工作寄存器區(qū)(O0H ~1FH)
②可位尋址區(qū)(20H ~2FH)
③用戶RAM區(qū)(30H ~7FH)
①區(qū)共有32個(gè)存儲(chǔ)單元;
??每個(gè)單元都有1個(gè)8位地址(字節(jié)地址)
??每個(gè)單元都有1個(gè)寄存器名稱(RO~R7)
??32個(gè)單元分為4組(第0~第3組)
??CPU只能選一組為當(dāng)前工作寄存器組
當(dāng)前工作寄存器組取決于PSW的設(shè)置
CPU復(fù)位后RS1和RSO默認(rèn)值為0,即默認(rèn)第0組為當(dāng)前工作寄存器組。
②區(qū)共有16個(gè)存儲(chǔ)單元;共有128個(gè)位地址
??每個(gè)單元都有一個(gè)字節(jié)地址每個(gè)單元都有8個(gè)不同的位地址
③區(qū)共有80個(gè)存儲(chǔ)單元;
??每個(gè)單元都有一個(gè)字節(jié)地址,但沒(méi)有位地址,也沒(méi)有寄存器名
??此區(qū)可作為堆棧區(qū)和中間數(shù)據(jù)存儲(chǔ)區(qū)使用——用戶RAM區(qū)
??【注意】:①區(qū)和③區(qū)只能按字節(jié)進(jìn)行數(shù)據(jù)存取操作,②區(qū)則可按字節(jié)和位兩種方式存取操作。
??
(2)高128字節(jié)RAM區(qū)
每個(gè)存儲(chǔ)單元都有一個(gè)字節(jié)地址,但只有其中21個(gè)單元可以使用,并有相應(yīng)寄存器名稱。
其中,字節(jié)地址末位是0或8的SFR,都具有位地址。
三、復(fù)位、時(shí)鐘與時(shí)序
1.復(fù)位與復(fù)位電路
- 復(fù)位 —— 使單片機(jī)恢復(fù)原始默認(rèn)狀態(tài)的操作。
復(fù)位時(shí)片內(nèi)各寄存器的初始值
寄存器名稱 | 默認(rèn)復(fù)位值 | 寄存器名稱 | 默認(rèn)復(fù)位值 |
---|---|---|---|
PC | 0000 H | TMOD | 00 H |
A | 00 H | TCON | 00 H |
PSW | 00 H | TH0 | 00 H |
B | 00 H | TL0 | 00 H |
SP | 07 H | TH1 | 00 H |
DPTR | 0000 H | TL1 | 00 H |
p0 ~ p3 | FF H | SCOM | 00 H |
IP | xxx0 0000 B | SBUF | xxxx xxxx B |
IE | 0xx0 0000 B | PCOM | 0xxx0 000 B |
??表中X表示可以是任意值,B表示是二進(jìn)制
??在上電復(fù)位(冷啟動(dòng))時(shí)的SRAM的內(nèi)容為隨機(jī)值,而在按鍵復(fù)位(熱啟動(dòng))時(shí)SRAM的內(nèi)容保持不變。
????注意:在用keil開(kāi)發(fā)的程序中, keil 軟件默認(rèn)會(huì)在編譯過(guò)程中加入把RAM初始化為00H
- 復(fù)位條件
為使電路正確復(fù)位,需要使RST信號(hào)保持至少24個(gè)時(shí)鐘周期(兩個(gè)機(jī)器周期)的高電平。
2.時(shí)鐘電路
單片機(jī)需要統(tǒng)一的時(shí)鐘控制,其時(shí)鐘系統(tǒng)可以有兩種方案。
方案一:外部時(shí)鐘方式
方案二:內(nèi)部時(shí)鐘方式
晶振常見(jiàn)有:6MHz、11.0592MHz、12MHz
(其中11.0592MHz 方便對(duì)應(yīng)波特率,誤差小)
3.單片機(jī)時(shí)序
-
時(shí)序的概念
● 時(shí)序是對(duì)象(或引腳、事件、信息)間按照時(shí)間順序組成的序列關(guān)系。
● 時(shí)序可以用狀態(tài)方程、狀態(tài)圖、狀態(tài)表和時(shí)序圖4種方法表示,其中時(shí)序圖最為常用。
● 時(shí)序圖亦稱為波形圖或序列圖,縱坐標(biāo)表示不同對(duì)象的電平,橫坐標(biāo)表示時(shí)間(從左往右為時(shí)間正向軸),通常坐標(biāo)軸可省略。 -
舉例:
(1) 最左邊是引腳的標(biāo)識(shí),表示該圖反映了RS、R/W、E、D0~D7四類引腳的序列關(guān)系。
(2) 交叉線部分表示電平的變化,如高電平和低電平。
(3) 封閉菱形部分表示數(shù)據(jù)有效范圍(偶爾使用文字 Valid Data)。
(4) 水平方向的尺寸線表示持續(xù)時(shí)間的長(zhǎng)度。 -
時(shí)序關(guān)系:
● RS和R/W端首先變?yōu)榈碗娖剑?br> ● 隨后D0~D7端出現(xiàn)有效數(shù)據(jù);
● R/W低電平tsp1之后,E端出現(xiàn)寬度為tpw的正脈沖;
● E脈沖結(jié)束并延時(shí)tHD1后,RS和R/W端恢復(fù)高電平;
● E脈沖結(jié)束并延時(shí)tHD2后,DO~D7端的本次數(shù)據(jù)結(jié)束;
隨后DO~D7端出現(xiàn)新的數(shù)據(jù),但下次E脈沖應(yīng)在tc時(shí)間后才能出現(xiàn)根據(jù)這些信息便可以進(jìn)行相應(yīng)的軟件編程了。 -
時(shí)鐘的度量單位:
時(shí)鐘周期(或節(jié)拍)P、狀態(tài)周期S、機(jī)器周期、指令周期
● 1個(gè)狀態(tài)周期(S)= 2個(gè)節(jié)拍(P)
● 1個(gè)機(jī)器周期 = 6個(gè)狀態(tài)(S)= 12個(gè)節(jié)拍(P)
● 1個(gè)指令周期約為1~4個(gè)機(jī)器周期
機(jī)器周期是CPU完成一個(gè)操作的最短時(shí)間
例如:晶振為11.0592M,則時(shí)鐘周期 = 1/11059200s
(12MHz→1us;6MHz→2us)
四、并行I/O接口
51單片機(jī)有32只I/O引腳,分屬于4個(gè)端口(P0~P3)
- 可作為并行I/0輸出通道(例如,數(shù)碼管顯示器連接通道)
- 可作為并行I/0輸入通道(例如,按鍵/開(kāi)關(guān)連接通道)
- 可作為串行通信通道(例如,雙機(jī)通訊的連接通道)
- 可作為外部設(shè)備的連接通道(例如,存儲(chǔ)器擴(kuò)展通道)
由于工作任務(wù)不同,4個(gè)端口的內(nèi)部結(jié)構(gòu)也不同。
了解4類端口的內(nèi)部結(jié)構(gòu)對(duì)于正確使用這些I/O端口非常重要。
以下按照先易后難的原則進(jìn)行學(xué)習(xí),即P1→P3→P0→P2
1.P1口
1個(gè)位的內(nèi)部結(jié)構(gòu)
(1)輸出信號(hào)
復(fù)位時(shí),鎖存器自動(dòng)置1,默認(rèn)以高電平輸出
(2) 讀引腳
讀引腳置1時(shí),讀入引腳值
??在讀入前在內(nèi)部總線先寫(xiě)1,保證場(chǎng)效應(yīng)管是截止的狀態(tài),使外部引腳不受影響,以免出錯(cuò)。
(3) 讀鎖存器
P1.0 = ~ P1.0; //靠讀鎖存器實(shí)現(xiàn)的
P1口的要點(diǎn):
1、P1口具有通用I/O口方式,可實(shí)現(xiàn)輸出、讀引腳(輸入)和讀鎖存器三種功能;
2、P1口為準(zhǔn)雙向通用口,作為通用輸入口時(shí)應(yīng)先使P1.n→1,作為通用輸出口時(shí)是無(wú)條件的。
2.P3口
1個(gè)位的內(nèi)部結(jié)構(gòu)
P3口的第二功能:
(1)輸出信號(hào)
作為通用I/O口時(shí),第二輸出功能置1。外部引腳電平由內(nèi)部總線
決定。
作為第二功能時(shí),內(nèi)部總線保持為1。外部引腳電平由第二輸出功能端
決定。
(2) 讀引腳
讀引腳置1時(shí),讀入引腳值
??在讀入前在內(nèi)部總線先寫(xiě)1,保證場(chǎng)效應(yīng)管是截止的狀態(tài),使外部引腳不受影響,以免出錯(cuò)。
(3) 讀鎖存器
P1.0 = ~ P1.0; //靠讀鎖存器實(shí)現(xiàn)的
P3口的要點(diǎn):
1、P3口具有通用I/O口方式,可實(shí)現(xiàn)輸出、讀引腳(輸入)和讀鎖存器三種功能;
2、P3口為準(zhǔn)雙向通用口,作為通用輸入口時(shí)應(yīng)先使P3.n→1,作為通用輸出口時(shí)應(yīng)先使第二輸出端→1;
3、P3口具有第二功能方式,可實(shí)現(xiàn)第二輸出和第二輸入兩種功能。
3.P0口
控制端置1時(shí),P0口作為 地址和數(shù)據(jù)總線(低8位)
P0口的要點(diǎn):
1、P0口具有通用IO口方式,可實(shí)現(xiàn)輸出、讀引腳(輸入)和讀鎖存器三種功能;
2、P0口為準(zhǔn)雙向通用口,作為通用輸入口時(shí)應(yīng)先使P0.n→1,作為通用輸出口時(shí)應(yīng)先使第二輸出端→1 ;
3、作為通用I/O口方式時(shí),需要外接上拉電阻;
4、P0口具有地址/數(shù)據(jù)分時(shí)復(fù)用方式,可實(shí)現(xiàn)地址/數(shù)據(jù)輸出、數(shù)據(jù)輸入兩種功能;
5、地址/數(shù)據(jù)分時(shí)復(fù)用方式時(shí)無(wú)需外接上拉電阻;
6、分時(shí)復(fù)用方式的數(shù)據(jù)輸入時(shí)無(wú)需程序?qū)?操作。
4.P2口
控制端置1時(shí),P2口作為 地址和數(shù)據(jù)總線(高8位)
P2口的要點(diǎn):
1、P2口具有通用I/O口方式,可實(shí)現(xiàn)輸出、讀引腳(輸入)和讀鎖存器三種功能;
2、P2口為準(zhǔn)雙向通用口,作為通用輸入口時(shí)應(yīng)先使P2.n→1,作為通用輸出口時(shí)應(yīng)先使控制端→1;
3、作為通用I/O口方式時(shí),無(wú)需外接上拉電阻;
4、P2口具有地址輸出方式,可實(shí)現(xiàn)地址輸出功能。
五、中斷基本概念
1.中斷
中斷系統(tǒng)是為使CPU具有對(duì)外界緊急事件的實(shí)時(shí)處理能力而設(shè)置的。
舉例:用日常生活的中斷現(xiàn)象
中斷是指在突發(fā)事件到來(lái)時(shí)先中止當(dāng)前正在進(jìn)行的工作,轉(zhuǎn)而去處理突發(fā)事件,待處理完成后,再返回到原先被中止的工作處,繼續(xù)進(jìn)行隨后的工作。
51單片機(jī)的中斷:
2.中斷源
中斷源數(shù)量和種類越多,MCU處理突發(fā)事件的能力就越強(qiáng)。
80C51單片機(jī)共有5種中斷源。
外部中斷(2個(gè)) —— 中斷源信號(hào)由外部引腳P3.2和P3.3輸入(低電平觸發(fā)、下降沿觸發(fā)【程序設(shè)定】)
定時(shí)器中斷(2個(gè))—— 定時(shí)的時(shí)候是對(duì)內(nèi)部機(jī)器周期進(jìn)行計(jì)數(shù),不需要外部引腳;計(jì)數(shù)(頻率測(cè)量)的時(shí)候,需要外部引腳P3.4和P3.5【可擴(kuò)展】
串口中斷(1個(gè))—— 引腳P3.0和P3.1
- 中斷事件出現(xiàn)后,系統(tǒng)將調(diào)用與該中斷源相對(duì)應(yīng)的中斷函數(shù)進(jìn)行中斷處理
- 匯編語(yǔ)言中規(guī)定了5個(gè)特殊的ROM單元用于引導(dǎo)中斷程序的調(diào)用,這些單元的地址稱為中斷向量。
- 匯編編程時(shí),需要在此單元處放置一條指向中斷程序入口地址的跳轉(zhuǎn)語(yǔ)句,以便引導(dǎo)中斷程序的執(zhí)行。
- 對(duì)于C51語(yǔ)言,調(diào)用中斷函數(shù)時(shí)不用中斷向量,而要用到與中斷源相應(yīng)的中斷號(hào)。
- 80C51的中斷源、中斷向量及中斷號(hào)的對(duì)應(yīng)關(guān)系如下表所示。
51單片機(jī)的中斷源 | 中斷源名稱 | 中斷向量 | 中斷號(hào) |
---|---|---|---|
P3.2 引腳的電平/脈沖狀態(tài) | INT0  ̄ \overline{\text{INT0}} INT0 | 0003H | 0 |
定時(shí)/計(jì)數(shù)器0的溢出標(biāo)志位狀態(tài) | T0 | 000BH | 1 |
P3.3 引腳的電平/脈沖狀態(tài) | INT1  ̄ \overline{\text{INT1}} INT1 | 0013H | 2 |
定時(shí)/計(jì)數(shù)器1的溢出標(biāo)志位狀態(tài) | T1 | 001BH | 3 |
串口數(shù)據(jù)緩沖器的工作狀態(tài) | TX/RX | 0023H | 4 |
3.中斷的幾個(gè)概念
- 中斷源:中斷管理系統(tǒng)能夠處理的突發(fā)事件;
- 中斷請(qǐng)求:中斷源向CPU提出的處理請(qǐng)求;
- 中斷響應(yīng)過(guò)程:由中斷管理系統(tǒng)處理突發(fā)事件的過(guò)程;
- 中斷函數(shù):針對(duì)中斷源和中斷請(qǐng)求提供的服務(wù)函數(shù);
- 中斷嵌套:在中斷服務(wù)過(guò)程中執(zhí)行更高級(jí)別的中斷服務(wù)。
4.中斷實(shí)現(xiàn)的功能
- 分時(shí)操作
CPU可以使多個(gè)外設(shè)同時(shí)工作,并分時(shí)為各外設(shè)提供服務(wù),從而大大提高了CPU的利用率和輸入/輸出的速度。 - 實(shí)時(shí)處理
當(dāng)計(jì)算機(jī)用于實(shí)時(shí)控制時(shí),請(qǐng)求CPU提供服務(wù)是隨機(jī)發(fā)生的。有了中斷系統(tǒng),CPU就可以立即響應(yīng)并加以處理。 - 故障處理
當(dāng)計(jì)算機(jī)運(yùn)行中出現(xiàn)如電源斷電、存儲(chǔ)器校驗(yàn)出錯(cuò)、運(yùn)算溢出等錯(cuò)誤時(shí),CPU可及時(shí)轉(zhuǎn)去執(zhí)行故障處理程序,減小或消除故障產(chǎn)生的影響。
六、80C51中斷的系統(tǒng)結(jié)構(gòu)
1.中斷系統(tǒng)的結(jié)構(gòu)
80C51系列單片機(jī)的中斷系統(tǒng)有5個(gè)中斷源,兩個(gè)優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套。
中斷信號(hào)分別沿5條水平路徑由左向右進(jìn)行傳送。其中,TCON、SCON、IE、IP是相關(guān)SFR。
IT0、IT1 選1 是下降沿觸發(fā),選0是低電平觸發(fā)【程序】。觸發(fā)后IE0隨之置1【硬件】。
2.中斷請(qǐng)求標(biāo)志
TCON的中斷標(biāo)志
SCON的中斷標(biāo)志
中斷的控制
- EX0(IE.0):外部INT0中斷允許位。
- ET0(IE.1):定時(shí)/計(jì)數(shù)器T0中斷允許位
- EX1(IE.2):外部INT1中斷允許位。
- ET1(IE.3):定時(shí)/計(jì)數(shù)器T1中斷允許位
- ES (IE.4):串行口中斷允許位
- EA (IE.7):CPU 中斷允許(總允許)位
中斷優(yōu)先級(jí)的控制
- PX0 (IP.0):外部中斷INT0中斷優(yōu)先級(jí)設(shè)定位。
- PT0 (IP.1):定時(shí)/計(jì)數(shù)器 T0中斷優(yōu)先級(jí)設(shè)定位。
- PX1 (IP.2):外部中斷INT1中斷優(yōu)先級(jí)設(shè)定位。
- PT1 (IP.3):定時(shí)/計(jì)數(shù)器T1中斷優(yōu)先級(jí)設(shè)定位。
- PS (IP.4):串行口中斷優(yōu)先級(jí)設(shè)定位。
3.中斷的優(yōu)先級(jí)(默認(rèn))
各中斷源響應(yīng)優(yōu)先級(jí) 及 中斷服務(wù)程序入口表
中斷優(yōu)先級(jí)處理有三條原則:
1、CPU同時(shí)接收到幾個(gè)中斷時(shí),首先響應(yīng)優(yōu)先級(jí)別最高的中斷請(qǐng)求。
2、正在進(jìn)行的中斷過(guò)程不能被新的同級(jí)或低優(yōu)先級(jí)的中斷請(qǐng)求所中斷。
3、正在進(jìn)行的低優(yōu)先級(jí)中斷服務(wù),能被高優(yōu)先級(jí)中斷請(qǐng)求所中斷。
??注意:?jiǎn)纹瑱C(jī)復(fù)位時(shí),IP初值為0 —— 默認(rèn)所有中斷源均為低級(jí)中斷。
舉例:
- 80C51單片機(jī)的INT0、INT1引腳分別輸入 壓力超限 及 溫度超限 中斷請(qǐng)求信號(hào),定時(shí)器/計(jì)數(shù)器0作為 定時(shí)檢測(cè) 的實(shí)時(shí)時(shí)鐘,用戶規(guī)定的中斷優(yōu)先權(quán)排隊(duì)次序?yàn)?:
- 壓力超限 → 溫度超限 → 定時(shí)檢測(cè)
- 要求確定IE、IP的內(nèi)容,以實(shí)現(xiàn)上述要求
?答案:
IE:1xx0 0111 (87H)
IP:xxx0 0101 (05H)
七、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)及原理
定時(shí)/計(jì)數(shù)器是單片機(jī)系統(tǒng)一個(gè)重要的部件,其工作方式靈活、編程簡(jiǎn)單、使用方便,可用來(lái)實(shí)現(xiàn)定時(shí)控制、延時(shí)、頻率測(cè)量、脈寬測(cè)量、信號(hào)發(fā)生、信號(hào)檢測(cè)等。此外,定時(shí)/計(jì)數(shù)器還可作為串行通信中波特率信號(hào)發(fā)生器。
1.結(jié)構(gòu)
C/T*位 置0 為定時(shí)功能;置1 為 計(jì)數(shù)功能;
計(jì)滿后TCON中的TF位自動(dòng)置1,表示溢出事件;
- 定時(shí)器:對(duì)片內(nèi)機(jī)器時(shí)鐘(周期方波)進(jìn)行計(jì)數(shù)
- 計(jì)數(shù)器:對(duì)Tx引腳輸入的脈沖進(jìn)行計(jì)數(shù)
2.工作原理
-
80C51內(nèi)部?jī)蓚€(gè)16位的定時(shí)/計(jì)數(shù)器 ?T0?T1
注:單片機(jī)型號(hào)不同,內(nèi)部定時(shí)器個(gè)數(shù)也不同 -
T0由兩個(gè)8位的 SFR TH0 和 TL0 構(gòu)成 T1由兩個(gè)8位的 SFR TH1 和 TL1 構(gòu)成
-
具有定時(shí)或事件計(jì)數(shù)的功能,可用于:1)內(nèi)部定時(shí)控制 ? 2)外部事件計(jì)數(shù)和檢測(cè)等
-
定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是:加一計(jì)數(shù)器
-
每個(gè)定時(shí)/計(jì)數(shù)器都可以由軟件設(shè)置為
定時(shí)工作方式(C/T*)= 0
計(jì)數(shù)工作方式(C/T*)= 1 -
T0和T1受特殊功能寄存器TMOD和TCON控制
-
定時(shí)/計(jì)數(shù)器一旦啟動(dòng)(TRx=1),便可和CPU并行工作,對(duì)提高CPU工作效率和簡(jiǎn)化外圍電路大有益處
3.工作方式之定時(shí)
- 定時(shí)方式時(shí),定時(shí)器計(jì)數(shù)脈沖由51單片機(jī)的片內(nèi)振蕩器經(jīng)12分頻后產(chǎn)生的。
- 每經(jīng)過(guò)一個(gè)機(jī)器周期,定時(shí)器(T0或T1)的數(shù)值加1,直至計(jì)數(shù)滿產(chǎn)生溢出。
4.工作方式之計(jì)數(shù)
- 計(jì)數(shù)方式時(shí),通過(guò)引腳P3.4 (T0)或 P3.5 (T1)對(duì)外部脈沖信號(hào)進(jìn)行計(jì)數(shù)。
- 當(dāng)輸入脈沖信號(hào)產(chǎn)生由1至0的下降沿時(shí),定時(shí)器的值加1,在每個(gè)機(jī)器周期,CPU采樣引腳P3.4 (T0)和P3.5 (T1)的輸入電平。若前一個(gè)機(jī)器周期采樣值為高,下一個(gè)機(jī)器周期采樣值為低,則計(jì)數(shù)器加1。
- 由于檢測(cè)一個(gè)1至0的跳變需要2個(gè)機(jī)器周期,故最高計(jì)數(shù)頻率為振蕩頻率的二十四分一。
- 雖然對(duì)輸入信號(hào)的占空比無(wú)特殊要求,但為了確保某個(gè)電平在變化之前至少被采樣-次,要求電平保持時(shí)間至少是一個(gè)完整的機(jī)器周期。
5.與定時(shí)/計(jì)數(shù)器相關(guān)的SFR
SFR | 含義 |
---|---|
TH (Timer High) | 定時(shí)器/計(jì)數(shù)器0高字節(jié)(8Ch) |
TL0 (Timer Low) | 定時(shí)器/計(jì)數(shù)器0低字節(jié)(8Ah) |
TH1 | 定時(shí)器/計(jì)數(shù)器1高字節(jié)(8Dh) |
TL1 | 定時(shí)器/計(jì)數(shù)器1低字節(jié)(8Bh) |
八、定時(shí)/計(jì)數(shù)器的工作方式
定時(shí)器方式寄存器 TMOD
TMOD——定時(shí)器模式寄存器的位分配(地址0x89、不可位尋址)
有四種工作方式,由M0、M1控制
1.工作方式0
M0、M1為00時(shí),是工作方式0,表示使用 13位的定時(shí)/計(jì)數(shù)器
2.工作方式1
M0、M1為10時(shí),是工作方式1,表示使用16位的定時(shí)/計(jì)數(shù)器
3.工作方式2
M0、M1為01時(shí),是工作方式2,表示使用8位自動(dòng)重裝的定時(shí)/計(jì)數(shù)器
4.工作方式3
M0、M1為11時(shí),是工作方式3,表示使用8位自動(dòng)重裝的定時(shí)/計(jì)數(shù)器工作方式3只適用于定時(shí)/計(jì)數(shù)器T0,是將T0分成兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0,計(jì)數(shù)器T1在工作方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)。
5.定時(shí)器使用方法
初始化完成以下工作:
第一:設(shè)置特殊功能寄存器TMOD,使之工作在需求的狀態(tài)。
第二:設(shè)置計(jì)數(shù)寄存器的初值,精確設(shè)定好定時(shí)時(shí)間。
第三:置ETx=1,允許定時(shí)/計(jì)數(shù)器中斷
第四:置EA=1,CPU開(kāi)中斷
第五:設(shè)置特殊功能寄存器TCON,通過(guò)打開(kāi)TRx來(lái)讓定時(shí)器進(jìn)行工作。
九、串行通信基本概念
單片機(jī)通信是指單片機(jī)與計(jì)算機(jī)或單片機(jī)與單片機(jī)之間的信息交換,通常單片機(jī)與計(jì)算機(jī)之間的通信我們用的較多。
通信有并行通信和串行通信兩種行式。在單片機(jī)系統(tǒng)及現(xiàn)代單片機(jī)測(cè)控系統(tǒng)中,信息的交換多采用串行通信方式。
1.通信形式
(1)并行通信
(2)串行通信
2.通信制式
51單片機(jī)是全雙工制
3.串行通信方式
(1)同步通信
(2)異步通信
異步串行通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過(guò)程。為使雙方收、發(fā)協(xié)調(diào),要求發(fā)送和接收設(shè)備的時(shí)鐘盡可能一致。異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸。
異步通信一幀字符信息由四部分組成:起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位。有的字符信息也有帶空閑位形式,即在字符之間有空閑字符。
十、串行口結(jié)構(gòu)及工作原理
51單片機(jī)有一個(gè)可編程的全雙工的異步串行通信接口(具有通用異步收發(fā)器的全部功能,UART)能同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送和接收,也可作為同步移位寄存器使用。
1.傳輸速率
- 常用串口波特率:300、600、1200、2400、4800、9600、19200…115200;
- 波特率:就是發(fā)送一位數(shù)據(jù)的速率,每秒傳送的位數(shù)稱為波特率,即發(fā)送一個(gè)數(shù)據(jù)的持續(xù)時(shí)間=1/baud;以此衡量傳送的速度
- 1波特 = 1位/秒,單位是bps(位/秒)
- 如每秒傳送240個(gè)字符,而每個(gè)字符格式包含10位(1個(gè)起始位、1個(gè)停止位、8個(gè)數(shù)據(jù)位),這時(shí)的波特率為10位X240個(gè)/秒=
2400bps。
2.通信協(xié)議
基本的通信約定:
為了保證串行通信的可靠接收,通信雙方在字符幀格式,波特率,電平格式,校驗(yàn)方式等方面采用統(tǒng)一的標(biāo)準(zhǔn)即雙方需要共同遵守的通信協(xié)議。
軟件通信約定:
確定收發(fā)雙方串口傳送的數(shù)據(jù)的具體的含義。
1)用戶自定義通信協(xié)議
2)標(biāo)準(zhǔn)的通信協(xié)議
3.通信校驗(yàn)
-
奇偶校驗(yàn)
在發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)位尾隨的奇偶校驗(yàn)位(1或0)。
奇校驗(yàn)時(shí),數(shù)據(jù)中“1"的個(gè)數(shù)與校驗(yàn)位"1"的個(gè)數(shù)之和應(yīng)為奇數(shù);偶校驗(yàn)時(shí),數(shù)據(jù)中"1"的個(gè)數(shù)與校驗(yàn)位"1"的個(gè)數(shù)之和應(yīng)為偶數(shù)。接收字符時(shí),對(duì)"1"的個(gè)數(shù)進(jìn)行校驗(yàn),若發(fā)現(xiàn)不一致,說(shuō)明傳輸數(shù)據(jù)過(guò)程中出現(xiàn)了差錯(cuò)。 -
和校驗(yàn)
和校驗(yàn)是發(fā)送方將所有發(fā)送數(shù)據(jù)塊求和(或各字節(jié)異或),產(chǎn)生一個(gè)字節(jié)的校驗(yàn)字符(校驗(yàn)和)附加到數(shù)據(jù)塊末尾。
接收端接收數(shù)據(jù)時(shí)同時(shí)對(duì)數(shù)據(jù)塊(除校驗(yàn)字節(jié)外)求和(或各字節(jié)異或),將所得的結(jié)果與發(fā)送方的"校驗(yàn)和"進(jìn)行比較,若相符則正確;否則,認(rèn)為數(shù)據(jù)傳送過(guò)程中出錯(cuò)。 -
CRC校驗(yàn)(循環(huán)冗余校驗(yàn))
CRC校驗(yàn)通過(guò)某種數(shù)學(xué)運(yùn)算實(shí)現(xiàn)有效信息與校驗(yàn)位之間的循環(huán)校驗(yàn),這種校驗(yàn)方法糾錯(cuò)能力強(qiáng).廣泛應(yīng)用于通信中。
附 CRC校驗(yàn) 小工具 :http://www.ip33.com/crc.html
4.51單片機(jī)串行口結(jié)構(gòu)
51單片機(jī)的串行口主要由兩個(gè)獨(dú)立的串行數(shù)據(jù)緩沖寄存器SBUF(一個(gè)發(fā)送緩沖寄存器,一個(gè)接收緩沖寄存器)和發(fā)送控制器、接收控制器、輸入移位寄存器及若干控制門電路組成。
5.UART的四種模式
模式0:為同步移位寄存器的輸入/輸出方式,主要用于擴(kuò)展并行輸入或輸出口。
模式1:10位數(shù)據(jù)的異步通信,1位起始位0,8位數(shù)據(jù)位(一個(gè)字節(jié)),1位停止位1。其傳輸波特率是可變的。對(duì)于51單片機(jī),波特率由定時(shí)器1(T1)的溢出率決定。通常我們?cè)谧鰡纹瑱C(jī)與單片機(jī)串口通信,單片機(jī)與計(jì)算機(jī)串口通信時(shí),基本都選擇方式1。
模式2和3:為11位數(shù)據(jù)的異步通信。原理和模式1一樣,只是添加了一位奇偶校驗(yàn)位(防止通信出錯(cuò))。
SCON
PCON
SCON含義如下表:
名稱 | 狀態(tài) | 作用 |
SM0 SM1-工作方式選擇位 | 00 | 方式0:同步移位寄存器方式(通常用于擴(kuò)展I/O口) |
01 | 方式1:10位異步收發(fā)(8位數(shù)據(jù)),波特率可變(由定時(shí)器1溢出率控制) | |
10 | 方式2:11位異步收發(fā)(9位數(shù)據(jù)),波特率固定 | |
11 | 方式3:11位異步收發(fā)(9位數(shù)據(jù)),波特率可變(由定時(shí)器1溢出率控制) | |
SM2 - 多機(jī)通信控制位 | 0 | 不論收到的RB8是0還是1均可以使收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI(此時(shí)RB8不具有控制RI激活功能) |
1 | 可以利用收到的RB8來(lái)控制是否激活RI(RB8=0時(shí)不激活RI,收到信息丟棄;RB8=1時(shí)收到的信息進(jìn)入SB詐并激活RI,進(jìn)而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走) | |
REN - 允許串行接收位 | 0 | 禁止串行口接收數(shù)據(jù) |
1 | 允許串行口接收數(shù)據(jù) | |
TB8 - 方式2,3中發(fā)送數(shù)據(jù)的第9位 | \ | 在方式2或方式3中,是發(fā)送數(shù)據(jù)的第9位,可以用軟件規(guī)定其作用??梢杂米鰯?shù)據(jù)的奇偶校驗(yàn)位?;蛟诙鄼C(jī)通信中,作為地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式0和1中,該位未使用。 |
RB8 - 方式2,3中發(fā)送數(shù)據(jù)的第9位 | \ | 在方式2或方式3中,是接收數(shù)據(jù)的第9位??勺鳛槠媾夹r?yàn)位或地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式1時(shí),若SM2=0,則RB8是接收到的停止位。 |
TI - 發(fā)送中斷標(biāo)志位 | \ | 在方式0時(shí),當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí),或在其他方式,串行發(fā)送停止位的開(kāi)始時(shí),內(nèi)部硬件使其置1,向CPU發(fā)出中斷申請(qǐng),在中斷服務(wù)程序中,必須用軟件將其清0,取消中斷申請(qǐng)。 |
RI - 接收中斷標(biāo)志位 | \ | 在方式0時(shí),當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時(shí),或在其他方式,串行接收停止位的中間時(shí),內(nèi)部硬件使其置1,向CPU發(fā)出中斷申請(qǐng),在中斷服務(wù)程序中,必須用軟件將其清0,取消中斷申請(qǐng)。 |
??注意:TI 、RI必須手動(dòng)軟件清零
6.波特率計(jì)算方式
- 方式0的波特率 = fosc / 12
- 方式1的波特率 = (2SMOD / 32) x (T1溢出率)
- 方式2的波特率 = (2SMOD /64) x fosc
- 方式3的波特率 = (2SMOD /32) x (T1溢出率)
式中, fosc為系統(tǒng)晶振頻率,通常為12MHz或11.0592MHz,SMOD是PCON寄存器的最高位。
T1溢出率是定時(shí)器T1溢出的頻率,只要算出T1定時(shí)器每溢出一次所需要的時(shí)間T,那么T的倒數(shù)1/T就是它的溢出率。
如:設(shè)定時(shí)器T1每50ms溢出一次,那么其溢出率 t 就是20Hz。則 初值 = 2N - t / T機(jī)器周期
附:常用波特率初值表
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-780846.html
- 常用的波特率通常按規(guī)范取為1200、2400、4800、9600…若采用12MHz或6MHz計(jì)算出的T1的定時(shí)初值將不是一個(gè)整數(shù),這樣通信時(shí)便會(huì)產(chǎn)生積累誤差,進(jìn)而產(chǎn)生波特率誤差,影響串行通信的同步性能。
- 解決的方法只有調(diào)整單片機(jī)的時(shí)鐘頻率,通常采用11.0592MHz晶振。因?yàn)橛盟軌蚍浅?zhǔn)確的計(jì)算出T1的定時(shí)初值。
總結(jié)
以上就是本文要講的內(nèi)容。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-780846.html
到了這里,關(guān)于單片機(jī) | 51單片機(jī)原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!