您的位置:網(wǎng)站首頁 > 電器維修資料網(wǎng) > 正文 >
51系列單片機(jī)的內(nèi)部結(jié)構(gòu)
來源: 日期:2013-11-23 22:17:13 人氣:標(biāo)簽:
at89s51采用片內(nèi)、片外統(tǒng)一編址的64kb(ooooh~ffffh)程序存儲(chǔ)器地址空間。片內(nèi)有4kb flash memery,地址范圍為ooooh~offfh,既可在線編程(isp),也可以用傳統(tǒng)方法進(jìn)行編程。
采用匯編語言或c語言編寫的源程序,必須通過編譯軟件(如keil c51)把編譯生成二進(jìn)制代碼,即機(jī)器碼。用戶編寫的程序、原始數(shù)據(jù)、表格等,都是以二進(jìn)制的形式存放在程序存儲(chǔ)器中的。計(jì)算機(jī)的工作,就是按照事先編好的程序從ooooh地址單元一條條地循序執(zhí)行的。
當(dāng)at89s51(31)腳ea接高電平時(shí),從片內(nèi)rom中的ooooh地址單元開始執(zhí)行程序。當(dāng)at89s51(31)腳ea接低電平時(shí),片內(nèi)rom不起作用,cpu只能從片外rom中取指令。
內(nèi)部rom ooooh~002ah共43個(gè)單元,被分為六段,作為程序運(yùn)行的入口地址使用。其中:
0000h~0002h為復(fù)位后或初始化引導(dǎo)程序地址區(qū);0003h~000ah外部中斷0中斷入口地址區(qū);000bh~0012h定時(shí)器/計(jì)數(shù)器o中斷入口地址區(qū);0013h~001ah外部中斷1中斷入口地址區(qū);001bh~0022h定時(shí)器/計(jì)數(shù)器1中斷入口地址區(qū);0023h~002ah串行中斷入口地址區(qū)。
通常,我們編寫程序時(shí)不得占用上述中斷程序入口地址單元,即0003h~002ah單元。也就是說,主程序一般不放在該地址空間。編程時(shí),可以采用起始偽指令org,跳過0003h~002ah單元。
偽指令,是告訴匯編程序如何進(jìn)行匯編的一類指令,不會(huì)被匯編成機(jī)器代碼,只能為匯編軟件(如keilc51)所識(shí)別。
單片機(jī)復(fù)位后,是從0000h單元開始取指令執(zhí)行程序的。因此,應(yīng)在0000h~0002h三個(gè)單元存放一條無條件轉(zhuǎn)移指令,轉(zhuǎn)到主程序,程序結(jié)構(gòu)如下:
org000h;用偽指令org指示隨后的指令代碼從0000h地址單元開始存放。
ljmpstart;在0000h~0002h存放一條長跳轉(zhuǎn)指令,執(zhí)行該指令,程序轉(zhuǎn)到以start為語句標(biāo)號(hào)的地址執(zhí)行。
org0030h;偽指令org指示隨后的指令代碼從0030h地址單元開始存放。
start:;start是主程序入口地址標(biāo)號(hào),主程序開始。
end;結(jié)束偽指令,標(biāo)志程序代碼到此結(jié)束。
通過該程序,保留了各中斷入口地址。對(duì)各個(gè)中斷入口地址的使用,我們在學(xué)習(xí)中斷系統(tǒng)時(shí)再進(jìn)行介紹。
3.?dāng)?shù)據(jù)存儲(chǔ)器(ram)
單片機(jī)的數(shù)據(jù)存儲(chǔ)器有片內(nèi)和片外之分.a(chǎn)t89s51片內(nèi)有256字節(jié)ram,其中高128單元被專用寄存器占用,低128字節(jié)供用戶使用,用于存放可讀寫的數(shù)據(jù)。片外數(shù)據(jù)存儲(chǔ)器可擴(kuò)展6kb存儲(chǔ)空間,地址范圍為0000h~ffffh。片內(nèi)和片外ram的地址空間各自獨(dú)立,指令mov用于片內(nèi)數(shù)據(jù)存儲(chǔ)器之間的傳送,指令movx用于片外數(shù)據(jù)存儲(chǔ)器和累加器a之間的數(shù)據(jù)傳送。
at89s51內(nèi)部ram共有256字節(jié),通常分為低128字節(jié)(地址00h~7fh)和高128字節(jié)(地址80h~ffh)兩部分。低128字節(jié),按其用途分為三個(gè)區(qū)域,如下表所示。
(1)工作寄存器區(qū)
工作寄存器區(qū)有四組工作寄存器,每組8個(gè)寄存器,用于存放操作數(shù)及中間結(jié)果等。其地址為內(nèi)部ram的00h~1fh單元地址。在任一時(shí)刻,cpu只能使用其中一組寄存器,并把正在使用的那組寄存器稱為當(dāng)前寄存器組,用r0~r7表示。當(dāng)前使用的到底是哪一組工作寄存器,則由程序狀態(tài)字寄存器psw得rs1、rso位的狀態(tài)組合決定,下表為工作寄存器選擇。
rs1和rso的狀態(tài)可以通過指令修改,如指令:
setbrs1;置rs1為1
clrrs0;置rs0為0
置當(dāng)前工作寄存器為第2組,r0~r7的物理地址為10h~17h。
(2)位尋址區(qū)
內(nèi)部ram的20h~2fh單元,既可作為一般ram單元使用,進(jìn)行字節(jié)操作,也可以對(duì)各ram單元的每一位進(jìn)行位操作,因此,把該區(qū)又稱為位尋址區(qū)。位尋址區(qū)有16字節(jié)ram單元,共128位,位地址為00h~7fh。可以用位操作類指令對(duì)其進(jìn)行位操作。如指令:
clr00h;00h為位地址,而不是字節(jié)地址,將位地址00h清零setb07h;07h為位地址,不是字節(jié)地址,將位地址07h置1當(dāng)位地址為80h~ffh時(shí),所代表的是特殊功能寄存器的位地址。
如指令:clrp1.0clr90h
執(zhí)行的結(jié)果是一樣的,因?yàn)閜1.0的位地址就是90h。
(3)用戶ram區(qū)及堆棧
用戶ram區(qū),包括堆棧區(qū)和用戶標(biāo)志區(qū)等用戶自己設(shè)定的數(shù)據(jù)區(qū)。其地址在內(nèi)部ram低128單元中。如果用戶的程序要使用四組工作寄存器,其單元地址為30h~7fh,共80個(gè)單元,如果用戶程序不需要四組工作寄存器,則其中一部分工作寄存器區(qū)也可作用戶ram使用。用戶ram區(qū)中的堆棧,用來暫存數(shù)據(jù)和地址,它是按“先進(jìn)后出”
的原則存取數(shù)據(jù)的。
堆棧有進(jìn)棧和出棧兩種操作,由棧指針sp管理,分別采用壓棧和出棧指令push和pop進(jìn)行數(shù)據(jù)的存和取。
系統(tǒng)復(fù)位后,sp的值為07h,此時(shí)堆棧是從08h單元開始的。由于08h~1fh單元屬于工作寄存器1~3區(qū),如果程序中要用到這些區(qū), 好把sp值改為2fh或更大。堆棧 好在內(nèi)部ram的30h~7fh單元中開辟。sp值一經(jīng)確定,堆棧的位置也就確定下來了。由于sp可通過指令初始化為不同值,因此堆棧的位置是浮動(dòng)的。如:
movsp,#30h;sp賦初值30h,即置棧底位置clra;累加器a清零,(a)=00hpusha;sp自動(dòng)加1,(sp)=31h,再把a(bǔ)的內(nèi)容壓入31h中popa;把31h中的內(nèi)容彈出到a中,然后sp自動(dòng)減1,(sp)=30h說明:():表示某寄存器、存儲(chǔ)單元或表達(dá)式的內(nèi)容。(()):表示某寄存器、存儲(chǔ)單元或表達(dá)式的內(nèi)容為地址單元的內(nèi)容。
4.特殊功能寄存器(sfr)
內(nèi)部ram的高128單元是特殊功能寄存器區(qū),其單元地址為80h~ffh。本文只講解累加器acc。
累加器a是 常用的特殊功能寄存器。它既可存放操作數(shù),也可存放運(yùn)算的中間結(jié)果。51系列單片機(jī)(at89s51)中大部分單操作數(shù)指令的操作數(shù)取自累加器,許多雙操作數(shù)指令中的一個(gè)操作數(shù)也取自累加器。
如:指令mova,rn;把當(dāng)前工作寄存器的內(nèi)容送累加器a。指令mova,#data;把立即數(shù)data送累加器a。
5.定時(shí)器/計(jì)數(shù)器
51系列單片機(jī)(at89s51)共有2個(gè)16位定時(shí)器/計(jì)數(shù)器,用以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)功能,并以其定時(shí)或計(jì)數(shù)結(jié)果對(duì)計(jì)算機(jī)進(jìn)行控制。
6.并行i/o口
at89s51共有四個(gè)8位i/o口po、p1、p2、p3,以實(shí)現(xiàn)數(shù)據(jù)的并行輸入輸出。在下面的實(shí)例中,我們便是用p1口連接8只發(fā)光二極管,并通過程序?qū)ζ溥M(jìn)行控制。
7.串行口
at89s51有一個(gè)全雙工的串行口,以實(shí)現(xiàn)單片機(jī)和其他設(shè)備之間的串行數(shù)據(jù)傳送。該串行口既可作為全雙工異步通信收發(fā)器使用,也可作為同步移位器使用。
8.中斷控制系統(tǒng)
at89s51共有5個(gè)中斷源,即外中斷2個(gè)、定時(shí)/計(jì)數(shù)中斷2個(gè)、串行中斷1個(gè)。
綜上所述,51系列單片機(jī)(at89s51)雖然只是一個(gè)芯片,但具有計(jì)算機(jī)應(yīng)該具有的基本部件,是一個(gè)簡單的微型計(jì)算機(jī)系統(tǒng)。
【看看這篇文章在百度的收錄情況】