《【大學(xué)課件】解剖單片機》由會員分享,可在線閱讀,更多相關(guān)《【大學(xué)課件】解剖單片機(35頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 1 第7章 解剖單片機AT89S51單片機的內(nèi)部結(jié)構(gòu) 2 第7章 解剖單片機7.1 單片機的功耗7.1.1 運行功耗 3 在時鐘頻率較高時,如表中的4.0MHz,單片機運算速度較快,相應(yīng)的1.25mA工作電流比在時鐘頻率為1.0MHz時的550A工作電流要高。12MHz下的運行功耗達(dá)25mA。 第7章 解剖單片機7.1.2 I/O口驅(qū)動功耗 4 I/O口都會使能驅(qū)動電路去控制功率較大的外設(shè),如蜂鳴器、電機等。根據(jù)AT89S51單片機的技術(shù)手冊,其I/O口的輸出電流不能超過15mA。所以在談I/O口驅(qū)動功耗時,我們更多關(guān)注的是外設(shè)通過驅(qū)動電路所消耗的功率。 第7章 解剖單片機7.2 單片機內(nèi)部
2、結(jié)構(gòu)7.2.1從I/O口到內(nèi)部結(jié)構(gòu) 5比較一下圖(a)和(b),前者顯示出4根數(shù)據(jù)線:讀鎖存器、內(nèi)部總線、寫鎖存器、讀管腳。這4根數(shù)據(jù)線與單片機內(nèi)部結(jié)構(gòu)中的總線相連。而后者則用一個雙向箭頭( )來表示這4根數(shù)據(jù)線,說明鎖存器與總線之間的關(guān)系。 第7章 解剖單片機7.2.1從I/O口到內(nèi)部結(jié)構(gòu) 6 可把整個P1口都抽象出一個結(jié)構(gòu)框圖,如圖示,其中把8位I/O口的獨立結(jié)構(gòu)抽象到了P1口鎖存器和P1口驅(qū)動兩個方框中,這與圖7-1所示的P0、P1、P2、P3口結(jié)構(gòu)是一致的。由于I/O口都是雙向的,所有的數(shù)據(jù)線都使用雙向箭頭。 第7章 解剖單片機7.2.2數(shù)據(jù)在內(nèi)部交換 7 舉例:RAM是單片機的隨機訪
3、問存儲器,用于存儲運行過程中的數(shù)據(jù)。假設(shè)RAM中地址30H上存儲了數(shù)據(jù)“3CH”,現(xiàn)在單片機執(zhí)行指令“MOV A,30H”,之后,RAM中地址30H上的數(shù)據(jù)3CH“跑”到總線上,而累加器A根據(jù)指令要求,從總線上接收這個數(shù)據(jù),執(zhí)行完畢后,A=3CH。 第7章 解剖單片機7.2.3算術(shù)邏輯單元(ALU) 8 ALU為“進行算術(shù)運算和邏輯運算的處理單元”。它能進行加、減法等算術(shù)運算,也能做與、或、異或等邏輯運算。ALU就是單片機的“CPU”,ALU的輸入端A和B,它們的數(shù)據(jù)都來自總線,經(jīng)過ALU運算后,結(jié)果通過R又輸出到總線上。在運算過程中,ALU通過輸出D向程序狀態(tài)字PSW輸出狀態(tài),PSW會隨著A
4、LU的運算發(fā)生相應(yīng)的變化。如執(zhí)行加法指令A(yù)DD時,當(dāng)最高位有進位時,PSW的進位標(biāo)志C就被置1,這都?xì)w功于ALU通過D向PSW的C位輸出高電平。 第7章 解剖單片機7.3 單片機的程序存儲器7.3.1整體結(jié)構(gòu) 9 第7章 解剖單片機7.3.2程序下載到哪里? 10 以.HEX為后綴的執(zhí)行代碼文件可通過下載線下載到單片機中(4.4節(jié))。如果用記事本打開執(zhí)行代碼文件會得到一串十六進制數(shù),其中包含了每條指令的執(zhí)行代碼。比如指令“MOV A,#88H”執(zhí)行代碼為“74”、“88”,其他指令都可從附錄C中找到相應(yīng)的執(zhí)行代碼。執(zhí)行代碼通過下載線下載到了單片機的片內(nèi)ROM中。因為片內(nèi)ROM中下載的是程序,所
5、以也稱這個片內(nèi)ROM為片內(nèi)程序存儲器。 第7章 解剖單片機7.3.3片內(nèi)程序存儲器 11AT89S51單片機的片內(nèi)程序存儲器容量為4K bytes,即41024=4096 bytes。 這4096 bytes片內(nèi)程序存儲器可用地址0000H0FFFH來指向。在我們通過下載線往單片機下載程序時,執(zhí)行代碼將從0000H開始,被依次存儲到單片機中。如圖示的執(zhí)行代碼,存儲到0000H里的是74H,即“0111 0100”;0001H里的是88H,即“1000 1000”。按照這種方法直到程序全部下載完畢,根據(jù)程序的長短不同,程序存儲器被占用的空間多少也就不同。 第7章 解剖單片機7.3.4程序計數(shù)器P
6、C 12程序計數(shù)器PC,它用于指示單片機下一條將要執(zhí)行的代碼的地址。當(dāng)單片機上電復(fù)位時,PC=0000H,即指向程序存儲器中的0000H,單片機就把0000H上的代碼取出執(zhí)行。之后PC自動增加1,變成0001H,如圖示,接著單片機就執(zhí)行0001H地址上的代碼。 第7章 解剖單片機7.3.4程序計數(shù)器PC 13 由于程序計數(shù)器PC是個兩個字節(jié)(16位)的寄存器,于是受PC的制約,AT89S51單片機最大的尋址范圍是0000HFFFFH,共64K bytes。也就是說,除了AT89S51單片機片內(nèi)的4K bytes程序存儲器(地址0000H0FFFH)外,單片機能尋址的外部擴展的程序存儲器空間最大
7、為64 K bytes -4 K bytes =60K bytes,即地址1000HFFFFH。 第7章 解剖單片機7.3.5是片內(nèi)還是片外程序存儲器? 14 當(dāng) 接高電平時,單片機復(fù)位時讀取片內(nèi)程序存儲器中的程序,即從PC=0000H開始,依次讀取0000H0FFFH上的程序。當(dāng)PC增加到0FFFH時,PC再增加1等于1000H,單片機將自動轉(zhuǎn)到片外程序存儲器上執(zhí)行其中的程序。而當(dāng) 接低電平時,單片機則完全讀取片外程序存儲器中的程序,即從片外程序存儲器中的0000H開始,依次讀取程序來執(zhí)行。由于受到程序計數(shù)器PC的位數(shù)限制,讀取片內(nèi)或片外程序存儲器的最大地址范圍為0000HFFFFH。EA/
8、VPPEA/VPP 第7章 解剖單片機7.4 單片機的數(shù)據(jù)存儲器7.4.1片內(nèi)數(shù)據(jù)存儲器 15 單片機的數(shù)據(jù)存儲器也有片內(nèi)和片外之分。片內(nèi)數(shù)據(jù)存儲器就是單片機中原有的數(shù)據(jù)存儲器,即片內(nèi)RAM。片內(nèi)數(shù)據(jù)存儲器可分成三個部分:工作寄存器區(qū)、位尋址區(qū)、開放區(qū)。這三個區(qū)都可用來保存單片機運行過程所產(chǎn)生的數(shù)據(jù)。但片內(nèi)數(shù)據(jù)存儲器是一個RAM,即隨機訪問存儲器,在掉電后其中的數(shù)據(jù)將會丟失。 第7章 解剖單片機7.4.1片內(nèi)數(shù)據(jù)存儲器 16 單片機的1288-bit的片內(nèi)數(shù)據(jù)存儲器只有其中的20H7FH共96個字節(jié)(開放區(qū)+位尋址區(qū))給我們使用的,而00H1FH則是工作寄存器區(qū),一般通過工作寄存器R0R7來使
9、用。AT89S51單片機最大的數(shù)據(jù)存儲器(片內(nèi)片外)尋址范圍也為0000HFFFFH,共64K bytes的空間。 第7章 解剖單片機7.4.2工作寄存器區(qū)(00H 1FH) 17 工作寄存器共有8個,分別為R0、R1、R2、R3、R4、R5、R6、R7,前面有許多程序已經(jīng)涉及工作寄存器。這8個工作寄存器可以用來裝載1個字節(jié)長度的數(shù)據(jù),在程序中可視為一個變量來使用,常常用來作為計數(shù)值、顯示值等。指令“MOV R0,#24H”,把立即數(shù)24H裝載到工作寄存器R0中。 第7章 解剖單片機7.4.2工作寄存器區(qū)(00H 1FH) 18 工作寄存器R0R7指向片內(nèi)數(shù)據(jù)存儲器中的地址,當(dāng)單片機上電復(fù)位時
10、,R0R7映射片內(nèi)數(shù)據(jù)存儲器的00H07H,即第0組。執(zhí)行指令“MOV R0,#24H” ,立即數(shù)24H裝載到R0,實際上被裝載到00H地址空間上。執(zhí)行“MOV R5,#3FH”,那R5映射的片內(nèi)數(shù)據(jù)存儲器05H地址上即被裝載3FH。 第7章 解剖單片機7.4.2工作寄存器區(qū)(00H 1FH) 19工作寄存器R0R7除了映射片內(nèi)數(shù)據(jù)存儲器的地址00H07H外,還可以映射向其余的地址08H1FH。工作寄存器可用不同組別來稱呼。 第7章 解剖單片機7.4.2工作寄存器區(qū)(00H 1FH) 20AT89551單片機上電復(fù)位時工作寄存器默認(rèn)的組別是第0組,即R0R7映射00H07H。如果想改變當(dāng)前程序
11、使用的工作寄存器組別,可以通過更改程序狀態(tài)字PSW中的第3位(RS0)和第4位(RS1)。 第7章 解剖單片機7.4.3位尋址區(qū)(20H2FH) 21 片內(nèi)數(shù)據(jù)存儲器的20H2FH(共16個字節(jié))為位尋址區(qū),這16個字節(jié)共有168=128位的空間可進行位尋址。位尋址的意思是可對某一位單獨進行操作,比如指令SETB可讓位尋址區(qū)的任何一位置1,指令CLR可清0位尋址區(qū)的任何一位。 第7章 解剖單片機7.4.3位尋址區(qū)(20H2FH) 22 在使用位尋址區(qū)時,并不是直接操作20H2FH這16個地址,而是用圖示的映射地址來完成。假如程序中需要把20H上的B0位清0,就需要操作20H上的B0位所映射的地
12、址00H,于是指令可設(shè)計為:“CLR 00H”。再如想把2AH上的B4位置1,指令則為“SETB 54H”。 第7章 解剖單片機7.4.4開放區(qū)(30H7FH) 23片內(nèi)數(shù)據(jù)存儲器的地址30H7FH是開放給用戶使用的空間,用戶可以在這段空間里存儲單片機運行時產(chǎn)生的數(shù)據(jù),也可以讀取存儲的數(shù)據(jù)到工作寄存器、累加器等中。例如以下指令實現(xiàn)將累加器A的數(shù)據(jù)載入33H上,執(zhí)行過后(33H)=8FH。 第7章 解剖單片機7.5 單片機的特殊功能寄存器7.5.1特殊功能寄存器分布圖 24 AT89S51單片機共有26個特殊功能寄存器,位于地址80H0FFH上。其中有前面使用過的累加器A、程序狀態(tài)字PSW、P0
13、P3口等。 第7章 解剖單片機7.5.2特殊功能寄存器的功能 25 AT89S51單片機多個內(nèi)部功能模塊如中斷控制、Timer0/1、串行口等都由特殊功能寄存器控制。每個特殊功能寄存器的長度都是1個字節(jié),它們的詳細(xì)介紹將在隨后的章節(jié)中詳細(xì)展開。 第7章 解剖單片機7.5.3特殊功能寄存器的字節(jié)操作 26 操作特殊功能寄存器寄存器的過程,實際就是控制單片機充分發(fā)揮自身功能的過程。例如指令“MOV P1,#00H”,這條指令把立即數(shù)00H從P1口送出去。P1也是特殊功能寄存器的一份子,它的地址為90H。所以指令“MOV P1,#00H”就是對特殊功能寄存器的操作,會讓特殊功能寄存器區(qū)的(90H)=
14、00H。以上這種操作我們稱為字節(jié)操作,因為在執(zhí)行“MOV P1,#00H”時,P1就像一個符號,實際上立即數(shù)是送到P1對應(yīng)的特殊功能寄存器地址空間上,也就是90H。所以,這和我們往片內(nèi)數(shù)據(jù)存儲器的開放區(qū)某一個地址裝載1個字節(jié)的數(shù)據(jù)的過程是一樣的。 第7章 解剖單片機7.5.4特殊功能寄存器的位操作 27 某些特殊功能寄存器還支持位操作,比較常用的是置1指令“SETB”和清0指令“CLR”。例如指令“CLR P2.0”將P2.0清0。執(zhí)行這條指令后,只有P2.0 =0,之相連的發(fā)光二極管點亮。而P2.1P2.7仍然保持原來的狀態(tài)。支持位操作的特殊功能寄存器:P0(P0口鎖存器) P1(P1口鎖存
15、器)P2(P2口鎖存器)P3(P3口鎖存器)ACC(累加器)B(B寄存器)PSW(程序狀態(tài)字寄存器)TCON(定時/計數(shù)器控制寄存器)SCON(串行口控制寄存器)IE(中斷使能寄存器)IP(中斷優(yōu)先控制寄存器) 第7章 解剖單片機7.6 應(yīng)用體驗用取表方式實現(xiàn)流水燈7.6.1 取表法 28 要實現(xiàn)流水燈需要在P2口按圖示依次輸出每一行數(shù)據(jù),如果用十六進制表示每一行數(shù)據(jù)為:FEH、FDH、FBH、F7H、EFH、DFH、BFH、7FH。取表法的思路就是把這些數(shù)據(jù)預(yù)先放在一個數(shù)據(jù)表中,作為程序的一部分。單片機執(zhí)行時每次取一個數(shù)據(jù)從P2口送出,延時后再取下一個數(shù)據(jù)送出,這樣就可以從發(fā)光二極管上看到流
16、水燈的效果了。 第7章 解剖單片機7.6.1 取表法 29 第7章 解剖單片機7.6.1 取表法 30 第7章 解剖單片機7.6.3 體驗流水燈 31 第7章 解剖單片機7.7 實例解讀直接驅(qū)動七段數(shù)碼管7.7.1 需求分析7.7.2 電路設(shè)計 32單片機直接驅(qū)動七段數(shù)碼管以200ms為間隔,依次顯示0、1、2、3、4、5、6、7、8、9這10個數(shù)字。 第7章 解剖單片機7.7.3 軟件設(shè)計 33 根據(jù)表的亮段組合與顯示數(shù)字的關(guān)系,可得到對應(yīng)I/O口狀態(tài)與顯示數(shù)字的關(guān)系,比如要顯示“5”,顯示數(shù)據(jù)為12H。 第7章 解剖單片機7.7.3 軟件設(shè)計 34 第7章 解剖單片機7.7.3 軟件設(shè)計 35