8051單片機.doc_第1頁
8051單片機.doc_第2頁
8051單片機.doc_第3頁
8051單片機.doc_第4頁
8051單片機.doc_第5頁
免費預覽已結(jié)束,剩余28頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

對于內(nèi)部有ROM的8051等單片機,正常運行時,則需接高電平,使CPU先從內(nèi)部的程序存儲中讀取程序,當PC值超過內(nèi)部ROM的容量時,才會轉(zhuǎn)向外部的程序存儲器讀取程序。 8051片內(nèi)有4kB的程序存儲單元,其地址為0000H0FFFH,單片機啟動復位后,程序計數(shù)器的內(nèi)容為0000H,所以系統(tǒng)將從0000H單元開始執(zhí)行程序。但在程序存儲中有些特殊的單元,這在使用中應加以注意: 其中一組特殊是0000H0002H單元,系統(tǒng)復位后,PC為0000H,單片機從0000H單元開始執(zhí)行程序,如果程序不是從0000H單元開始,則應在這三個單元中存放一條無條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶指定的程序。 另一組特殊單元是0003H002AH,這40個單元各有用途,它們被均勻地分為五段,它們的定義如下: 0003H000AH 外部中斷0中斷地址區(qū)。 000BH0012H 定時/計數(shù)器0中斷地址區(qū)。 0013H001AH 外部中斷1中斷地址區(qū)。 001BH0022H 定時/計數(shù)器1中斷地址區(qū)。 0023H002AH 串行中斷地址區(qū)。 可見以上的40個單元是專門用于存放中斷處理程序的地址單元,中斷響應后,按中斷的類型,自動轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務程序。但是通常情況下,每段只有8個地址單元是不能存下完整的中斷服務程序的,因而一般也在中斷響應的地址區(qū)安放一條無條件轉(zhuǎn)移指令,指向程序存儲器的其它真正存放中斷服務程序的空間去執(zhí)行,這樣中斷響應后,CPU讀到這條轉(zhuǎn)移指令,便轉(zhuǎn)向其他地方去繼續(xù)執(zhí)行中斷服務程序。 數(shù)據(jù)存儲器 數(shù)據(jù)存儲器也稱為隨機存取數(shù)據(jù)存儲器。MCS-51單片機的數(shù)據(jù)存儲器在物理上和邏輯上都分為兩個地址空間,一個是內(nèi)部數(shù)據(jù)存儲區(qū)和一個外部數(shù)據(jù)存儲區(qū)。MCS-51內(nèi)部RAM有128或256個字節(jié)的用戶數(shù)據(jù)存儲(不同的型號有分別),它們是用于存放執(zhí)行的中間結(jié)果和過程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲器均可讀寫,部分單元還可以位尋址。 8051內(nèi)部RAM共有256個單元,這256個單元共分為兩部分。其一是地址從00H7FH單元(共128個字節(jié))為用戶數(shù)據(jù)RAM。從80HFFH地址單元(也是128個字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。 在00H1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0R7,那么在程序中怎么區(qū)分和使用它們呢?聰明的INTEL工程師們又安排了一個寄存器程序狀態(tài)字寄存器(PSW)來管理它們,CPU只要定義這個寄存的PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關系如圖2所示。 內(nèi)部RAM的20H2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對它們的位進行尋址。位尋址區(qū)共有16個字節(jié),128個位,位地址為00H7FH。位地址分配如表1所示,CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為尋址區(qū)。 表1 RAM位尋址區(qū)地址表 單元地址 MSB 位地址 LSB 2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H 2EH 77H 76H 75H 74H 73H 72H 71H 70H 2DH 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H 2CH 67H 66H 65H 64H 63H 62H 61H 60H 2BH 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H 2AH 57H 56H 55H 54H 53H 52H 51H 50H 29H 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H 28H 47H 46H 45H 44H 43H 42H 41H 40H 27H 3FH 3EH 3DH 3CH 3BH 3AH 39H 38H 26H 37H 36H 35H 34H 33H 32H 31H 30H 25H 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 24H 27H 26H 25H 24H 23H 22H 21H 20H 23H 1FH 1EH 1DH 1CH 1BH 1AH 19H 18H 22H 17H 16H 15H 14H 13H 12H 11H 10H 21H 0FH 0EH 0DH 0CH 0BH 0AH 09H 08H 20H 07H 06H 05H 04H 03H 02H 01H 00H - 特殊功能寄存器 特殊功能寄存器(SFR)也稱為專用寄存器,特殊功能寄存器反映了MCS-51單片機的運行狀態(tài)。很多功能也通過特殊功能寄存器來定義和控制程序的執(zhí)行。 MCS-51有21個特殊功能寄存器,它們被離散地分布在內(nèi)部RAM的80HFFH地址中,這些寄存的功能已作了專門的規(guī)定,用戶不能修改其結(jié)構(gòu)。表2是特殊功能寄存器分布一覽表,我們對其主要的寄存器作一些簡單的介紹。 程序計數(shù)器PC(program Counter) 程序計數(shù)器在物理上是獨立的,它不屬于特殊內(nèi)部數(shù)據(jù)存儲器塊中。PC是一個16位的計數(shù)器,用于存放一條要執(zhí)行的指令地址,尋址范圍為64kB,PC有自動加1功能,即完成了一條指令的執(zhí)行后,其內(nèi)容自動加1。PC本身并沒有地址,因而不可尋址,用戶無法對它進行讀寫,但是可以通過轉(zhuǎn)移、調(diào)用、返回等指令改變其內(nèi)容,以控制程序按我們的要求去執(zhí)行。 累加器ACC(Accumulator) 累加器A是一個最常用的專用寄存器,大部分單操作指令的一個操作數(shù)取自累加器,很多雙操作數(shù)指令中的一個操作數(shù)也取自累加器。加、減、乘、除法運算的指令,運算結(jié)果都存放于累加器A或AB累加器對中。大部分的數(shù)據(jù)操作都會通過累加器A進行,它形象于一個交通要道,在程序比較復雜的運算中,累加器成了制約軟件效率的“瓶頸”,它的功能較多,地位也十分重要。以至于后來發(fā)展的單片機,有的集成了多累加器結(jié)構(gòu),或者使用寄存器陣列來代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的“交通堵塞”問題。提高單片機的軟件效率。 表2 特殊功能寄存器 標識符號 地址 寄存器名稱 ACC 0E0H 累加器 B 0F0H B寄存器 PSW 0D0H 程序狀態(tài)字 SP 81H 堆棧指針 DPTR 82H、83H 數(shù)據(jù)指針(16位)含DPL和DPH IE 0A8H 中斷允許控制寄存器 IP 0B8H 中斷優(yōu)先控制寄存器 P0 80H I/O口0寄存器 P1 90H I/O口1寄存器 P2 0A0H I/O口2寄存器 P3 0B0H I/O口3寄存器 PCON 87H 電源控制及波特率選擇寄存器 SCON 98H 串行口控制寄存器 SBUF 99H 串行數(shù)據(jù)緩沖寄存器 TCON 88H 定時控制寄存器 TMOD 89H 定時器方式選擇寄存器 TL0 8AH 定時器0低8位 TH0 8CH 定時器0高8位 TL1 8BH 定時器1低8位 TH1 8DH 定時器1高8位經(jīng)過12位AD轉(zhuǎn)換器后,接8051單片機,單片機輸出端用3個引腳去控制兩個執(zhí)行件,其中一個件用一個腳,另一個件用兩個腳單片機有P0.0P0.7,P1.0P1.7,P2.0P2.7,P3.0P3.7,這些引腳,怎么去分配???如果你的地址空間有余富的話 可以使用p2.7,p2.6,p2.5作為地址線,分別將兩個執(zhí)行件映射到單片機的地址空間,這樣可以按照訪問存儲器的方法使用movx指令進行控制。如果地址空間沒有余富或者說地址線不夠用,可以使用p1口的某三條線作為執(zhí)行件的選通信號,具體使用那一位可以根據(jù)你的系統(tǒng),只要沒有用到的p1口的管腳都可以使用。由于p3口多是復用管腳,因此在搞不清具體用法的時候,要慎用p3口。另外,如果涉及到時序問題,p1口是很好的選擇。8051有5個中斷源,它們是兩個外中斷INT0(P3.2)和INT1(P3.3)、兩個片內(nèi)定時/計數(shù)器溢出中斷TF0和TF1,一個是片內(nèi)串行口中斷TI或RI,這幾個中斷源由TCON和SCON兩個特殊功能寄存器進行控制。用8051單片機設計一數(shù)字式溫度計 的電路圖 有程序的最好這個電路很簡單,我說一下就可以了。數(shù)字式溫度傳感器用最常用的DS18B20,它只有3個管腳,一個接電源,一個接地,另一個接8051單片機就可以了。溫度值用數(shù)碼管顯示。這樣整個電路就接好了。如果樓主覺得我回答的可以別忘了給我加分哦,為了你的問題我花費了半天的時間啊。程序如下:#include#include #define uchar unsigned char #define uint unsigned int#define Self_Define_ISP_Download_Command 0x3Dsfr IAP_CONTR=0xE7;sbit DQ = P35; /DS18B20接入口uchar code table= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 ;char bai,shi,ge; /定義變量void Init_Com(void) TMOD = 0x20; SM0=0; SM1=1; REN=1; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; EA=1; ES=1;/*延時子函數(shù)*/void delay(uint num) while(num-) ;/*DS18b20溫度傳感器函數(shù)*/Init_DS18B20(void) /傳感器初始化 uchar x=0; DQ = 1; /DQ復位 delay(10); /稍做延時 DQ = 0; /單片機將DQ拉低 delay(80); /精確延時 大于 480us /450 DQ= 1; /拉高總線 delay(20); x=DQ; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay(30);/讀一個字節(jié)ReadOneChar(void) uchar i=0; uchar dat = 0; for (i=8;i0;i-) DQ = 0; / 給脈沖信號 dat=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0x80; delay(8); return(dat);/寫一個字節(jié)WriteOneChar(unsigned char dat) uchar i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(10); DQ = 1; dat=1; delay(8);/讀取溫度int ReadTemperature(void) uchar a,b; uint t; float tt; Init_DS18B20(); WriteOneChar(0xCC); / 跳過讀序號列號的操作 WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換 Init_DS18B20(); WriteOneChar(0xCC); /跳過讀序號列號的操作 WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度 a=ReadOneChar();/低位 b=ReadOneChar();/高位 tt=(b*256+a)*0.0625*100;/2個8位合成16位 t=(int)tt; /*t=b; t0;a-) for(b=100;b0;b-); /延時約1S IAP_CONTR = 0x60; else TI=0; 8051單片機的PO口用作通用I/O口輸入時,若通過TTL“OC”門輸入數(shù)據(jù),應該注意什么?為什么?需要上拉電阻。OC門電路無法輸出高低電平,只有靠上拉電阻才能實現(xiàn)。這是我剛寫的一個74HC595 驅(qū)動8段數(shù)碼管的,程序是讓數(shù)碼管0到9循環(huán)顯示求一個8051接74HC595 8段數(shù)碼管的C代碼#include sbit sclk=P20;sbit sda=P21;sbit slck=P22;int tab10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;void delay() int i,j;for(i=0;i255;i+)for(j=0;j80;j+);void bit_dat(bit i) sclk=0; sda=i; sclk=1;void dat(char i) slck=0;bit_dat(bit)(tabi&0x80);bit_dat(bit)(tabi&0x40);bit_dat(bit)(tabi&0x20);bit_dat(bit)(tabi&0x10);bit_dat(bit)(tabi&0x08);bit_dat(bit)(tabi&0x04);bit_dat(bit)(tabi&0x02);bit_dat(bit)(tabi&0x01);slck=1;main() int i;while(1) for(i=0;i10;i+)dat(i); delay();i=0;8051的時鐘周期,機器周期,指令周期是如何分配的?當振蕩頻率為10MHZ時,一個機器周期為多少微秒?8051的時鐘周期即CPU的晶振的振蕩頻率的振蕩周期(頻率的倒數(shù))當振蕩頻率為10MHZ時,振蕩周期=1/10MHZ=0.1us機器周期是完成一個基本操作的時間單元,一個機器周期=12個時鐘周期當振蕩頻率為10MHZ時,機器周期=12x0.1=1.2us8051的指令周期,指取出并執(zhí)行一條指令的時間。一般為1-4個機器周期指令集8051 INSTRUCTION SET1.Arithmetic operations:Mnemonic Byte CycADD A,Ri 1 1ADD A,Rn 1 1ADD A,direct 2 1ADD A,#data 2 1ADDC A,Ri 1 1ADDC A,Rn 1 1ADDC A,direct 2 1ADDC A,#data 2 1SUBB A,Ri 1 1SUBB A,Rn 1 1SUBB A,direct 2 1SUBB A,#data 2 1INC A 1 1INC Ri 1 1INC Rn 1 1INC DPTR 1 1INC direct 2 1INC direct 2 1DEC A 1 1DEC Ri 1 1DEC Rn 1 1DEC direct 2 1MUL AB 1 4DIV AB 1 4DA A 1 12.Logical opreations:ANL A,Ri 1 1XRL A,Ri 1 1ANL A,Rn 1 1XRL A,Rn 1 1ANL A,direct 2 1XRL A,direct 2 1ANL A,#data 2 1XRL A,#data 2 1ANL direct,A 2 1XRL direct,A 2 1ANL direct,#data 3 2XRL direct,#data 3 2ORL A,Ri 1 1CLR A 1 1ORL A,Rn 1 1CPL A 1 1ORL A,direct 2 1RL A 1 1ORL A,#data 2 1RLC A 1 1ORL direct,A 2 1RR A 1 1ORL direct,#data 3 2RRC A 1 1SWAP A 1 13.Data transfer:Mnemonic Byte CycMOV A,Ri 1 1MOV DPTR,#data16 3 2MOV A,Rn 1 1MOVC A,A+DPTR 1 2MOV A,direct 2 1MOVC A,A+PC 1 2MOV A,#data 2 1MOVX A,Ri 1 2MOV Ri,A 1 1MOVX A,DPTR 1 2MOV Ri,direct 2 2MOVX Ri,A 1 2MOV Ri,#data 2 1MOVX DPTR,A 1 2MOV Rn,A 1 1PUSH direct 2 2MOV Rn,direct 2 2POP direct 2 2MOV Rn,#data 2 1XCH A,Ri 1 1MOV direct,A 2 1XCH A,Rn 1 1MOV direct,Ri 2 2XCH A,direct 2 1MOV direct,Rn 2 2XCHD A,Ri 1 1MOV direct,direct 3 2MOV direct,#data 3 24.Boolean variable manipulation:Mnemonic Byte CycCLR C 1 1ANL C,bit 2 2SETB C 1 1ANL C,/bit 2 2CPL C 1 1ORL C,bit 2 2CLR bit 2 1ORL C,/bit 2 2SETB bit 2 1MOV C,bit 2 1CPL bit 2 1MOV bit,C 2 25.Program and machine control:Mnemonic Byte CycNOP 1 1JZ rel 2 2RET 1 2JNZ rel 2 2RETI 1 2JC rel 2 2ACALL addr11 2 2JNC rel 2 2AJMP addr11 2 2JB bit,rel 3 2LCALL addr16 3 2JNB bit,rel 3 2LJMP addr16 3 2JBC bit,rel 3 2SJMP rel 2 2CJNE A,direct,rel 3 2JMP A+DPTR 1 2CJNE A,#data,rel 3 2DJNZ Rn,rel 2 2CJNE Ri,#data,rel 3 2DJNZ direct,rel 3 2CJNE Rn,#data,rel3 28051引腳功能8051 基本資料如下:8051 主要特性8051 引腳說明8051 中斷服務常式的進入點8051 特殊目的寄存器8051 內(nèi)部控制寄存器at89c51 為 ATMEL 所生產(chǎn)的可電氣燒錄清洗的 8051 相容單芯片,其內(nèi)部程序代碼容量為4KB8051主要功能列舉如下: 為一般控制應用的 8 位單芯片 晶片內(nèi)部具時鐘振蕩器(傳統(tǒng)最高工作頻率可至 12MHz) 內(nèi)部程式存儲器(ROM)為 4KB 內(nèi)部數(shù)據(jù)存儲器(RAM)為 128B 外部程序存儲器可擴充至 64KB 外部數(shù)據(jù)存儲器可擴充至 64KB 32 條雙向輸入輸出線,且每條均可以單獨做 I/O 的控制 5 個中斷向量源 2 組獨立的 16 位定時器 1 個全多工串行通信端口 8751 及 8752 單芯片具有數(shù)據(jù)保密的功能 單芯片提供位邏輯運算指令VCC8051 電源正端輸入,接+5V。VSS電源地端。XTAL1單芯片系統(tǒng)時鐘的反相放大器輸入端。XTAL2系統(tǒng)時鐘的反相放大器輸出端,一般在設計上只要在 XTAL1 和 XTAL2 上接上一只石英振蕩晶體系統(tǒng)就可以動作了,此外可以在兩引腳與地之間加入一 20PF 的小電容,可以使系統(tǒng)更穩(wěn)定,避免噪聲干擾而死機。RESET8051的重置引腳,高電平動作,當要對晶片重置時,只要對此引腳電平提升至高電平并保持兩個機器周期以上的時間,8051便能完成系統(tǒng)重置的各項動作,使得內(nèi)部特殊功能寄存器之內(nèi)容均被設成已知狀態(tài),并且至地址0000H處開始讀入程序代碼而執(zhí)行程序。EA/VppEA為英文External Access的縮寫,表示存取外部程序代碼之意,低電平動作,也就是說當此引腳接低電平后,系統(tǒng)會取用外部的程序代碼(存于外部EPROM中)來執(zhí)行程序。因此在8031及8032中,EA引腳必須接低電平,因為其內(nèi)部無程序存儲器空間。如果是使用 8751 內(nèi)部程序空間時,此引腳要接成高電平。此外,在將程序代碼燒錄至8751內(nèi)部EPROM時,可以利用此引腳來輸入21V的燒錄高壓(Vpp)。ALE/PROGALE是英文Address Latch Enable的縮寫,表示地址鎖存器啟用信號。8051可以利用這支引腳來觸發(fā)外部的8位鎖存器(如74LS373),將端口0的地址總線(A0A7)鎖進鎖存器中,因為8051是以多工的方式送出地址及數(shù)據(jù)。平時在程序執(zhí)行時ALE引腳的輸出頻率約是系統(tǒng)工作頻率的1/6,因此可以用來驅(qū)動其他周邊晶片的時基輸入。此外在燒錄8751程序代碼時,此引腳會被當成程序規(guī)劃的特殊功能來使用。PSEN此為Program Store Enable的縮寫,其意為程序儲存啟用,當8051被設成為讀取外部程序代碼工作模式時(EA=0),會送出此信號以便取得程序代碼,通常這支腳是接到EPROM的OE腳。8051可以利用PSEN及RD引腳分別啟用存在外部的RAM與EPROM,使得數(shù)據(jù)存儲器與程序存儲器可以合并在一起而共用64K的定址范圍。PORT0(P0.0P0.7)端口0是一個8位寬的開路汲極(Open Drain)雙向輸出入端口,共有8個位,P0.0表示位0,P0.1表示位1,依此類推。其他三個I/O端口(P1、P2、P3)則不具有此電路組態(tài),而是內(nèi)部有一提升電路,P0在當做I/O用時可以推動8個LS的TTL負載。如果當EA引腳為低電平時(即取用外部程序代碼或數(shù)據(jù)存儲器),P0就以多工方式提供地址總線(A0A7)及數(shù)據(jù)總線(D0D7)。設計者必須外加一鎖存器將端口0送出的地址栓鎖住成為A0A7,再配合端口2所送出的A8A15合成一完整的16位地址總線,而定址到64K的外部存儲器空間。PORT2(P2.0P2.7)端口2是具有內(nèi)部提升電路的雙向I/O端口,每一個引腳可以推動4個LS的TTL負載,若將端口2的輸出設為高電平時,此端口便能當成輸入端口來使用。P2除了當做一般I/O端口使用外,若是在8051擴充外接程序存儲器或數(shù)據(jù)存儲器時,也提供地址總線的高字節(jié)A8A15,這個時候P2便不能當做I/O來使用了。PORT1(P1.0P1.7)端口1也是具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個LS TTL負載,同樣地若將端口1的輸出設為高電平,便是由此端口來輸入數(shù)據(jù)。如果是使用8052或是8032的話,P1.0又當做定時器2的外部脈沖輸入腳,而P1.1可以有T2EX功能,可以做外部中斷輸入的觸發(fā)腳位。PORT3(P3.0P3.7)端口3也具有內(nèi)部提升電路的雙向I/O端口,其輸出緩沖器可以推動4個TTL負載,同時還多工具有其他的額外特殊功能,包括串行通信、外部中斷控制、計時計數(shù)控制及外部數(shù)據(jù)存儲器內(nèi)容的讀取或?qū)懭肟刂频裙δ?。其引腳分配如下:P3.0:RXD,串行通信輸入。P3.1:TXD,串行通信輸出。P3.2:INT0,外部中斷0輸入。P3.3:INT1,外部中斷1輸入。P3.4:T0,計時計數(shù)器0輸入。P3.5:T1,計時計數(shù)器1輸入。P3.6:WR:外部數(shù)據(jù)存儲器的寫入信號。P3.7:RD,外部數(shù)據(jù)存儲器的讀取信號。(1)累加器A(Accumulator)寫程序時大部分的指令運算都通過此寄存器,包括數(shù)據(jù)轉(zhuǎn)移、儲存運算結(jié)果和條件轉(zhuǎn)移判斷。(2)B寄存器此寄存器主要用于乘法及除法指令中,在乘法運算中存放乘積結(jié)果的高字節(jié)數(shù)據(jù);在除法運算中則存放余數(shù)。當然也可以做一般寄存器來使用。(3)程序狀態(tài)字PSW(Program Status Word)此寄存器用來存放CPU的狀態(tài),類似一般CPU的標志寄存器,使用者可以改變其值來控制CPU的執(zhí)行。(4)堆疊指針SP為8位的寄存器,用以指示目前堆疊區(qū)的存放位置,堆疊區(qū)最多只有256,而且一定在內(nèi)部RAM中,當8051系統(tǒng)重置后SP指向07H,因此程序一執(zhí)行時通常會將堆疊往后移,避免程序執(zhí)行時把堆疊破壞掉。(5)數(shù)據(jù)指針DPTR(Data Pointer)DPTR是一個16位寄存器,由DPH及DPL兩寄存器組成,系統(tǒng)DPTR可以看成是16位寄存器尋址到完整的64K存儲器空間或是看成兩個8位寄存器來加以利用。一旦當成16位寄存器便可利用指令MOVX A, DPTR來存取外部數(shù)據(jù)存儲器,或利用指令MOVC A, DPTR來存取外部程序存儲器。(6)P0、P1、P2、P3(端口0端口3)為8051 4個I/O端口的輸出鎖存寄存器。(7)TH0、TL0、TH1、TL1定時計數(shù)寄存器分別為定時器0及定時器1的工作寄存器,這二對寄存器可以做16位的計時計數(shù)用。(8)串行端口緩沖器SBUF(Serial Buffer)用來存放串行傳輸時數(shù)據(jù)進出的工作寄存器,經(jīng)由串行端口傳送數(shù)據(jù)出去是將數(shù)據(jù)寫入SBUF,而接收時則由SBUF內(nèi)讀出對方傳送來的數(shù)據(jù)。(9)控制寄存器IP、IE寄存器是做8051的中斷控制用;TMOD、TCON寄存器用來做計時計數(shù)器控制;SCON則控制串行傳輸?shù)墓ぷ髂J皆O定。PCON則做8051省電模式操作控制。8051內(nèi)部控制寄存器只有6個,想要充分發(fā)揮8051單芯片的功能必須對這些暫存器有所了解。IE、IP寄存器 :中斷控制用TMOD、TCON寄存器 :計時計數(shù)器用SCON寄存器 :串行傳輸控制PCON寄存器 :省電模式操作以下分別列表介紹??晌粚ぶ?,地址:A8HEA(IE.7) :EA=0時,所有中斷禁用(中斷不產(chǎn)生)。EA=1時,各中斷之產(chǎn)生由個別的啟用位決定。(IE.6) :保留。ET2(IE.5):啟用定時器 2 溢位之中斷(8052使用)。ES(IE.4) :啟用串行端口之中斷(ES=1啟用,ES=0禁用)。ET1(IE.3):啟用定時器1中斷。EX1(IE.2):啟用外部中斷INT1之中斷。ET0(IE.1):啟用定時器0中斷。EX0(IE.0):啟用外部中斷INT0之中斷??晌粚ぶ?,地址B8H。(IP.7) :保留。(IP.6) :保留。PT2(IP.5):設定定時器 2 之優(yōu)先次序(8052使用)。PS(IP.4) :設定串行端口之中斷優(yōu)先順序。PT1(IP.3):設定定時器 1 之優(yōu)先順序。PX1(IP.2):設定外部中斷 INT1 之優(yōu)先順序。PT0(IP.1):設定定時器 0 之優(yōu)先順序。PX0(IP.0):設定外部中斷 INT0 之優(yōu)先順序。不可位尋址,地址89H。定時器1 定時器0 GATE :定時器動作開關控制位,當GATE=1 時,INT0或INT1 引腳為高電平,同時TCON中的 TR0 或 TR1 控制位為1時,計時/計數(shù)器 0 或 1 才會動作。若GATE=0,則只要將TR0或TR1控制位設為1,計時/計數(shù)器0或1即可動作。C/T :做定時器或計數(shù)器功能之選擇位。C/T=1為計數(shù)器,由外部引腳 T0 或 T1 輸入計數(shù)脈沖。C/T=0時為定時器,由內(nèi)部系統(tǒng)時鐘提供計時工作脈沖。M1: 模式選擇位1。M0: 模式選擇位0??晌粚ぶ?,地址88H。TF1(TCON.7):定時器1溢位標志,當計時溢位時,由硬件設定為1,在執(zhí)行過相對的中斷服務常式后則自動清除為0。TR1(TCON.6):定時器1啟動控制位,可以由軟件來設定或清除。TR1=1時啟動定時器動作,TR1=0時關閉。TF0(TCON.5):定時器0溢位標志,當計時溢位時,由硬件設定為1,在執(zhí)行過相對的中斷服務常式后則自動清除為0。TR0(TCON.4):定時器0啟動控制位,可以由軟件來設定或清除。TR0=1時,啟動定時器動作,TR0=0時關閉。IE1(TCON.3):外部中斷1動作標志,當外部中斷被偵測出來時,硬件自動設定此位,在執(zhí)行過中斷服務常式后,則消除為0。IT1(TCON.2):外部中斷1動作型式選擇,IT1=1時,由下降緣產(chǎn)生外部中斷,IT1=0時,則為低電平產(chǎn)生中斷。IE0(TCON.1):外部中斷0動作標志,當外部中斷被偵測出來時,硬件自動設定此位,在執(zhí)行過中斷服務常式后,則清除為0。IT0(TCON.0):外部中斷0動作型式選擇,IT0=1時為下降緣產(chǎn)生外部中斷,IT0=0 時則為低電平產(chǎn)生中斷??晌粚ぶ罚刂?8H。SM0(SCON.7):串行端口模式設定位0。SM1(SCON.6):串行端口模式設定位1。SM2(SCON.5):8051連接多重處理器通信的控制位。REN(SCON.4):串行通信接收啟用信號,該位可以由軟件來設定。TB8(SCON.3):在串行通信模式2和模式3操作時第9個傳送數(shù)據(jù)位。RB8(SCON.2):在串行通信模式2和模式3操作時第9個接收數(shù)據(jù)位。TI(SCON.1) :串行通信傳送的中斷處理標志。RI(SCON.0) :負責串行通信接收的中斷處理標志。模式選擇:不可位尋址,地址87H。SMOD:雙倍波特率產(chǎn)生控制位。 :保留3位。GF1 :一般用途標志。GF0 :一般用途標志。PD :降低8051功率消耗控制位,PD=1時設定,PD=0為清除。IDL :8051晶片閑置狀態(tài)操作控制位。8051的基本電路中接入時鐘脈沖有什么用時鐘脈沖?是晶振嗎?若是問晶振,因為單片機內(nèi)部電路說到底就是個時序邏輯電路(含有鎖存器、觸發(fā)器等),而時序邏輯電路與組合邏輯電路最大的不同就是它需要時鐘,這樣它才能被啟動工作、確定內(nèi)部各器件狀態(tài)改變的先后順序,以正常工作。而晶振是由石英晶體做成,能發(fā)出頻率很穩(wěn)定的脈沖,可以作為單片機的時鐘標準。單片機電子實時時鐘/萬年日歷系統(tǒng)懸賞分:0 - 提問時間2006-5-30 17:58 【一】題目:電子實時時鐘/萬年日歷系統(tǒng)【二】本方案實現(xiàn)功能: 1顯示準確的北京時間(時、分、秒)及公歷日期顯示功能(年、月、日)2可通過按鍵切換年、月、日及時、分、秒的顯示狀態(tài)3可隨時可以調(diào)校年、月、日或時、分、秒4可每次增減一進行時間調(diào)節(jié),也可快速增減進行時間調(diào)節(jié)5有鬧鐘功能,模擬真實鬧鐘聲音,鬧鐘聲音由緩慢逐漸變?yōu)榧贝?附帶秒表功能7可動態(tài)完整顯示年份,實現(xiàn)真正的萬年歷【三】方案考慮:1硬件方案:(1)led數(shù)碼管:采用8只數(shù)碼管實現(xiàn)顯示功能。(2)按鍵:采用4個按鍵實現(xiàn)調(diào)節(jié)時間,跳轉(zhuǎn)執(zhí)行功能等。? 按鍵分布 ? 按鍵功能:1) 按鍵1:短按轉(zhuǎn)換年月日/時分秒;長按進入鬧鐘設置。2) 按鍵2:短按移位修改;在正常計時狀態(tài)下長按進入秒表;在鬧鐘設置狀態(tài)下長按開鬧鐘。3) 按鍵3:在修改狀態(tài)下短按被修改位逐步加一,長按被修改位快速增加;在正常計時并顯示年月日狀態(tài)下短按顯示完整年月。4) 按鍵4:在修改狀態(tài)下短按被修改位逐步減一,長按被修改位快速減少;在正常計時并顯示年月日狀態(tài)下短按顯示月日星期。按鍵數(shù)目考慮:采用4個按鍵的目的在于簡化操作。片機驅(qū)動LED數(shù)碼管有很多方法,按顯示方式分,有靜態(tài)顯示和 動態(tài)(掃描)顯示,按譯碼方式可分硬件譯碼和軟件譯碼之分。 靜態(tài)顯示就是顯示驅(qū)動電路具有輸出鎖存功能,單片機將所要顯示的數(shù)據(jù),顯示數(shù)據(jù)穩(wěn)定,占用很少的CPU時間。動態(tài)顯示需要CPU時刻對顯示器件進行數(shù)據(jù)刷新,顯示數(shù)據(jù)有閃爍感,占用的CPU時間多。 這兩種顯示方式各有利弊;靜態(tài)顯示雖然數(shù)據(jù)穩(wěn)定,占用很少的CPU時間,但每個顯示單元都需要單獨的顯示驅(qū)動電路,使用的硬件較多; 動態(tài)顯示雖然有閃爍感,占用的CPU時間多,但使用的硬件少,能節(jié)省線路板空間。 硬件譯碼就是顯示的段碼完全由硬件完成,CPU只要送出標準的BCD碼即可,硬件接線有一定標準。軟件譯碼是用軟件來完成硬件的功能,硬件簡單,接線靈活,顯示段碼完全由軟件來處理,是目前常用的顯示驅(qū)動方式。 比較常用的顯示驅(qū)動芯片有: 74LS164 , CD4094+ULN2003(2803) ,74HC595+ULN2003(2803) , TPIC6B595,AMT9095B, AMT9595等許多。 另外,市場上還有一些專用的LED掃描驅(qū)動顯示模塊如MAX7219等,功能很強,價格稍高一些。下面是一個用74LS164驅(qū)動顯示的例子和一個用4094掃描驅(qū)動顯示的例子: 上例圖中加了一個PNP型的三極管來控制數(shù)碼管的電源,是因為164沒有數(shù)據(jù)鎖存端,數(shù)據(jù)在傳送過程中,對輸出端來說是透明的,這樣,數(shù)據(jù)在傳送過程中,數(shù)碼管上有閃動現(xiàn)象,驅(qū)動的位數(shù)越多,閃動現(xiàn)象越明顯。為了消除這種現(xiàn)象,在數(shù)據(jù)傳送過程中,關閉三極管使數(shù)碼管沒電不顯示,數(shù)據(jù)傳送完后立刻使三極管導通,這樣就實現(xiàn)鎖存功能。這種辦法可驅(qū)動十幾個164顯示而沒有閃動現(xiàn)象。 這個例子是用4094做位選,用89C2051的P1口線做段驅(qū)動來掃描驅(qū)動9位數(shù)碼管的顯示。 由于4094只有8個輸出口線,其中第九位是用CPU口線直接進行位選的。9個LED的所有相同位置的段口線都接到一起,然后接到單片機的一個口線上,供八段,使用8條CPU口線。其軟件的工作過程是這樣的:要在LED上顯示1-9位數(shù),首先將1的段碼送到P1口線上,然后向4094送位選數(shù)據(jù)01,使4094的Q1口線輸出高電平,選中第一位數(shù)碼管,使陽極得電,在第一位上就顯示出1,重復上述過程,一直到第九位,然后不斷重復這一過程,就實現(xiàn)了掃描顯示?;趩纹瑱C總線方式的數(shù)碼管接口電路(1)在開發(fā)單片機的過程中,常常會因為資源不足而不得不大量擴展接口芯片以滿足應用系統(tǒng)的需要,其中原因之一就是人機界面中的鍵盤、顯示占用了系統(tǒng)太多資源,造成系統(tǒng)龐大,并降低了系統(tǒng)的可靠性。在單片機應用系統(tǒng)中。通常鍵盤、顯示可以采用一些通用或?qū)S眯酒M行擴展,以節(jié)省單片機資源,但和系統(tǒng)開銷之間有不可調(diào)和的矛盾。為解決這一問題,我們將數(shù)碼管顯示也做成映射為存儲空間的方法來選通數(shù)碼管,極大地節(jié)約了單片機資源。系統(tǒng)造價也減少了,較之我們現(xiàn)在流行的數(shù)碼管接口電路有極大的優(yōu)勢。它不需要像傳統(tǒng)的靜態(tài)顯示那樣需要大量硬件作支持,也不像一般的動態(tài)顯示那么難于編程,更為突出的一點就是非常容易擴展更多數(shù)碼管顯示。 這個問題是筆者在備戰(zhàn)大學生電子設計大賽時遇見的。當時我們要盡量壓縮最小系統(tǒng)的硬件開銷,又不至于減少其功能,碰到最棘手的問題就是顯示部分。我們首先想用串口通信加74LS164的方案解決,但是手工制作確實難度很大。后來我們用專用顯示芯片MAX7912完成,同樣有上述問題。我們還用過8255作控制接口,雖然較前兩種解決方案有所改進,但是系統(tǒng)造價并沒有降下來,最終我們選擇了基于單片機總線方式的數(shù)碼管接口電路,把它用在統(tǒng)一制作的單片機最小系統(tǒng)板上,效果非常明顯。只需額外加一個74LS 3 7 3鎖存器和74LS245作驅(qū)動,就非常

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論