版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目1鍵盤(pán)/顯示系統(tǒng)的設(shè)計(jì)
任務(wù)一單片機(jī)最小系統(tǒng)任務(wù)二LED顯示器的設(shè)計(jì)任務(wù)三按鈕開(kāi)關(guān)的使用任務(wù)四數(shù)碼管顯示器的設(shè)計(jì)任務(wù)五點(diǎn)陣顯示器的設(shè)計(jì)任務(wù)六專用鍵盤(pán)顯示接口習(xí)題與思考題
項(xiàng)目1鍵盤(pán)/顯示系統(tǒng)的設(shè)計(jì)
任務(wù)一單片機(jī)最小系統(tǒng)
任務(wù)要求
【任務(wù)內(nèi)容】
組裝一個(gè)AT89C51單片機(jī)的最小系統(tǒng),外接8個(gè)發(fā)光二極管,要求最小系統(tǒng)一上電,8個(gè)發(fā)光二極管即分成兩組,一組點(diǎn)亮,一組熄滅。
【知識(shí)要求】
了解AT89C51單片機(jī)的結(jié)構(gòu)與引腳;掌握單片機(jī)最小系統(tǒng)電路的設(shè)計(jì)。
相關(guān)知識(shí)
知識(shí)1單片機(jī)概述
1.基本概念
(1)微處理器MP(MicroProcessor)。微處理器就是傳統(tǒng)計(jì)算機(jī)的CPU,是集成在一塊芯片上的具有運(yùn)算和邏輯控制功能的中央處理器,簡(jiǎn)稱MP,它是構(gòu)成微型計(jì)算機(jī)系統(tǒng)的核心部件。
(2)微型計(jì)算機(jī)MC(MicroComputer)。以微處理器為核心,再配上存儲(chǔ)器、I/O(Input/Output)接口和中斷系統(tǒng)等構(gòu)成的整體,稱為微型計(jì)算機(jī)。
(3)微型計(jì)算機(jī)系統(tǒng)MCS(MicroComputerSystem)。這是指以微型計(jì)算機(jī)為核心,配上外圍設(shè)備、電源和軟件等,構(gòu)成能獨(dú)立工作的完整計(jì)算機(jī)系統(tǒng)。
(4)單片機(jī)(SingleChipMicrocomputer)。單片機(jī)是將微處理器、存儲(chǔ)器、I/O接口和中斷系統(tǒng)集成在同一塊芯片上,具有完整功能的微型計(jì)算機(jī)。
2.單片機(jī)的發(fā)展
(1)第一代單片機(jī)(1974~1976年):這是單片機(jī)發(fā)展的起步階段。這個(gè)時(shí)期生產(chǎn)的單片機(jī)的特點(diǎn)是制造工藝落后,集成度較低,而且采用雙片形式。典型的代表產(chǎn)品有仙童公司的F8系列機(jī)和Intel公司的3870系列機(jī)。
(2)第二代單片機(jī)(1976~1978年):這一階段生產(chǎn)的單片機(jī)已是單塊芯片,但其性能低、品種少、尋址范圍有
限、應(yīng)用范圍不廣。典型的代表產(chǎn)品是Intel公司的MCS-48系列機(jī)。
(3)第三代單片機(jī)(1979~1982年):這是8位單片機(jī)的成熟階段。這一代單片機(jī)和前兩代相比,不僅存儲(chǔ)容量大、尋址范圍廣,而且中斷源、并行I/O口、定時(shí)器/計(jì)數(shù)器的個(gè)數(shù)都有了不同程度的增加,同時(shí)它還新集成了全雙工串行通信接口電路。在指令系統(tǒng)方面普遍增設(shè)了乘除指令和比較指令。這一時(shí)期生產(chǎn)的單片機(jī)品種齊全,可以滿足各方面的需要。代表產(chǎn)品有Intel公司的MCS-51系列機(jī)、Motorola公司的MC6801系列機(jī)等。
(4)第四代單片機(jī)(1983年以后):這一階段8位單片機(jī)向更高性能發(fā)展,同時(shí)出現(xiàn)了工藝先進(jìn)、集成度高、內(nèi)部功能更強(qiáng)和運(yùn)算速度更快的16位單片機(jī),它允許用戶采用面向工業(yè)控制的專用語(yǔ)言,如C語(yǔ)言等。代表產(chǎn)品有Intel公司的MCS-96系列機(jī)和NC公司的HPC16040系列機(jī)等。
3.ATMEL89系列單片機(jī)簡(jiǎn)介
ATMEL89系列(以下簡(jiǎn)稱AT89)單片機(jī)是美國(guó)ATMEL公司生產(chǎn)的8位高性能單片機(jī),其主要技術(shù)優(yōu)勢(shì)是內(nèi)部含有可編程Flash存儲(chǔ)器,用戶可以很方便地進(jìn)行程序的擦除和寫(xiě)入操作。
AT89系列單片機(jī)與工業(yè)標(biāo)準(zhǔn)MCS-51系列單片機(jī)的指令系統(tǒng)和引腳是兼容的,因而可替代MCS-51系列單片機(jī)使用。AT89系列單片機(jī)可分為標(biāo)準(zhǔn)型、低檔型和高檔型三種類型。表1-1列舉了AT89系列單片機(jī)的概況。知識(shí)2計(jì)算機(jī)中的數(shù)
1.常用進(jìn)制
二進(jìn)制計(jì)數(shù)的特點(diǎn)如下:
(1)狀態(tài)簡(jiǎn)單,凡是具有兩個(gè)狀態(tài)的元件都可用來(lái)表示二進(jìn)制數(shù)的0和1,容易實(shí)現(xiàn)。
(2)運(yùn)算規(guī)則簡(jiǎn)單,大大地簡(jiǎn)化了計(jì)算機(jī)中的運(yùn)算線路。
(3)可用布爾代數(shù)這一數(shù)學(xué)工具對(duì)計(jì)算機(jī)電路進(jìn)行設(shè)計(jì)和分析,便于對(duì)計(jì)算機(jī)結(jié)構(gòu)的優(yōu)化。十進(jìn)制數(shù)、十六進(jìn)制數(shù)、二進(jìn)制數(shù)之間的對(duì)應(yīng)關(guān)系如表1-2所示。
2.常用進(jìn)制之間的轉(zhuǎn)換
1)二進(jìn)制數(shù)與十進(jìn)制數(shù)之間的轉(zhuǎn)換
(1)二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)。要將二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),需將二進(jìn)制數(shù)按權(quán)展開(kāi)相加即可。例如:
(2)方法一:可用“除2取余”法,即將十進(jìn)制整數(shù)反復(fù)除以2,直至商等于0為止。然后將所得的一系列余數(shù)按逆序排列即為所求的二進(jìn)制整數(shù)。
[例1.1]
(38)10=(100110)2方法二:可用“減冪”法,即將十進(jìn)制整數(shù)不斷減去2的最高次冪,直至差值等于0為止。
[例1.2]
(38)10=(100110)2十進(jìn)制小數(shù)的轉(zhuǎn)換可用“乘2取整”法,即將十進(jìn)制小數(shù)反復(fù)乘以2,直至所剩小數(shù)部分等于0為止,然后將每次所得整數(shù)按順序排列即為所求的二進(jìn)制小數(shù)。如果所求的結(jié)果永不為0,可根據(jù)精度要求用“0舍1入”的方法進(jìn)行取舍。
[例1.3](0.625)10=(0.101)2
2)二進(jìn)制數(shù)與十六進(jìn)制數(shù)之間的轉(zhuǎn)換
(1)二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)。由于數(shù)16與數(shù)2之間的關(guān)系為24=16,因此4位二進(jìn)制數(shù)對(duì)應(yīng)一位十六進(jìn)制數(shù)。根據(jù)這個(gè)關(guān)系,對(duì)于二進(jìn)制數(shù)的整數(shù)部分的轉(zhuǎn)換,只要從小數(shù)點(diǎn)開(kāi)始依次向左每4位為一節(jié),最后不足4位的前面補(bǔ)0;小數(shù)部分由小數(shù)點(diǎn)向右,每4位為一節(jié),最后不足4位的后面補(bǔ)0。然后把每4位二進(jìn)制數(shù)用相應(yīng)的一位十六進(jìn)制數(shù)代替,即轉(zhuǎn)換成十六進(jìn)制數(shù)。
[例1.4]
(10001111011011.111010)2=(23DB.E8)16
(2)十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)。不論是十六進(jìn)制的整數(shù)或小數(shù),只要把每一位十六進(jìn)制的數(shù)用相應(yīng)的4位二進(jìn)制數(shù)代替,就可以轉(zhuǎn)換成二進(jìn)制數(shù)。
[例1.5](5BD.6A)16=(10110111101.0110101)2
3.二進(jìn)制運(yùn)算規(guī)則
1)算術(shù)運(yùn)算規(guī)則
加法規(guī)則:
(1)?0+0=0
(2)?1+0=0+1=1
(3)?1+1?=10(向高位進(jìn)位1)
減法規(guī)則:
(1)?0-0=0
(2)?1-1=0
(3)?1-0=1
(4)?0-1=1(向高位有借位)乘法規(guī)則:
(1)?0×0=0
(2)?0×1=0
(3)?1×0=0
(4)?1×1=1
二進(jìn)制的乘法運(yùn)算是十分簡(jiǎn)單的,只有當(dāng)兩個(gè)1相乘時(shí)積才為1,否則積為0。
2)邏輯運(yùn)算法則
“或”運(yùn)算(邏輯加),運(yùn)算符為“+”或“∨”:
(1)?0∨0?=?0
(2)?1∨0?=?1
(3)?0∨1?=?1
(4)?1∨1?=?1
按位加是不考慮進(jìn)位的加法運(yùn)算。
“與”運(yùn)算(邏輯乘),運(yùn)算符為“·?”或“∧”:
4.計(jì)算機(jī)中數(shù)的表示
1)位(bit)和字節(jié)(Byte)
“位”是計(jì)算機(jī)能夠表示的最小的數(shù)據(jù)單位。位用b表示。字節(jié)由8個(gè)二進(jìn)制位組成,通常一個(gè)存儲(chǔ)單元中存放著1個(gè)字節(jié)的數(shù)據(jù)。字節(jié)用B表示。
2)字(Word)和字長(zhǎng)
“字”是微處理器內(nèi)部進(jìn)行數(shù)據(jù)處理的基本單位,通常它也是微處理器與存儲(chǔ)器之間和輸入/輸出電路之間傳送數(shù)據(jù)的基本單位。字用W表示。“字長(zhǎng)”是指一個(gè)字所包含的二進(jìn)制數(shù)的位數(shù),它是微處理器的重要指標(biāo)之一,通常用數(shù)據(jù)總線的位數(shù)來(lái)決定微處理器的字長(zhǎng)。
8位微處理器的字長(zhǎng)是8位,每一個(gè)字由一個(gè)字節(jié)組成,如圖1-1(a)所示,在字節(jié)中,最左邊的位(D7)為最高位(MSB),最右邊的位(D0)為最低位(LSB)。16位微處理器的字長(zhǎng)是16位,每一個(gè)字由兩個(gè)字節(jié)組成,如圖1-1(b)所示,左邊的字節(jié)是高位字節(jié),最左邊的位為最高位;右邊的字節(jié)是低位字節(jié),最右邊的位為最低位。圖1-1字和字節(jié)
3)機(jī)器數(shù)與真值
在計(jì)算機(jī)中,不帶正、負(fù)號(hào)的數(shù)稱為無(wú)符號(hào)數(shù)。它將字長(zhǎng)的所有位均用于表示數(shù)值位。一個(gè)n位字長(zhǎng)的數(shù)據(jù)可用來(lái)表示2n個(gè)正整數(shù)。例如,一個(gè)8位數(shù)據(jù)可表示的數(shù)值范圍為00000000B~11111111B,即0~255,共256(28)個(gè)數(shù)。
在計(jì)算機(jī)中,數(shù)的正、負(fù)號(hào)與數(shù)一起存放在寄存器或內(nèi)存單元中,因此數(shù)的符號(hào)在機(jī)器中已“數(shù)碼化”了,通常規(guī)定在數(shù)的前面增設(shè)一位符號(hào)位,并規(guī)定正號(hào)用“0”表示,負(fù)號(hào)用“1”表示。若以8位字長(zhǎng)的存數(shù)單元為例,設(shè)有數(shù):N1=+1010101,N2=-1010101。N1和N2在計(jì)算機(jī)中的表示形式為:N1=01010101,十進(jìn)制數(shù)為+85;N2=11010101,十進(jìn)制數(shù)為-85,而不是213。
在計(jì)算機(jī)中,把存放在寄存器、存儲(chǔ)器或數(shù)據(jù)端口中的數(shù)稱為機(jī)器數(shù)。機(jī)器數(shù)所對(duì)應(yīng)的值稱為真值。機(jī)器數(shù)的真值到底是多少,取決于機(jī)器數(shù)所對(duì)應(yīng)的是無(wú)符號(hào)數(shù)還是有符號(hào)數(shù)以及所對(duì)應(yīng)的是什么碼制表示的數(shù)。知識(shí)3AT89C51單片機(jī)的結(jié)構(gòu)
AT89C51單片機(jī)的內(nèi)部結(jié)構(gòu)框圖如圖1-2所示。圖1-2AT89C51內(nèi)部結(jié)構(gòu)框圖
AT89C51內(nèi)部包含了作為微型計(jì)算機(jī)所必需的功能部件,各功能部件通過(guò)片內(nèi)單一總線連成一個(gè)整體,集成在一塊芯片上。其中CPU系統(tǒng)與CPU外圍單元組成單片機(jī)最小系統(tǒng),最小系統(tǒng)與各功能單元構(gòu)成單片機(jī)的基本結(jié)構(gòu),在基本結(jié)構(gòu)的基礎(chǔ)上還可進(jìn)行外部功能的擴(kuò)展,形成各種不同的單片機(jī)應(yīng)用系統(tǒng)。
1.中央處理器
1)運(yùn)算器
運(yùn)算器用來(lái)完成算術(shù)運(yùn)算、邏輯運(yùn)算和位運(yùn)算功能,它是AT89C51內(nèi)部處理各種信息的主要部件。運(yùn)算器的組成框圖如圖1-3所示,主要由算術(shù)邏輯單元(ALU)、累加器(ACC)、暫存寄存器(TEMP1、TEMP2)、寄存器B和狀態(tài)寄存器(PSW)組成。圖1-3運(yùn)算器組成框圖
(1)算術(shù)邏輯單元(ALU)。AT89C51中的ALU是運(yùn)算器的核心部件,由加法器和一個(gè)布爾處理器組成。它不僅可以對(duì)8位二進(jìn)制變量進(jìn)行與、或、非、異或等邏輯運(yùn)算以及加、減、乘、除等四則運(yùn)算,還具有運(yùn)算結(jié)果判斷、數(shù)據(jù)傳送、程序轉(zhuǎn)移等功能。
從圖1-3中可以看出,加法器有兩個(gè)輸入:暫存器TEMP1和TEMP2。加法器有兩個(gè)輸出:一個(gè)是累加器ACC,經(jīng)過(guò)運(yùn)算,結(jié)果又通過(guò)內(nèi)部總線送回到累加器中;另一個(gè)是狀態(tài)寄存器PSW。布爾處理器是運(yùn)算器的重要組成部分,由獨(dú)立的邏輯電路來(lái)處理位操作。它有自己的累加器C、自己的位尋址RAM和I/O空間,還有相應(yīng)的指令系統(tǒng),給用戶提供豐富的位操作功能。
布爾處理器以進(jìn)位位C作為累加器,可以對(duì)可尋址位執(zhí)行置位、復(fù)位、取反、轉(zhuǎn)移以及位傳送等位操作。進(jìn)位標(biāo)志位與其他可尋址位之間完成邏輯與、或操作后,結(jié)果送回
C中。
(2)暫存寄存器(TEMP1、TEMP2)。TEMP1和TEMP2是ALU的兩個(gè)輸入端口,用來(lái)存放參與算術(shù)運(yùn)算和邏輯運(yùn)算的操作數(shù),它對(duì)用戶不開(kāi)放。
(3)累加器(ACC)。ACC是CPU使用最頻繁的一個(gè)寄存器,在指令系統(tǒng)中用助記符A表示。
(4)狀態(tài)寄存器(PSW)。PSW是一個(gè)8位標(biāo)志寄存器,用來(lái)存放ALU操作結(jié)果的有關(guān)狀態(tài)。PSW中CY、AC、OV、P各位狀態(tài)通常是在操作過(guò)程中自動(dòng)形成的,而F0、RS0、RS1則可以由用戶根據(jù)需要由位操作指令加以改變。
PSW各位定義如表1-3所示。進(jìn)位標(biāo)志位CY:表示累加器A在加減運(yùn)算過(guò)程中其最高位D7有無(wú)進(jìn)位或借位。若有,則CY=1;若沒(méi)有,則CY=0。CPU在進(jìn)行移位操作時(shí)也會(huì)影響這個(gè)標(biāo)志位。在位操作中,CY作為累加器C使用。輔助進(jìn)位位AC:表示累加器A在加減運(yùn)算時(shí)低4位(D3)有無(wú)向高4位(D4)進(jìn)位或借位。若有,則AC=1;若沒(méi)有,則AC=0。AC通常在二/十進(jìn)制調(diào)整時(shí)使用。
溢出標(biāo)志位OV:當(dāng)執(zhí)行算術(shù)指令時(shí),由硬件自動(dòng)置位或清零,表示累加器A的溢出狀態(tài)。進(jìn)行補(bǔ)碼運(yùn)算時(shí),當(dāng)運(yùn)算結(jié)果超出累加器A能表示的數(shù)值范圍時(shí),由硬件自動(dòng)置1,否則等于0。奇偶標(biāo)志位P:每條指令執(zhí)行完畢后,硬件根據(jù)A中的內(nèi)容自動(dòng)置位或復(fù)位,用于指示運(yùn)算結(jié)果中1的個(gè)數(shù)的奇偶性。若累加器A中1的個(gè)數(shù)為奇數(shù),則P=1;若1的個(gè)數(shù)為偶數(shù),則P=0。該標(biāo)志位常用于串行通信的數(shù)據(jù)校驗(yàn)。
寄存器選擇位RS1、RS0:AT89C51共有4組,每組8個(gè)工作寄存器R0~R7,編程時(shí)用于存放數(shù)據(jù)或地址。每組工作寄存器在內(nèi)部RAM中的物理地址不同。
RS1和RS0的4種狀態(tài)組合就是用來(lái)確定4組工作寄存器的實(shí)際物理地址的。單片機(jī)上電復(fù)位后,RS1、RS0的狀態(tài)為00。用戶可通過(guò)位操作指令或數(shù)據(jù)傳送指令改變RS1、RS0的狀態(tài),選擇當(dāng)前工作的工作寄存器組。
用戶標(biāo)志位F0:用戶定義的一個(gè)狀態(tài)標(biāo)志位,根據(jù)需要可以用軟件來(lái)使它置位或清除,供測(cè)試使用。
PSW1:未定義。用戶可以通過(guò)位地址D1H或位標(biāo)志PSW1使用該位。
[例1.6]試分析執(zhí)行加法指令,完成0FFH與01H相加后PSW各位的狀態(tài)。
MOVA,#0FFH
ADDA,#01H
執(zhí)行上述加法指令時(shí)的人工算式是:
11111111B
+ 00000001B
?
100000000B
(5)寄存器B。寄存器B用于乘除法運(yùn)算。乘法運(yùn)算時(shí),兩個(gè)乘數(shù)分別來(lái)自A、B,運(yùn)算結(jié)果的低8位存于A,高8位存于B。除法運(yùn)算中被除數(shù)來(lái)自A,除數(shù)來(lái)自B,結(jié)果商存于A,余數(shù)存于B。
其他情況下,寄存器B作為通用寄存器或普通RAM單元使用。
2)控制器
控制器是單片機(jī)內(nèi)部按一定時(shí)序協(xié)調(diào)工作的控制核心,是分析和執(zhí)行指令的部件??刂破髦饕沙绦蛴?jì)數(shù)器PC、指令寄存器IR、指令譯碼器ID和定時(shí)控制邏輯電路、數(shù)據(jù)指針DPTR、堆棧指針SP等構(gòu)成。它用于控制指令的讀入、譯碼和執(zhí)行,并對(duì)指令執(zhí)行的過(guò)程進(jìn)行定時(shí)和邏輯控制。
(1)程序計(jì)數(shù)器PC。PC是控制器中最基本的寄存器,專門(mén)用于存放下一條將要從程序存儲(chǔ)器中取出指令代碼的16位地址,可對(duì)64KB的存儲(chǔ)空間進(jìn)行尋址。CPU就是根據(jù)PC中的地址到ROM中去讀取程序指令碼和數(shù)據(jù),并送給指令寄存器IR進(jìn)行分析。每取出現(xiàn)行指令的一個(gè)字節(jié)后,PC就自動(dòng)加1,即(PC)+1→PC,指向下一個(gè)要讀取字節(jié)的地址。所以,待執(zhí)行程序的機(jī)器碼,必須在程序執(zhí)行前預(yù)先一條條地按順序存放到程序存儲(chǔ)器ROM中,并使PC中的初始地址為程序第一條指令的內(nèi)存地址。改變PC值就可以改變程序執(zhí)行的流程。
當(dāng)遇到轉(zhuǎn)移指令時(shí),PC內(nèi)容會(huì)被指定的地址取代,實(shí)現(xiàn)程序轉(zhuǎn)移。
當(dāng)執(zhí)行子程序調(diào)用或進(jìn)入中斷服務(wù)程序時(shí),PC的內(nèi)容會(huì)被置入這些程序的入口地址。同時(shí),PC的原值被壓入堆棧保存,待子程序或中斷服務(wù)程序執(zhí)行完畢后被彈出,實(shí)現(xiàn)程序返回。
(2)數(shù)據(jù)指針DPTR。DPTR是一個(gè)16位的特殊功能寄存器,用于片外數(shù)據(jù)存儲(chǔ)器的地址寄存器,可以對(duì)64KB的外部數(shù)據(jù)存儲(chǔ)器和I/O端口進(jìn)行間接尋址。
DPTR既可作為一個(gè)16位寄存器使用,也可作為兩個(gè)獨(dú)立的8位寄存器使用。高位字節(jié)寄存器為DPH,低位字節(jié)寄存器為DPL。
(3)指令寄存器IR和指令譯碼器ID。IR用于存放CPU根據(jù)PC地址從ROM中讀出的指令操作碼。ID用于分析指令操作。指令操作碼經(jīng)譯碼后產(chǎn)生相應(yīng)的電平信號(hào),送入定時(shí)控制邏輯電路,并由定時(shí)控制邏輯電路產(chǎn)生相應(yīng)的控制信號(hào),完成指令的執(zhí)行。
(4)定時(shí)控制邏輯電路。其中的定時(shí)部件用來(lái)產(chǎn)生脈沖序列和多種節(jié)拍脈沖;控制邏輯根據(jù)指令譯碼器產(chǎn)生的操作信號(hào),按一定時(shí)間順序發(fā)出一系列節(jié)拍脈沖控制信號(hào)來(lái)完成指令所規(guī)定的全部操作。
2.存儲(chǔ)器
單片機(jī)的存儲(chǔ)器分為程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。
程序存儲(chǔ)器主要用于存放編好的程序和表格常數(shù)。程序在開(kāi)發(fā)調(diào)試成功之后就要永久地存儲(chǔ)在程序存儲(chǔ)器中,在斷電情況下也不會(huì)丟失。程序存儲(chǔ)器在操作運(yùn)行的過(guò)程中是可讀不可寫(xiě)的,因此又被稱為只讀存儲(chǔ)器ROM。數(shù)據(jù)存儲(chǔ)器用于存放運(yùn)算的中間結(jié)果,進(jìn)行數(shù)據(jù)暫存及數(shù)據(jù)緩沖等,在程序運(yùn)行期間既可讀也可寫(xiě),用RAM實(shí)現(xiàn)。
AT89C51單片機(jī)內(nèi)部集成了256B的RAM。其中,低128B為數(shù)據(jù)RAM區(qū),用來(lái)存放過(guò)渡性的數(shù)據(jù)和地址;高128B為專用寄存器組,主要用來(lái)指示當(dāng)前要執(zhí)行指令的內(nèi)存地址、存放特定的操作數(shù)、指示指令運(yùn)行的狀態(tài)等。當(dāng)片內(nèi)的ROM和RAM存儲(chǔ)器不夠使用時(shí),可分別擴(kuò)展為64KB外部RAM存儲(chǔ)器和64KB外部程序存儲(chǔ)器。它們的邏輯空間是分開(kāi)的,并有各自的尋址機(jī)構(gòu)和尋址方式。
3.I/O端口
AT89C51單片機(jī)對(duì)外部電路進(jìn)行控制或交換信息都是通過(guò)I/O端口進(jìn)行的。單片機(jī)的I/O端口分為并行I/O端口和串行I/O端口。
1)并行I/O端口
AT89C51有4個(gè)8位并行I/O端口,分別命名為P0口、P1口、P2口和P3口,它們都是8位準(zhǔn)雙向口,每次可以并行輸入或輸出8位二進(jìn)制信息。也可以按位操作進(jìn)行輸入或輸出信息。每個(gè)并行I/O端口內(nèi)部都有一個(gè)8位數(shù)據(jù)輸出鎖存器(即特殊功能寄存器SFR中的P0~P3)、一個(gè)輸出驅(qū)動(dòng)器和一個(gè)8位輸入緩沖器。因此,CPU進(jìn)行數(shù)據(jù)輸出時(shí)可以將數(shù)據(jù)鎖存,進(jìn)行數(shù)據(jù)輸入時(shí)可以得到緩沖。
2)串行I/O端口
AT89C51有一個(gè)全雙工的可編程串行I/O端口,它利用了P3口的第二功能,即將P3.1引腳作為串行數(shù)據(jù)的發(fā)送線TXD,將P3.0引腳作為串行數(shù)據(jù)的接收線RXD。在串行口控制寄存器SCON、電源及波特率選擇寄存器PCON和串行數(shù)據(jù)緩沖器(它們都是特殊功能寄存器)的控制下,每次只能發(fā)送或接收一位二進(jìn)制信息。這樣,CPU內(nèi)部的8位并行二進(jìn)制數(shù)必須變成一位一位的串行數(shù)據(jù)才能通過(guò)TXD發(fā)送出去。同理,從RXD接收的數(shù)據(jù)也是一位一位的串行數(shù)據(jù),必須轉(zhuǎn)化為并行數(shù)據(jù)后才能供CPU使用。
4.定時(shí)器/計(jì)數(shù)器
AT89C51內(nèi)部有兩個(gè)16位可編程定時(shí)器/計(jì)數(shù)器,簡(jiǎn)稱定時(shí)器0(T0)和定時(shí)器1(T1),T0和T1分別由兩個(gè)8位寄存器構(gòu)成,其中T0由TH0(高8位)和TL0(低8位)構(gòu)成,T1由TH1(高8位)和TL1(低8位)構(gòu)成。TH0、TL0、TH1、TL1都是SFR中的特殊功能寄存器(見(jiàn)表1-11)。
5.中斷系統(tǒng)
單片機(jī)中的中斷是指CPU暫停正在執(zhí)行的原程序轉(zhuǎn)而為中斷源服務(wù)(執(zhí)行中斷服務(wù)程序),在執(zhí)行完中斷服務(wù)程序后再回到原程序繼續(xù)執(zhí)行。中斷系統(tǒng)是指能夠處理上述中斷過(guò)程所需要的部分電路系統(tǒng)。
AT89C51的中斷系統(tǒng)由中斷源、中斷允許控制器IE、中斷優(yōu)先級(jí)控制器IP、定時(shí)器控制器TCON、中斷標(biāo)志寄存器等構(gòu)成,IE、IP、TCON均為SFR特殊功能寄存器(見(jiàn)表1-11)。AT89C51的中斷源(產(chǎn)生中斷請(qǐng)求信號(hào)的來(lái)源)有5個(gè),分別是:兩個(gè)外部中斷源INT0、INT1(中斷信號(hào)從P3.2、P3.3引腳輸入)和3個(gè)內(nèi)部中斷源—定時(shí)器0溢出中斷、定時(shí)器1溢出中斷、串行口中斷。每個(gè)中斷源都有固定的中斷服務(wù)程序入口地址。
6.內(nèi)部總線
單片機(jī)內(nèi)的CPU、存儲(chǔ)器、I/O接口等單元部件都是通過(guò)總線連接在一起的。采用總線結(jié)構(gòu)可以減少信息傳輸線的根數(shù),提高系統(tǒng)可靠性,增強(qiáng)系統(tǒng)靈活性。
AT89C51單片機(jī)內(nèi)部總線是單總線結(jié)構(gòu),即數(shù)據(jù)總線和地址總線是公用的。內(nèi)部所有單元電路都掛在總線上,它們之間的信息傳遞都經(jīng)過(guò)內(nèi)部總線,并采用分時(shí)操作、分時(shí)使用的方法,所以不會(huì)引起信息沖突或搶占總線的問(wèn)題。
知識(shí)4AT89C51單片機(jī)的引腳及其功能
AT89C51與MCS-51系列單片機(jī)引腳是兼容的,可分
為I/O端口線、電源線、控制線和外接晶體線四部分。其封裝形式有兩種:雙列直插式封裝(DIP)和方形封裝,如圖1-4
所示。圖1-4AT89C51封裝和引腳分配圖
1.I/O端口功能
在AT89C51中有4個(gè)雙向并行I/O端口P0~P3。每個(gè)端口都有8條端口線,共32條線,并都配有端口鎖存器、輸出驅(qū)動(dòng)器和輸入緩沖器,用于CPU與外部設(shè)備之間交換信息。但由于每個(gè)端口的結(jié)構(gòu)各不相同,因此它們?cè)诠δ芎陀猛旧嫌胁顒e。
1)?P0口
P0口有以下兩個(gè)功能:
(1)作普通I/O口。當(dāng)AT89C51無(wú)需擴(kuò)展外部存儲(chǔ)器時(shí),P0口可作為普通的I/O口使用,此時(shí)需要外接上拉電阻。P0口的輸出能力可驅(qū)動(dòng)8個(gè)TTL電路。
(2)作地址/數(shù)據(jù)線。當(dāng)AT89C51需要擴(kuò)展外部存儲(chǔ)器時(shí),P0口作地址/數(shù)據(jù)總線使用。此時(shí)P0口是真正的雙向口,不能再作它用,數(shù)據(jù)的輸出和讀入都是在CPU內(nèi)部總線的控制下有條不紊地進(jìn)行的。
2)?P1口
1口有8條端口線,命名為P1.0~P1.7。由于其內(nèi)部有上拉電阻,所以輸入時(shí)不存在高阻狀態(tài),輸出時(shí)不需外接上拉電阻。
P1口只作普通的I/O口使用,其功能與P0口的第一功能相同。
3)?P2口
P2口有8條端口線,命名為P2.0~P2.7。它有兩種使用功能,分別在不同狀態(tài)下使用。
(1)作普通I/O口。當(dāng)系統(tǒng)不擴(kuò)展外部存儲(chǔ)器時(shí),P2作普通I/O口使用,其功能和原理與P0口第一功能相同,只是作為輸出口時(shí)不需外接上拉電阻。此時(shí)P2口也是一個(gè)準(zhǔn)雙
向口。
(2)作地址線。當(dāng)系統(tǒng)外擴(kuò)存儲(chǔ)器時(shí),P2口作系統(tǒng)擴(kuò)展的地址總線使用,輸出由程序計(jì)數(shù)器PC來(lái)的高8位地址PCH或數(shù)據(jù)指針DPTR來(lái)的高8位地址DPH作為地址總線的高8位A8~A15。與P0口第二功能輸出的低8位地址相配合,共同訪問(wèn)外部程序或數(shù)據(jù)存儲(chǔ)器(64KB)。它只確定地址,并不能像P0口那樣還可以傳送存儲(chǔ)器的讀寫(xiě)數(shù)據(jù)。由于P2口有鎖存功能,輸出的高8位地址是鎖存的,因此無(wú)需外加地址鎖存器。當(dāng)系統(tǒng)外接有程序存儲(chǔ)器時(shí),訪問(wèn)片外程序存儲(chǔ)器操
作頻繁,P2口不斷輸出高8位地址,因此不宜再作通用I/O口使用。
在僅有片外數(shù)據(jù)存儲(chǔ)器的系統(tǒng)中,若片外RAM容量不大于256B,可直接使用R0、R1作為低8位地址間接尋址,此時(shí)P2口無(wú)需輸出地址,仍可作通用I/O口使用。若片外RAM容量超過(guò)256B,則需要P2口輸出高8位地址。
4)?P3口
P3口有8條端口線,命名為P3.0~P3.7。P3口是一個(gè)多用途的準(zhǔn)雙向口,通常有兩種功能。
(1)作普通I/O口。功能和原理與P0口相同,只是作輸出口時(shí)不需要上拉電阻。
(2)作控制和特殊功能口使用。這時(shí)8條端口線所定義的功能各不相同,如表1-4所示。
P3端口可以按字節(jié)訪問(wèn)也可以按位訪問(wèn),因此可以單獨(dú)設(shè)定P3端口各位的工作狀態(tài)。在應(yīng)用中,可以根據(jù)需要把幾條端口線設(shè)定為第二功能進(jìn)行使用,剩下的口線仍作第一功能使用。
AT89C51單片機(jī)上電復(fù)位時(shí),所有I/O口的復(fù)位值均為1。
5)?I/O口的負(fù)載能力及應(yīng)用功能
通過(guò)以上分析可以看出,4個(gè)I/O口結(jié)構(gòu)上有相同之處,但由于存在一些差異,使它們?cè)谪?fù)載能力、應(yīng)用功能方面存在不同。
(1)端口負(fù)載能力。P0口為三態(tài)雙向口,負(fù)載能力最強(qiáng),能夠驅(qū)動(dòng)8個(gè)TTL電路;P1、P2、P3口為準(zhǔn)雙向口,負(fù)載能力為4個(gè)TTL電路。
(2)端口應(yīng)用功能。
P0口:可以作為普通I/O口;當(dāng)系統(tǒng)外接存儲(chǔ)器和I/O口時(shí),通常作為低8位地址/數(shù)據(jù)總線分時(shí)復(fù)用口,低8位地址由地址鎖存信號(hào)ALE下跳沿鎖存到外部地址鎖存器中,高8位地址由P2口輸出。
P1口:通常作為普通I/O口,每一位都能作為可編程的輸入或輸出口線。
P2口:可以作為普通I/O口使用;當(dāng)系統(tǒng)外接存儲(chǔ)器和I/O口時(shí),又作為擴(kuò)展系統(tǒng)的高8位地址總線,與P0口一起組成16位地址總線。
P3口:為雙功能口。每一位均可獨(dú)立定義為普通I/O口或第二功能輸入/輸出。
2.電源線
AT89C51單片機(jī)的電源線有以下兩種:
(1)?VCC:+5V電源線。
(2)?VSS:接地線。
3.外接晶振引腳
(1)?XTAL1:片內(nèi)振蕩器反相放大器的輸入端和內(nèi)部時(shí)鐘工作的輸入端。采用內(nèi)部振蕩器時(shí),它接外部石英晶體和微調(diào)電容的一個(gè)引腳。采用外部振蕩器時(shí),它是外部時(shí)鐘的輸入端。
(2)?XTAL2:片內(nèi)振蕩器反相放大器的輸出端,接外部石英晶體和微調(diào)電容的另一端。采用外部振蕩器時(shí),該引腳懸空。
4.控制線
AT89C51單片機(jī)的控制線有以下幾種:
(1)?RST:復(fù)位輸入端,高電平有效。當(dāng)振蕩器運(yùn)行時(shí),在該引腳上出現(xiàn)兩個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。
(2)?ALE/:地址鎖存允許/編程線。當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),ALE線上輸出一個(gè)高電位脈沖,其下降沿將P0口輸出的片外存儲(chǔ)器低8位地址鎖存到外部專用地址鎖存器中,以實(shí)現(xiàn)低字節(jié)地址和數(shù)據(jù)的分時(shí)傳送。即使不訪問(wèn)外部存儲(chǔ)器,ALE端仍以不變的頻率(振蕩器頻率的1/6)輸出脈沖序列,該脈沖序列可作外部時(shí)鐘源或定時(shí)脈沖源使用。在對(duì)AT89C51片內(nèi)Flash存儲(chǔ)器編程時(shí),該引腳用于輸入編程負(fù)脈沖(
)。
(3):外部程序存儲(chǔ)器的讀選通線,低電平有效。當(dāng)AT89C51訪問(wèn)外部程序存儲(chǔ)器時(shí),每個(gè)機(jī)器周期
輸出兩個(gè)負(fù)脈沖,用于選通片外ROM,并將外部ROM的內(nèi)容送入P0口(數(shù)據(jù)總線)。訪問(wèn)外部RAM時(shí)無(wú)效。該信號(hào)可以驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。
(4)
/VPP:片外ROM允許訪問(wèn)/編程電源端。若
=0,則只允許CPU訪問(wèn)外部程序存儲(chǔ)器(地址0000H~FFFFH);若=1,則先訪問(wèn)內(nèi)部程序存儲(chǔ)器,但當(dāng)PC中地址值超過(guò)4KB范圍時(shí),將自動(dòng)轉(zhuǎn)向執(zhí)行片外程序存儲(chǔ)器指令。在Flash存儲(chǔ)器編程時(shí),該引腳用于施加編程電壓VPP(芯片所要求的編程電壓)。知識(shí)5AT89C51單片機(jī)最小系統(tǒng)
AT89C51片內(nèi)有Flash程序存儲(chǔ)器,由它構(gòu)成的最小應(yīng)用系統(tǒng)簡(jiǎn)單可靠。由于集成度高的原因,最小應(yīng)用系統(tǒng)只能是基本控制單元。換句話說(shuō),AT89C51的最基本工作條件離不開(kāi)晶振電路和復(fù)位電路,這也是所有單片機(jī)必需的兩個(gè)基本電路。
1.晶振電路
AT89C51單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的單級(jí)反相放大器,如圖1-5所示。圖1-5AT89C51內(nèi)部振蕩器電路圖
引腳XTAL1為反相器輸入端,XTAL2為反相器輸出端。當(dāng)在放大器兩個(gè)引腳上外接一個(gè)晶體(或陶瓷振蕩器)和電容組成的并聯(lián)諧振電路作為反饋元件時(shí),便構(gòu)成了一個(gè)自激振蕩器,如圖1-6所示。圖1-6內(nèi)部振蕩器等效電路圖此振蕩器由XTAL1端向內(nèi)部時(shí)鐘電路提供一定的頻率時(shí)鐘源信號(hào)。另外,振蕩器的工作還可由軟件控制,當(dāng)對(duì)單片機(jī)內(nèi)電源控制寄存器PCON中的PD位置1時(shí),可停止振蕩器的工作,使單片機(jī)進(jìn)入省電工作狀態(tài),此振蕩器稱為內(nèi)部振蕩器。
單片機(jī)也可采用外部振蕩器向內(nèi)部時(shí)鐘電路輸入一固定頻率的時(shí)鐘源信號(hào)。此時(shí),外部振蕩器信號(hào)接至XTAL1端,輸入給內(nèi)部時(shí)鐘電路,而XTAL2端浮空即可,如圖1-7
所示。圖1-7外部時(shí)鐘電路圖片內(nèi)振蕩器的頻率是由外接石英晶體的頻率決定的,其頻率值可為4~24MHz,當(dāng)頻率穩(wěn)定性要求不高時(shí),可選用陶瓷諧振器。
片內(nèi)振蕩器對(duì)構(gòu)成并聯(lián)諧振電路的外接電容C1和C2要求并不嚴(yán)格。外接晶體時(shí),C1和C2的典型值為30pF左右;外接陶瓷諧振器時(shí),C1和C2的典型值為47pF左右。
2.復(fù)位電路
1)上電復(fù)位電路
上電復(fù)位電路中考慮到振蕩器有一定的起振時(shí)間,復(fù)位引腳上高電平必須持續(xù)10ms以上才能保證有效復(fù)位。因此,一般采用專用的復(fù)位芯片或簡(jiǎn)單的RC電路來(lái)實(shí)現(xiàn)。圖1-8(a)所示為一種常用的簡(jiǎn)易R(shí)C復(fù)位電路,通過(guò)對(duì)電容的充電在接通電源的同時(shí)完成系統(tǒng)的復(fù)位工作。R、C的參數(shù)可以調(diào)整復(fù)位的時(shí)間。圖1-8單片機(jī)復(fù)位電路圖
2)按鍵復(fù)位電路
單片機(jī)在運(yùn)行期間若出現(xiàn)非正常狀態(tài),則可以通過(guò)人工強(qiáng)制干預(yù)的方法進(jìn)行復(fù)位。常用電路如圖1-8(b)所示,S鍵按下時(shí),RST端經(jīng)電阻R1接通VCC電源實(shí)現(xiàn)復(fù)位。同時(shí),上電時(shí)即使沒(méi)有將S鍵按下,由于R2C電路對(duì)電容C充電,RST端也會(huì)出現(xiàn)一段高電平,實(shí)現(xiàn)上電復(fù)位。
此外,加上電源電路后得到的單片機(jī)最小系統(tǒng)電路如圖1-9所示。圖1-9AT89C51最小應(yīng)用系統(tǒng)任務(wù)實(shí)施
【設(shè)備與器件清單】
1.設(shè)備清單:PC機(jī)、單片機(jī)開(kāi)發(fā)系統(tǒng)、穩(wěn)壓電源。
2.器件清單:
【跟我做】
1.準(zhǔn)備器件,設(shè)計(jì)硬件電路圖。
析:?jiǎn)纹瑱C(jī)最小系統(tǒng)電路由電源電路、復(fù)位電路、
晶振電路構(gòu)成,最小系統(tǒng)驅(qū)動(dòng)發(fā)光管點(diǎn)亮的參考電路如圖1-10所示。圖1-10單片機(jī)最小系統(tǒng)參考電路
2.編寫(xiě)控制程序。
在AT89C51單片機(jī)最小系統(tǒng)基礎(chǔ)上,將8只發(fā)光二極管連接到P2口,由P2口進(jìn)行控制。當(dāng)P2口的引腳輸出低電平“0”時(shí),電流流過(guò)發(fā)光二極管而發(fā)光,當(dāng)P2口的引腳輸出高電平“1”時(shí),發(fā)光二極管兩端電壓相等,不發(fā)光。
參考程序如下:
ORG 0000H
MAIN: MOV P2,#0F0H
SJMP $
END
【課后任務(wù)】
1.編寫(xiě)實(shí)訓(xùn)報(bào)告,總結(jié)實(shí)訓(xùn)過(guò)程中遇到的問(wèn)題、解決方法和收獲。
2.如果需要8只LED分兩組交替閃爍,如何設(shè)計(jì)?
3.如果改用P0口和P1口來(lái)控制16只LED,讓8只LED交替點(diǎn)亮,如何設(shè)計(jì)?任務(wù)擴(kuò)展
知識(shí)6AT89C51單片機(jī)I/O口內(nèi)部結(jié)構(gòu)
1.P0口
P0口每條端口線的結(jié)構(gòu)組成如圖1-11所示。它由一個(gè)輸出鎖存器、兩個(gè)三態(tài)緩沖器、輸出驅(qū)動(dòng)電路和輸出控制電路組成。其中,輸出驅(qū)動(dòng)電路由上拉場(chǎng)效應(yīng)管T1和驅(qū)動(dòng)場(chǎng)效應(yīng)管T2組成,輸出控制電路則由一個(gè)與門(mén)、一個(gè)非門(mén)和一個(gè)模擬開(kāi)關(guān)MUX組成。圖1-11P0口位結(jié)構(gòu)圖
1)作普通I/O口
P0口作為普通的I/O口使用時(shí),CPU發(fā)控制信號(hào)為0(低電平),與門(mén)封鎖,使T1截止,同時(shí)使MUX觸點(diǎn)處于下方,將鎖存器的端與T2的柵極接通。因T1處于截止?fàn)顟B(tài),故端口為漏極開(kāi)路電路。
CPU向P0端口輸出數(shù)據(jù)時(shí),寫(xiě)脈沖加到鎖存器的CL上,其上升沿將內(nèi)部總線傳送給D端的數(shù)據(jù)取反后出現(xiàn)在端,又經(jīng)T2反相,這樣在P0引腳上出現(xiàn)的數(shù)據(jù)正好是D端的寫(xiě)入數(shù)據(jù)。但在開(kāi)漏極狀態(tài)下,要使P0引腳真正反映D端的寫(xiě)入狀態(tài),必須外接上拉電阻。
當(dāng)CPU從P0口讀入外部輸入數(shù)據(jù)(輸入口)時(shí),有兩種讀入方式:讀鎖存器和讀引腳。
(1)讀鎖存器。在P0口的每一根線的結(jié)構(gòu)上都設(shè)有一個(gè)讀鎖存器緩沖器(圖1-11中的緩沖器1),當(dāng)CPU讀鎖存器時(shí),讀入的數(shù)據(jù)是鎖存器的輸出狀態(tài),由Q端經(jīng)三態(tài)緩沖器1進(jìn)入內(nèi)部總線。
讀鎖存器操作實(shí)際上是“讀—修改—寫(xiě)”指令中的“讀”動(dòng)作。所謂“讀—修改—寫(xiě)”指令,是指端口處于輸出狀態(tài),但必須先從端口讀入當(dāng)前的數(shù)據(jù)進(jìn)入CPU,在CPU中經(jīng)過(guò)計(jì)算修改之后,重新輸出到該端口上。例如,邏輯與指令“ANLP1,A”就屬于這類指令。該指令的執(zhí)行過(guò)程是:CPU先讀入P1口上的數(shù)據(jù),然后與累加器A中的數(shù)據(jù)按位進(jìn)行邏輯與操作,最后將與的結(jié)果送回P1口,完成對(duì)P1口各位狀態(tài)的修改。這類指令中,讀入P1口的數(shù)據(jù)是前一次寫(xiě)入P1口輸出鎖存器的數(shù)據(jù),而不是P1口的實(shí)際狀態(tài),兩者不一定相同。
因此,在這種情況下,若直接讀引腳,有可能得到錯(cuò)誤的讀入結(jié)果。
(2)讀引腳。讀引腳時(shí),緩沖器2用于直接讀取引腳數(shù)
據(jù)。但讀引腳時(shí)必須注意,如果此前該口D端鎖存過(guò)“0”數(shù)據(jù),則T2是導(dǎo)通的,這樣引腳上輸入的“1”就被鉗位在“0”狀態(tài),而無(wú)法使端口呈高阻輸入狀態(tài),造成讀取錯(cuò)誤。所以,應(yīng)先向端口鎖存器寫(xiě)入“1”,使T2截止,則外輸入的“1”就可進(jìn)入緩沖器2中。因此,作為普通I/O口使用時(shí),P0口是準(zhǔn)雙向口。
2)作地址/數(shù)據(jù)線
P0口作地址/數(shù)據(jù)總線使用時(shí),CPU控制信號(hào)為1(高電平),使與門(mén)打開(kāi),同時(shí)使MUX觸點(diǎn)處于上方,場(chǎng)效應(yīng)管T1、T2都由地址/數(shù)據(jù)總線控制工作,而且是互補(bǔ)輸出狀態(tài)。
當(dāng)從P0口輸出地址數(shù)據(jù)時(shí),若地址/數(shù)據(jù)為“1”,與門(mén)輸出“1”使T1導(dǎo)通,反相器輸出“0”使T2截止,P0引腳上出現(xiàn)高電平;若地址/數(shù)據(jù)為“0”,與門(mén)輸出“0”使T1截止,反相器輸出“1”使T2導(dǎo)通,P0引腳上出現(xiàn)低電平“0”。當(dāng)從P0口輸入數(shù)據(jù)時(shí),信號(hào)從三態(tài)緩沖器2進(jìn)入內(nèi)部總線,CPU自動(dòng)對(duì)鎖存器先寫(xiě)“1”。此時(shí)P0口是真正的雙向口。
2.P1口
P1口每條線的結(jié)構(gòu)組成如圖1-12所示。
與P0口不同,該端口電路結(jié)構(gòu)中沒(méi)有多路轉(zhuǎn)換開(kāi)關(guān)MUX,因此,P1口只作普通的I/O口使用,其功能與P0口的第一功能相同。同樣,作輸入口使用時(shí),必須先向鎖存器寫(xiě)入“1”,使場(chǎng)效應(yīng)管T截止,然后才能讀取數(shù)據(jù)。因此,P1口也是一個(gè)準(zhǔn)雙向口。圖1-12P1口位結(jié)構(gòu)圖
3.P2口
P2口每條線的結(jié)構(gòu)如圖1-13所示。圖1-13P2口位結(jié)構(gòu)圖
1)作普通I/O口
P2口作普通I/O口時(shí),CPU發(fā)出的控制信號(hào)使多路選擇開(kāi)關(guān)MUX打向1端,此時(shí)P2口作普通I/O口使用,其功能和原理與P0口第一功能相同,只是作為輸出口時(shí)不需外接上拉電阻。此時(shí)P2口也是一個(gè)準(zhǔn)雙向口。
2)作地址線
2口作地址線時(shí),控制信號(hào)使多路選擇開(kāi)關(guān)MUX打向2端,此時(shí)P2口作系統(tǒng)擴(kuò)展的地址總線使用,輸出由程序計(jì)數(shù)器PC來(lái)的高8位地址PCH或數(shù)據(jù)指針DPTR來(lái)的高8位地址DPH作為地址總線的高8位A8~A15。與P0口第二功能輸出的低8位地址相配合,共同訪問(wèn)外部程序或數(shù)據(jù)存儲(chǔ)器(64KB)。它只確定地址,并不能像P0口那樣還可以傳送存儲(chǔ)器的讀/寫(xiě)數(shù)據(jù)。由于P2口有鎖存功能,輸出的高8位地址是鎖存的,因此無(wú)需外加地址鎖存器。在僅有片外數(shù)據(jù)存儲(chǔ)器的系統(tǒng)中,若片外RAM容量不大于256B,可直接使用R0、R1作為低8位地址間接尋址,此時(shí)P2口無(wú)需輸出地址,仍可作通用I/O口使用。若片外RAM容量超過(guò)256B,則需要P2口輸出高8位地址。在片外RAM的讀/寫(xiě)周期內(nèi),P2口鎖存器的內(nèi)容不受影響,周期結(jié)束后,多路轉(zhuǎn)換開(kāi)關(guān)MUX自動(dòng)切換到1端,寄存器原來(lái)的數(shù)據(jù)又會(huì)重新出現(xiàn)在引腳上。
4.P3口
P3口每條線的結(jié)構(gòu)如圖1-14所示。圖1-14P3口位結(jié)構(gòu)圖
P3口是一個(gè)多用途的準(zhǔn)雙向口。當(dāng)P3口工作于第一功能即作普通I/O口使用時(shí),其功能和原理與P0口相同,只是作輸出口時(shí)不需要上拉電阻。在P3口的引腳信號(hào)輸入通道中有兩個(gè)緩沖器,第二功能的輸入信號(hào)取自第一個(gè)緩沖器(上邊)的輸出端。普通輸入信號(hào)取自第二個(gè)三態(tài)緩沖器(下邊)的輸出端。知識(shí)7AT89C51單片機(jī)的工作方式
1.復(fù)位方式
單片機(jī)在開(kāi)機(jī)時(shí)或在工作中因干擾而使程序失控或工作中程序處于某種死循環(huán)狀態(tài)等情況下都需要復(fù)位。復(fù)位的作用是使中央處理器CPU以及其他功能部件都恢復(fù)到一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開(kāi)始工作。復(fù)位后,PC程序計(jì)數(shù)器的內(nèi)容為0000H,即單片機(jī)從0000H單元開(kāi)始執(zhí)行程序。同時(shí),復(fù)位操作會(huì)影響特殊功能寄存器(SFR)的狀態(tài),但片內(nèi)RAM中的內(nèi)容不變。SFR的復(fù)位狀態(tài)如表1-5所示。
2.程序執(zhí)行方式
連續(xù)執(zhí)行方式是指從指定地址開(kāi)始連續(xù)執(zhí)行程序存儲(chǔ)器ROM中存放的程序。
單步執(zhí)行方式是指在單步運(yùn)行鍵控制下,每按一次單步鍵,程序按順序執(zhí)行一條指令的工作方式,通常用于程序調(diào)試。單步運(yùn)行鍵通常通過(guò)外部中斷方式實(shí)現(xiàn),詳見(jiàn)項(xiàng)目2中任務(wù)一的知識(shí)11。
3.低功耗方式
待機(jī)工作方式和掉電方式是由電源控制寄存器PCON控制的,PCON是一個(gè)按位定義的特殊功能寄存器,其字節(jié)格式如表1-6所示。該寄存器的各位定義如下:
SMOD:串行口波特率加倍控制位,等于“1”時(shí)波特率加倍。
GF1、GF0:通用標(biāo)志位,由用戶通過(guò)軟件設(shè)置。
PD:掉電方式位,PD=1進(jìn)入掉電工作方式。
IDL:待機(jī)方式位,IDL=1進(jìn)入待機(jī)工作方式。
若PD和IDL同時(shí)為1,則進(jìn)入掉電工作方式。
復(fù)位時(shí),PCON=0×××0000B,單片機(jī)處于正常工作狀態(tài),若要進(jìn)入待機(jī)或掉電工作狀態(tài),僅需將PD或IDL置位即可。
1)待機(jī)工作方式
待機(jī)工作方式是指在程序運(yùn)行的過(guò)程中,在CPU暫時(shí)無(wú)需工作時(shí),單片機(jī)進(jìn)入的一種低功耗工作方式。
使用指令使PCON的IDL位置1,即進(jìn)入待機(jī)方式。在此方式下,振蕩器仍然運(yùn)行,并向中斷系統(tǒng)、串行口和定時(shí)器提供工作時(shí)鐘信號(hào),但向CPU提供時(shí)鐘的電路被封鎖,CPU停止工作。
CPU的狀態(tài)在待機(jī)期間維持不變,與CPU有關(guān)的SP、PC、PSW、內(nèi)部RAM和全部工作寄存器及引腳都保持進(jìn)入待機(jī)方式時(shí)的狀態(tài),ALE和保持高電平。待機(jī)期間各引腳的狀態(tài)如表1-7所示。
退出待機(jī)方式繼續(xù)正常工作的方式有兩種:激活中斷和硬件復(fù)位。
(1)激活中斷。在待機(jī)方式下,中斷系統(tǒng)仍處于工作狀態(tài),因此可以采用中斷方法激活CPU,使其恢復(fù)到正常工作狀態(tài)。任何一個(gè)開(kāi)放的中斷源在待機(jī)方式下中斷請(qǐng)求,都將使IDL被硬件自動(dòng)清零,使單片機(jī)退出待機(jī)方式進(jìn)入正常工作方式。CPU響應(yīng)此中斷請(qǐng)求,進(jìn)入中斷服務(wù)程序,當(dāng)中斷服務(wù)程序執(zhí)行完最后一條RETI指令后,程序?qū)⒎祷氐皆戎么龣C(jī)方式指令后的下一條指令處開(kāi)始繼續(xù)執(zhí)行。
PCON的兩個(gè)通用標(biāo)志位GF1、GF0可用來(lái)指示中斷是在正常運(yùn)行期間發(fā)生的還是在待機(jī)狀態(tài)發(fā)生的。例如,待機(jī)方式的啟動(dòng)指令也可以同時(shí)把一個(gè)或兩個(gè)通用標(biāo)志位置1,各中斷服務(wù)程序根據(jù)對(duì)這兩個(gè)標(biāo)志位的檢查結(jié)果,就可以確定此次中斷是在什么情況下發(fā)生的。
(2)硬件復(fù)位。在待機(jī)方式下振蕩器仍然工作,只要在RST引腳上送一個(gè)延時(shí)大于兩個(gè)機(jī)器周期的正脈沖,就能將IDL清零,使單片機(jī)退出待機(jī)狀態(tài),CPU恢復(fù)工作,程序從待機(jī)方式啟動(dòng)指令的后一條指令繼續(xù)執(zhí)行。
用硬件復(fù)位使單片機(jī)退出待機(jī)方式,在內(nèi)部復(fù)位操作開(kāi)始之前,尚有兩個(gè)或三個(gè)機(jī)器周期的時(shí)間執(zhí)行程序,在此期間,片內(nèi)硬件禁止對(duì)內(nèi)部RAM進(jìn)行存取操作,但對(duì)端口引腳的訪問(wèn)卻不禁止。
2)掉電方式
PCON中的PD位控制著單片機(jī)進(jìn)入掉電保護(hù)方式。若使PD位置為1,單片機(jī)即進(jìn)入掉電方式。掉電方式下片內(nèi)振蕩器停振,送入時(shí)鐘電路的振蕩信號(hào)被封鎖,不產(chǎn)生時(shí)鐘信號(hào),片內(nèi)一切工作都停止,只有片內(nèi)RAM的內(nèi)容被保留,端口的輸入狀態(tài)值都保存在對(duì)應(yīng)的SFR中,ALE和引腳輸出邏輯低電平。如果在執(zhí)行片內(nèi)程序時(shí)啟動(dòng)了掉電方式,各端口引腳將繼續(xù)輸出其相應(yīng)的SFR的內(nèi)容。若片外程序進(jìn)入掉電方式,P2口也輸出其SFR的數(shù)據(jù),P0口將處于高阻狀態(tài)。退出掉電方式的唯一方法是硬件復(fù)位。
電期間,VCC電源(也是備用電源引入端)可以降至2V,在進(jìn)入掉電方式之前,VCC不能降低,而在退出掉電方式之前,VCC必須恢復(fù)正常的電壓值。當(dāng)VCC恢復(fù)正常的5V后,硬件復(fù)位信號(hào)須維持10ms,使振蕩器重新起振并穩(wěn)定下來(lái),單片機(jī)才可以退出掉電方式。復(fù)位操作使所有SFR均恢復(fù)成初始值,并從0000H單元重新開(kāi)始執(zhí)行程序。定時(shí)器、中斷允許、波特率和端口狀態(tài)都要重新安排,但片內(nèi)RAM的內(nèi)容并不受影響。低功耗方式往往用于直流電源供電或停電時(shí)依靠備用電源供電的情況,可以大大降低功耗。單片機(jī)正常工作時(shí)消耗10~20mA電流,而CPU的耗電量占芯片耗電的80%~90%。在低功耗方式下,CPU停止工作,待機(jī)工作方式時(shí)消耗1.75mA電流,掉電方式工作時(shí)消耗5~50μA電流,可見(jiàn)耗能很小。
4.編程和校驗(yàn)方式
1)簽名字節(jié)讀出方式
簽名字節(jié)是生產(chǎn)廠家在生產(chǎn)AT89系列單片機(jī)時(shí)寫(xiě)入到存儲(chǔ)器中的信息,包括生產(chǎn)廠家、編程電壓和單片機(jī)型號(hào)。這些信息一般也會(huì)印在單片機(jī)封裝外殼的頂面(或底面),但由于某些原因看不到封裝表面的這些信息時(shí),我們就要通過(guò)讀取簽名字節(jié)的方法來(lái)獲得這些信息,特別是編程電壓。
2)?Flash存儲(chǔ)器編程方式
這里的編程是指利用特殊手段將用戶編寫(xiě)好的程序代碼寫(xiě)入AT89C51片內(nèi)4KBFlash存儲(chǔ)器的過(guò)程。編程前必須先確定編程電壓。AT89系列單片機(jī)只有兩種編程電壓:一種是低壓編程方式,用5V電壓;另一種是高壓編程方式,用12V電壓。這一編程電壓可從器件封裝表面讀取或從簽名字節(jié)中讀取。
AT89C51存儲(chǔ)器編程時(shí),必須在硬件上先建立好地址、數(shù)據(jù)和相應(yīng)的控制信號(hào),如圖1-15所示。圖1-15Flash編程硬件邏輯電路圖具體編程步驟如下:
(1)在地址線上輸入要編程單元的地址。
(2)在數(shù)據(jù)線上輸入要寫(xiě)入的數(shù)據(jù)字節(jié)。
(3)在/VPP端加入編程電壓(5V或12V)。
(4)激活相應(yīng)的控制信號(hào)。
(5)在ALE/?端加入一個(gè)編程負(fù)脈沖,數(shù)據(jù)線上的數(shù)據(jù)字節(jié)就寫(xiě)入地址線上對(duì)應(yīng)的Flash存儲(chǔ)器單元地址中了。
3)程序校驗(yàn)方式
程序校驗(yàn)方式是指對(duì)編程中寫(xiě)的程序代碼進(jìn)行讀出,并與程序?qū)懭肭暗拇a進(jìn)行比較驗(yàn)證的過(guò)程。
校驗(yàn)只能在程序沒(méi)有被加密的情況下進(jìn)行。程序加密后不能直接校驗(yàn),但可通過(guò)觀察它們的功能是否被實(shí)現(xiàn)來(lái)驗(yàn)證。
4)?EPROM加密方式
用戶編寫(xiě)好的程序通過(guò)編程和校驗(yàn)無(wú)誤,寫(xiě)入到EPROM中后,可進(jìn)行加密保護(hù)以防止非法讀出受保護(hù)的應(yīng)用軟件。程序的加密是通過(guò)軟件對(duì)加密位的編程來(lái)實(shí)現(xiàn)的。AT89系列單片機(jī)的加密位有三位,分別為L(zhǎng)B1、LB2和LB3。當(dāng)加密位被編程后,F(xiàn)lash存儲(chǔ)器的內(nèi)容不能用校驗(yàn)方法進(jìn)行讀出,從而實(shí)現(xiàn)保密功能。當(dāng)程序被擦除時(shí),加密位也一起被擦除,同時(shí)恢復(fù)Flash存儲(chǔ)器的全部功能。
5)程序擦除方式
AT89C51單片機(jī)的片內(nèi)Flash存儲(chǔ)器可多次編程,但在每次對(duì)程序存儲(chǔ)器進(jìn)行編程前必須先執(zhí)行擦除操作,使存儲(chǔ)器單元內(nèi)容變?yōu)槿獸FH狀態(tài)(包括簽名字節(jié))。知識(shí)8
STC89C52單片機(jī)串口下載電路及流程
STC89C52單片機(jī)各方面的性能都兼容AT89C51,并且具備更多的功能,特別是具備ISP在線下載程序功能,單片機(jī)初學(xué)者只需要根據(jù)圖1-16所示的硬件電路,就可以直接進(jìn)行編程和下載,不用購(gòu)買昂貴的編程器就能學(xué)習(xí)單片機(jī)技術(shù)。在PC機(jī)端,需要下載STC專用的下載編程軟件STC_
ISP_V480.EXE,并點(diǎn)擊運(yùn)行。
(1)將STC89C52RC芯片放入單片機(jī)下載板的40腳活動(dòng)插座中。
(2)在圖1-17所示的編程界面中選擇對(duì)應(yīng)的單片機(jī)芯片型號(hào),如STC89C52RC。
(3)點(diǎn)擊“打開(kāi)程序文件”選擇合適的燒寫(xiě)文件(?.HEX)。
(4)點(diǎn)擊“Download/下載”按鈕,然后接通單片機(jī)下載板的電源。
(5)?3s左右,就能完成程序下載并運(yùn)行。圖1-16ISP下載硬件電路圖1-17STC編程軟件界面任務(wù)二LED顯示器的設(shè)計(jì)
任務(wù)要求
【任務(wù)內(nèi)容】
組裝一個(gè)AT89C51單片機(jī)的最小系統(tǒng),外接8個(gè)發(fā)光二極管,依次將發(fā)光管由右到左單燈點(diǎn)亮,循環(huán)往復(fù)。
【知識(shí)要求】
了解AT89C51的存儲(chǔ)器結(jié)構(gòu);掌握尋址方式和部分?jǐn)?shù)據(jù)傳送指令的使用;掌握匯編程序結(jié)構(gòu);掌握循環(huán)程序設(shè)計(jì)方法;了解單片機(jī)中的時(shí)鐘與時(shí)序。
相關(guān)知識(shí)
知識(shí)1AT89C51單片機(jī)的存儲(chǔ)器
AT89系列單片機(jī)存儲(chǔ)器結(jié)構(gòu)將程序存儲(chǔ)器(ROM)和數(shù)據(jù)存儲(chǔ)器(RAM)分開(kāi),它們有各自獨(dú)立的存儲(chǔ)空間、尋址機(jī)構(gòu)和尋址方式。
AT89C51共有4個(gè)存儲(chǔ)空間:片內(nèi)程序存儲(chǔ)器、片外程序存儲(chǔ)器、片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器。其典型結(jié)構(gòu)如圖1-18所示。圖1-18AT89C51存儲(chǔ)器結(jié)構(gòu)圖
1.程序存儲(chǔ)器
AT89C51程序存儲(chǔ)器是只讀存儲(chǔ)器,用于存放程序代碼和表格常數(shù),有片內(nèi)和片外之分。片內(nèi)有4KB的Flash程序存儲(chǔ)器,地址范圍為0000H~0FFFH。當(dāng)內(nèi)部ROM不夠使用時(shí),可以擴(kuò)展片外程序存儲(chǔ)器,因程序計(jì)數(shù)器PC和程序地址指針DPTR都是16位的,所以片外程序存儲(chǔ)器擴(kuò)展的最大空間是64KB,地址范圍為0000H~FFFFH。
無(wú)論片內(nèi)還是片外擴(kuò)展的程序存儲(chǔ)器,兩者的地址空間是統(tǒng)一的。0000H~0FFFH這4KB的地址空間為片內(nèi)和片外程序存儲(chǔ)器所共有,或片內(nèi)占用或片外占用,但兩者不能同時(shí)占用。
為了對(duì)片內(nèi)、片外ROM的使用加以區(qū)分,AT89C51提供了一個(gè)專用的控制引腳。引腳接高電平時(shí),單片機(jī)程序從內(nèi)部ROM開(kāi)始執(zhí)行,當(dāng)PC值超出內(nèi)部ROM的容量時(shí),會(huì)自動(dòng)轉(zhuǎn)向外部程序存儲(chǔ)器空間。若引腳接低電平,則程序從外部擴(kuò)展程序存儲(chǔ)器的0000H地址開(kāi)始取指執(zhí)行,不管是否有內(nèi)部Flash存儲(chǔ)器。不論從片內(nèi)還是片外程序存儲(chǔ)器讀取指令,系統(tǒng)的執(zhí)行速度都是相同的。
在64KB程序存儲(chǔ)器空間中,有6個(gè)單元具有固定用途。第一個(gè)是0000H單元,因AT89C51復(fù)位后程序計(jì)數(shù)器PC的內(nèi)容為0000H,故CPU必須從0000H單元開(kāi)始執(zhí)行程序,即0000H單元是整個(gè)系統(tǒng)程序的起始地址。其余的5個(gè)單元分別是中斷服務(wù)程序的入口地址,如表1-8所示。
0000H單元與另一固定地址單元0003H(外部中斷0服務(wù)程序入口地址)之間只有3B的空間,因此,一般在0000H單元中存放一條絕對(duì)轉(zhuǎn)移指令,用戶編寫(xiě)的程序從轉(zhuǎn)移地址開(kāi)始存放,這樣做是為了跳過(guò)其他5個(gè)中斷入口地址。當(dāng)系統(tǒng)不使用中斷時(shí),則無(wú)需跳轉(zhuǎn),程序從0000H單元開(kāi)始順序存放即可。在系統(tǒng)需要擴(kuò)展外部程序存儲(chǔ)器時(shí),P0口和P2口作為地址總線使用。P0口作為地址/數(shù)據(jù)復(fù)用總線使用,它先輸出16位地址的低8位(PC程序計(jì)數(shù)器低8位,高8位由P2口輸出)。當(dāng)系統(tǒng)不需擴(kuò)展,只用內(nèi)部4KB的Flash存儲(chǔ)器時(shí),P0口和P2口可作為普通I/O口使用。詳細(xì)擴(kuò)展電路在后面項(xiàng)目中介紹。
2.?dāng)?shù)據(jù)存儲(chǔ)器
內(nèi)部數(shù)據(jù)存儲(chǔ)器為256B的RAM,地址范圍為00H~FFH。片外數(shù)據(jù)存儲(chǔ)器為可擴(kuò)展的64KB存儲(chǔ)空間,地址范圍為0000H~FFFFH,兩者的地址空間是分開(kāi)且各自獨(dú)立的,訪問(wèn)的指令也各不相同。訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)儲(chǔ)器時(shí),用MOV指令;訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),用16位DPTR尋址,可尋址空間為64KB,用MOVX指令。片內(nèi)/外RAM的結(jié)構(gòu)分配如圖1-18(b)所示。
1)內(nèi)部數(shù)據(jù)存儲(chǔ)器
AT89C51單片機(jī)片內(nèi)數(shù)據(jù)存儲(chǔ)器可分為兩部分:00H~7FH單元空間的128B為數(shù)據(jù)RAM區(qū);80H~FFH單元空間的128B為專用寄存器(SFR)區(qū)。兩部分的地址空間是連續(xù)的。
(1)數(shù)據(jù)RAM區(qū)。數(shù)據(jù)RAM區(qū)共128B,它又可劃分為工作寄存器區(qū)、位尋址區(qū)和用戶RAM區(qū),如圖1-19所示。圖1-19內(nèi)部數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)圖①工作寄存器區(qū)。00H~1FH這32個(gè)單元為工作寄存器區(qū),又稱通用寄存器,用于數(shù)據(jù)運(yùn)算和傳送過(guò)程中的暫存單元。工作寄存器共分為4組,每組占8個(gè)RAM單元,地址由小到大分別用代號(hào)R0~R7表示。通過(guò)設(shè)置程序狀態(tài)字PSW中的RS1、RS0狀態(tài)來(lái)決定哪一組寄存器工作,如表1-9所示。不用的工作寄存器單元可作一般的RAM使用。②位尋址區(qū)。20H~2FH這16個(gè)單元為位尋址區(qū)。它有雙重尋址功能,既可進(jìn)行位尋址操作,也可同普通RAM單元一樣按字節(jié)尋址操作。位地址為00H~7FH,128個(gè)位地址的分配如表1-10所示。③用戶RAM區(qū)。30H~7FH這80個(gè)單元為用戶RAM區(qū),用于存放用戶數(shù)據(jù),只能按字節(jié)存取。
堆棧是一種特殊的數(shù)據(jù)存儲(chǔ)區(qū)域,是為程序調(diào)用和中斷服務(wù)而設(shè)立的,用于保護(hù)現(xiàn)場(chǎng)和斷點(diǎn)地址。它按照“先進(jìn)后出”的規(guī)律存取數(shù)據(jù),固定的一端稱為棧底,活動(dòng)的一端稱為棧頂,用堆棧指針SP指示。復(fù)位時(shí),SP的初值為07H,但這個(gè)初值可以通過(guò)“MOVSP,#DATA”語(yǔ)句來(lái)修改,以確定堆棧的使用空間。對(duì)堆棧的操作都是在棧頂進(jìn)行,有兩種操作:一種是數(shù)據(jù)的寫(xiě)入,稱為入棧或壓棧;另一種是數(shù)據(jù)的讀出,稱為出棧或彈出。入棧操作用于將數(shù)據(jù)壓入棧頂,執(zhí)行該操作時(shí),先將棧頂指針SP的值加1,然后把數(shù)存入到SP指向的單元中。出棧操作用于把棧頂?shù)臄?shù)據(jù)彈出,執(zhí)行該操作時(shí),先將堆棧指針SP指向的單元內(nèi)容彈出并送入目標(biāo)地址中,然后將SP的值減1,SP仍指向棧頂。
(2)專用寄存器區(qū)。片內(nèi)80H~FFH這一區(qū)間集合了21個(gè)特殊用途的寄存器,一般稱之為專用寄存器或特殊功能寄存器(SFR)。除了程序計(jì)數(shù)器PC和4個(gè)通用工作寄存器組外,其余所用寄存器都在SFR區(qū)內(nèi)。它們的功能是固定的,用戶不得更改。單片機(jī)通過(guò)對(duì)這些特殊寄存器的讀/寫(xiě)訪問(wèn)實(shí)現(xiàn)對(duì)各功能單元的控制。每個(gè)SFR占有一個(gè)RAM單元,它們離散地分布在80H~FFH地址范圍內(nèi),如表1-11所示。特殊功能寄存器可以用直接尋址方式進(jìn)行字節(jié)訪問(wèn),其中11個(gè)帶*號(hào)的寄存器還可進(jìn)行位尋址操作,其位地址的分配如表1-11所示。
沒(méi)有被SFR占據(jù)的地址用戶不可訪問(wèn),對(duì)這些地址讀出時(shí),通常會(huì)得到隨機(jī)的數(shù)據(jù),而寫(xiě)入時(shí)將會(huì)有不確定的效應(yīng),因此軟件設(shè)計(jì)時(shí)不要使用這些單元。
主要的特殊寄存器的名稱及主要功能介紹如下(詳細(xì)的用法見(jiàn)后述內(nèi)容):
A—累加器,自身帶有全零標(biāo)志Z。A=0,則Z=1;A≠0,則Z=0。該標(biāo)志常用于程序分支轉(zhuǎn)移的判斷條件,如指令JZ,JNZ。
B—寄存器,常用于乘除法運(yùn)算。
PSW—程序狀態(tài)字,主要起著標(biāo)志寄存器的作用,其8位定義見(jiàn)表1-3。
SP—堆棧指針。
DPTR—16位寄存器,可分成DPL(低8位)和DPH(高8位)兩個(gè)寄存器。
P0~P3—I/O端口寄存器,是4個(gè)并行I/O端口影射在SFR中的寄存器。通過(guò)對(duì)該寄存器的讀/寫(xiě),可實(shí)現(xiàn)從相應(yīng)I/O端口進(jìn)行輸入/輸出操作。
IP—中斷優(yōu)先級(jí)控制寄存器。
IE—中斷允許控制寄存器。
TMOD—定時(shí)器/計(jì)數(shù)器方式控制寄存器。
TCON—定時(shí)器/計(jì)數(shù)器控制寄存器。
TH0,TL0—定時(shí)器/計(jì)數(shù)器0。
TH1,TL1—定時(shí)器/計(jì)數(shù)器1。
SCON—串行端口控制寄存器。
SBUF—串行數(shù)據(jù)緩沖器。
PCON—電源控制寄存器。
2)片外數(shù)據(jù)存儲(chǔ)器
當(dāng)內(nèi)部256B的數(shù)據(jù)RAM不夠使用時(shí),AT89C51單片機(jī)可擴(kuò)展片外64KB空間的數(shù)據(jù)存儲(chǔ)器,地址范圍為0000H~FFFFH。單片機(jī)使用R0、R1或DPTR來(lái)存放這些地址,通過(guò)地址尋找存儲(chǔ)于其中的數(shù)據(jù),這種方法叫做寄存器間接尋址。
當(dāng)使用8位的R0、R1時(shí),以頁(yè)面方式尋址。頁(yè)內(nèi)地址即低8位地址由R0、R1決定,共256B;頁(yè)面地址即高8位地址由P2決定,共256B。當(dāng)用16位DPTR寄存器尋址時(shí),即可在64KB范圍內(nèi)尋址。片外數(shù)據(jù)存儲(chǔ)器的地址空間與程序存儲(chǔ)器的地址空間是重合的,但兩者的尋址指令和控制線不同。程序存儲(chǔ)器的訪問(wèn)指令為MOVC,控制線為,而片外數(shù)據(jù)存儲(chǔ)器的訪問(wèn)指令為MOVX,讀/寫(xiě)控制線為、。所以,盡管地址重合,也不會(huì)造成混亂。知識(shí)2匯編語(yǔ)言與指令系統(tǒng)概述
1.計(jì)算機(jī)語(yǔ)言
計(jì)算機(jī)語(yǔ)言隨著計(jì)算機(jī)的發(fā)展而發(fā)展,它的種類很多,主要分為機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言。
1)機(jī)器語(yǔ)言
機(jī)器語(yǔ)言就是用二進(jìn)制編碼表示每條指令。因?yàn)橛?jì)算機(jī)只能識(shí)別二進(jìn)制數(shù),所以計(jì)算機(jī)只能夠直接執(zhí)行用機(jī)器語(yǔ)言編寫(xiě)的機(jī)器碼程序。不同種類的計(jì)算機(jī),由于其內(nèi)部結(jié)構(gòu)不完全相同,它的機(jī)器碼指令也不一定相同。
例如,用單片機(jī)AT89C51機(jī)器碼指令完成“9+5”的操作,所用的機(jī)器碼指令如下:
0111010000001001 ;該指令將9存入累加器A中
0010010000000101 ;該指令將累加器A與5相加,
并把結(jié)果存入累加器A中
如果將以上兩條指令輸入單片機(jī)中,就可以直接執(zhí)行。顯然,用機(jī)器碼指令編寫(xiě)程序,指令難以記憶,程序可讀性和移植性差,不易查錯(cuò)和修改,限制了計(jì)算機(jī)的使用和推廣。
2)匯編語(yǔ)言
匯編語(yǔ)言是符號(hào)化的機(jī)器語(yǔ)言。它用一些容易理解和記憶的符號(hào)代替機(jī)器碼指令,因此又把匯編語(yǔ)言稱為助記符語(yǔ)言,也就是說(shuō)助記符指令與機(jī)器碼指令是一一對(duì)應(yīng)的。匯編語(yǔ)言同機(jī)器語(yǔ)言一樣,不同結(jié)構(gòu)的計(jì)算機(jī),其匯編指令也不相同。上述“9+5”的例子用AT89C51匯編語(yǔ)言可寫(xiě)成:
MOVA,#09H
ADDA,#05H對(duì)比機(jī)器碼,匯編語(yǔ)言克服了機(jī)器語(yǔ)言的缺點(diǎn),方便了用戶記憶指令和編寫(xiě)程序,但用匯編語(yǔ)言編寫(xiě)的源程序畢竟不是計(jì)算機(jī)能直接識(shí)別的機(jī)器碼,需用匯編程序“翻譯”成機(jī)器碼后方可執(zhí)行。這就是匯編過(guò)程—首先將助記符指令編譯成機(jī)器碼指令,然后交給計(jì)算機(jī)硬件來(lái)執(zhí)行。
采用匯編語(yǔ)言編寫(xiě)程序,可以直接訪問(wèn)和操作單片機(jī)中的寄存器及存儲(chǔ)器單元,對(duì)數(shù)據(jù)的處理表述得非常具體。
3)高級(jí)語(yǔ)言
高級(jí)語(yǔ)言是接近自然語(yǔ)言和數(shù)學(xué)語(yǔ)言的算法語(yǔ)言,具有直觀、通用等特點(diǎn)。相對(duì)于高級(jí)語(yǔ)言,機(jī)器語(yǔ)言和匯編語(yǔ)言屬于低級(jí)語(yǔ)言。用低級(jí)語(yǔ)言編寫(xiě)程序需要完全了解CPU硬件結(jié)構(gòu),對(duì)程序設(shè)計(jì)人員要求較高,且程序不能移植。高級(jí)語(yǔ)言避免了低級(jí)語(yǔ)言的上述問(wèn)題,提高了編寫(xiě)程序的效率,使計(jì)算機(jī)的應(yīng)用得到了普及。但高級(jí)語(yǔ)言必須經(jīng)過(guò)編譯程序編譯成目標(biāo)代碼后才能被CPU執(zhí)行。
AT89C51單片機(jī)控制程序既可采用匯編語(yǔ)言編寫(xiě),也可采用高級(jí)語(yǔ)言編寫(xiě)。兩者的特點(diǎn)上面已經(jīng)分析過(guò)—匯編語(yǔ)言可以直接訪問(wèn)和操作單片機(jī)中的寄存器和存儲(chǔ)單元,高級(jí)語(yǔ)言的編寫(xiě)效率高,因此在具體設(shè)計(jì)時(shí),開(kāi)發(fā)者應(yīng)根據(jù)具體情況靈活選擇。一般計(jì)算和處理較為復(fù)雜的項(xiàng)目選用高級(jí)語(yǔ)言編程,而對(duì)于偏重于利用硬件控制的課題則采用匯編語(yǔ)言更為具體清晰。甚至可以采用高級(jí)語(yǔ)言和匯編語(yǔ)言混合編程。
2.匯編指令格式
將30H、3lH兩個(gè)單元中的大數(shù)送入A中,匯編源代碼
如下:
MOV A,30H
CJNE A,31H,BIG
BIG: JNC OVER;30H單元值大則結(jié)束
MOV A,31H;31H單元值大則送入累加器A中
OVER: RET從上例可以看出,AT89C51單片機(jī)匯編語(yǔ)言指令格式如下:
[標(biāo)號(hào):]操作碼操作數(shù)[;注釋]
其中,[]部分為可選項(xiàng)。下面結(jié)合程序?qū)χ噶罡袷街械母鞑糠种鹨患右哉f(shuō)明:
(1)標(biāo)號(hào)是表示該指令位置的符號(hào)地址。它以英文字母開(kāi)始,由1~8個(gè)字母或數(shù)字組成,其后必須跟“:”,通常在子程序或轉(zhuǎn)移指令的目標(biāo)地址處使用標(biāo)號(hào)。標(biāo)號(hào)不能使用匯編語(yǔ)言已有的助記符、寄存器、偽指令符號(hào),且同一程序段中不能使用相同的標(biāo)號(hào)。上例中的“BIG”、“OVER”都是標(biāo)號(hào)。
(2)操作碼指出了指令所要實(shí)現(xiàn)的操作功能。如上例中的“MOV”用來(lái)完成數(shù)據(jù)的傳送,“CJNE”用于操作數(shù)的比
較等。
(3)操作數(shù)指出了參與操作的數(shù)據(jù)來(lái)源(源操作數(shù))和操作結(jié)果存放的目的單元(目的操作數(shù))。指令可以由一個(gè)或多個(gè)操作數(shù)組成,操作數(shù)與操作數(shù)之間用“,”分隔。操作數(shù)可以是一個(gè)數(shù)(立即數(shù)),也可以是存放了操作數(shù)的寄存器或存儲(chǔ)單元的直接地址。操作數(shù)中的立即數(shù)可以是二進(jìn)制數(shù)、八進(jìn)制數(shù)、十六進(jìn)制數(shù)和十進(jìn)制數(shù)。在匯編程序設(shè)計(jì)中,大多數(shù)采用十六進(jìn)制數(shù)。若十六進(jìn)制操作數(shù)以字符A~F中的某個(gè)開(kāi)頭時(shí),還要在其前面加一個(gè)前導(dǎo)“0”,以區(qū)別于字符A~F。
(4)注釋是對(duì)一條指令或一段程序的解釋和說(shuō)明,目的是方便程序的閱讀。程序運(yùn)行時(shí)對(duì)注釋不進(jìn)行任何操作。由于匯編語(yǔ)言的可讀性較差,系統(tǒng)開(kāi)發(fā)或應(yīng)用編程時(shí),注釋是非常必要的,它可以方便程序的修改和維護(hù)。注釋必須以“;”開(kāi)頭,上例中“;”后面的內(nèi)容都是注釋。
3.指令系統(tǒng)概述
匯編語(yǔ)言是助記符語(yǔ)言,可增加程序的可讀性,但匯編語(yǔ)言并不能被計(jì)算機(jī)所理解。因此編寫(xiě)好的匯編源代碼,必須經(jīng)過(guò)特殊的編譯工具,轉(zhuǎn)換為相應(yīng)的機(jī)器指令,并存儲(chǔ)在單片機(jī)的程序存儲(chǔ)器中,這樣程序才能自動(dòng)被CPU執(zhí)行,進(jìn)行相應(yīng)的控制。
根據(jù)機(jī)器碼指令在存儲(chǔ)器中占用空間的情況,可以將指令作如下分類:
(1)單字節(jié)指令。單字節(jié)指令(匯編之后的機(jī)器碼)格式由8位二進(jìn)制編碼表示。例如:
CLRA→E4H
(2)雙字節(jié)指令。雙字節(jié)指令格式由兩個(gè)字節(jié)組成,包含操作碼和操作數(shù)。例如:
MOVA,#10H→74H10H
(3)三字節(jié)指令。三字節(jié)指令格式中,第一個(gè)字節(jié)為操作碼,后兩個(gè)字節(jié)為操作數(shù)。
例如:
MOV40H,#30H→75H40H30H指令的另一個(gè)重要性能就是其執(zhí)行時(shí)間。計(jì)算機(jī)執(zhí)行指令時(shí)間的長(zhǎng)短并不取決于指令所占存儲(chǔ)器的字節(jié)數(shù),而取決于所占用的機(jī)器周期數(shù)。在111條指令中,有64條是單機(jī)器周期指令,45條是雙機(jī)器周期指令,兩條是四機(jī)器周期指令。
AT89C51單片機(jī)指令系統(tǒng)與廣泛使用的MCS-51系列單片機(jī)指令系統(tǒng)完全兼容。知識(shí)3尋址方式
所謂尋址方式,就是找到存放操作數(shù)的地址并把操作數(shù)提取出來(lái)的方法。牢固掌握尋址方式,對(duì)學(xué)習(xí)單片機(jī)原理及程序設(shè)計(jì)有著重要的意義。
在介紹指令之前,首先將指令系統(tǒng)中經(jīng)常用到的一些符號(hào)的意義作簡(jiǎn)要的介紹。
(1)?Rn(n=0~7):表示8個(gè)通用寄存器R0~R7。
(2)?Ri(i=0或1):表示兩個(gè)寄存器R0、R1,它們常在寄存器間接尋址中作為8位地址指針。
(3)?#data8:表示8位立即數(shù),即包含在指令中的8位常數(shù),如#10或#01101101B。
(4)?#data16:表示16位立即數(shù),即包含在指令中的16位常數(shù),如#2010H。
(5)?direct:表示片內(nèi)RAM(含特殊功能寄存器)的直接地址。
(6)?addr11:表示11位目的地址。
(7)?addr16:表示16位目的地址。
(8)?rel:表示
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年人造板類家具項(xiàng)目合作計(jì)劃書(shū)
- 2024年重樓種苗采購(gòu)與銷售專項(xiàng)協(xié)議版B版
- KTV裝飾裝修音響系統(tǒng)設(shè)備合同
- 家居建材市場(chǎng)寬帶施工合作協(xié)議
- 養(yǎng)殖場(chǎng)品牌運(yùn)營(yíng)合同范本
- 2024年高科技合同范例3篇
- 招投標(biāo)代理公司供應(yīng)商評(píng)估準(zhǔn)則
- 續(xù)簽合同書(shū)樣本
- 家政服務(wù)廣告制作投標(biāo)模板
- 隧道加固改造協(xié)議
- 2023年7月中央電大行政管理本科《行政法與行政訴訟法》期末考試
- 礦井軌道質(zhì)量標(biāo)準(zhǔn)及架線維護(hù)規(guī)程
- 打字測(cè)試評(píng)分標(biāo)準(zhǔn)
- VBOXTools軟件操作手冊(cè)
- 外研版(三年級(jí)起點(diǎn))五年級(jí)上冊(cè)重點(diǎn)知識(shí)點(diǎn)復(fù)習(xí)
- 2023-2024學(xué)年四川省涼山州小學(xué)數(shù)學(xué)六年級(jí)上冊(cè)期末自測(cè)試卷
- 2023年報(bào)告文學(xué)研究(自考)(重點(diǎn))題庫(kù)(帶答案)
- GB/T 18691.5-2021農(nóng)業(yè)灌溉設(shè)備灌溉閥第5部分:控制閥
- 安全帶管理登記臺(tái)帳
- 第26課《詩(shī)詞五首-漁家傲》課件【教材精講精研】部編版語(yǔ)文八年級(jí)上冊(cè)
- 湖南省高等教育自學(xué)考試 畢業(yè)生登記表
評(píng)論
0/150
提交評(píng)論