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