從AT89C51了解單片機(jī)
一、 硬件結(jié)構(gòu)
1?內(nèi)部結(jié)構(gòu)
AT89C51單片機(jī)的內(nèi)部結(jié)構(gòu)與MCS-51系列中的MCS-8051的內(nèi)部結(jié)構(gòu)基本相同。由圖1可知,AT89C51單片機(jī)主要由CPU、片內(nèi)RAM、片內(nèi)ROM及4個(gè)標(biāo)準(zhǔn)輸入輸出I/O口等組成。片內(nèi)4KB ROM為程序存儲(chǔ)器,這里面主要存放指揮CPU進(jìn)行操作的指令代碼。4KB ROM共有4096個(gè)存儲(chǔ)單元,每個(gè)單元可存放一個(gè)字節(jié)共8位二進(jìn)制數(shù)字。程序存儲(chǔ)器中的每個(gè)單元都有一個(gè)確定的地址,4K空間地址范圍為0000H至0FFFH。128B RAM為128個(gè)字節(jié)的可讀寫(xiě)數(shù)據(jù)存儲(chǔ)器,主要放置需頻繁處理的數(shù)據(jù)。其地址空間為00H至7FH,其中00H至07H這8個(gè)單元是一組工作寄存器,由于對(duì)它們的操作另有專(zhuān)用指令,所以將這幾個(gè)單元又分別記作R0、R1、R2、R3、R4、R5、R6、R7。4個(gè)標(biāo)準(zhǔn)輸入輸出I/O口P0、P1、P2、P3與CPU內(nèi)部的一些特殊功能寄存器,如定時(shí)器控制寄存器(TCON)、串行口控制寄存器(SCON)等是統(tǒng)一編址的。這些存儲(chǔ)器離散地分布在80H至FFH地址空間內(nèi)。其中P0、P1、P2、P3的地址分別是80H、90H、A0H和B0H。有了確定的地址,才能準(zhǔn)確無(wú)誤地對(duì)它們進(jìn)行操作。比如我們要向P0口送一個(gè)數(shù),只要用一個(gè)送數(shù)指令,將數(shù)“寫(xiě)”到80H這個(gè)存儲(chǔ)單元就完成了。也就是說(shuō)把要送的數(shù)存到P0口鎖存器之中,再通過(guò)驅(qū)動(dòng)器,就可將數(shù)據(jù)各位代表的高低電位輸出到P0.0至P0.7的這8條口線引腳上了。
2?引腳功能
單片機(jī)具備了CPU、程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器和輸入輸出口等硬件資源之后,還需要供電電源、時(shí)鐘觸發(fā)和復(fù)位等控制的支持才能正常工作。而這些輸入都是通過(guò)引腳與單片機(jī)連接的。圖2是單片機(jī)AT89C51的引腳排布圖。由圖2可知,AT89C51是標(biāo)準(zhǔn)的40線雙列直插式封裝(也有其它封裝形式)的集成電路,其引腳與MCS-51系列單片機(jī)完全兼容。這40條引腳大致可分為電源(Vcc、Vss、VPP、VPD)、時(shí)鐘(XTAL1、XTAL2)、專(zhuān)用控制線(ALE、RST、PROG、PSEN、EA)、通用多功能輸入輸出標(biāo)準(zhǔn)I/O口(P0~P3)等4大部分。該單片機(jī)有6條引腳是保證基本工作所必須連接的:40腳Vcc和20腳Vss 為整個(gè)芯片提供電源;18腳、19腳是時(shí)鐘振蕩引腳,它們的內(nèi)部連接一個(gè)高增益放大器,外部接一晶振選頻產(chǎn)生振蕩脈沖,并可配接一些電容、電感使振蕩更精確。此振蕩脈沖,為整個(gè)CPU及其定時(shí)等有效操作系統(tǒng)提供時(shí)鐘。另外兩條引腳是EA和RST。31腳EA是程序存儲(chǔ)器片內(nèi)片外選擇腳,如果EA接低電位,CPU不從片內(nèi)ROM中取指;EA接高電位,CPU先從片內(nèi)程序存儲(chǔ)器取指。第9腳RST的主要功能是使單片機(jī)復(fù)位。當(dāng)單片機(jī)接通以上5腳后,只要在第9腳上加一個(gè)寬度不小于24個(gè)振蕩周期,也就是2個(gè)機(jī)器周期的正脈沖,它就能使系統(tǒng)復(fù)位。系統(tǒng)復(fù)位就是意味著CPU里各種寄存器等功能部分有一種標(biāo)準(zhǔn)的、固定的狀態(tài),這樣有利于系統(tǒng)設(shè)計(jì)。比如系統(tǒng)復(fù)位后,能使P0口至P3口的數(shù)據(jù)為FFH,也就是各口線皆呈高電位,不然就會(huì)出現(xiàn)每通一次電,系統(tǒng)就呈現(xiàn)一種不同的狀態(tài),給負(fù)載電路的設(shè)計(jì)帶來(lái)困難。系統(tǒng)復(fù)位后,還能使程序地址寄存器PC的值為0000H,這就保證系統(tǒng)從程序存儲(chǔ)空間的0000H單元取指,使程序有個(gè)起始,保證系統(tǒng)能有條不紊地運(yùn)行。因此,程序存儲(chǔ)器從第一單元開(kāi)始一般放一條無(wú)條件跳轉(zhuǎn)指令,指出主程序的入口,引導(dǎo)系統(tǒng)進(jìn)入主程序運(yùn)行。
3?I/O口的介紹
在圖2中,還有P0~P3引腳。這些引腳可以將單片機(jī)輸出的高低電位信號(hào)傳送給片外的負(fù)載,也可將片外其它設(shè)備輸出的高低電位號(hào)輸入至單片機(jī),因此,在單片機(jī)中,這些引腳就叫做輸入輸出端口,簡(jiǎn)稱(chēng)I/O口。一個(gè)標(biāo)準(zhǔn)的I/O口一般由8條I/O口線組成。標(biāo)準(zhǔn)I/O口的主要功能相當(dāng)于一個(gè)8位鎖存器,能存儲(chǔ)一個(gè)字節(jié)的二進(jìn)制數(shù)據(jù),以保持與之相連接的8條口線各自電位的高低狀態(tài)。在圖2中,AT89051的第1腳至第8腳相對(duì)應(yīng)的8條口線P1.0至P1.7組成的標(biāo)準(zhǔn)口記作P1口,第10腳至第17腳相對(duì)應(yīng)的口線P3.0至P3.7組成的P3口,第21腳至28腳相對(duì)應(yīng)的8條口線P2.0至P2.7組成了P2口,第32腳至39腳相對(duì)應(yīng)的8條口線P0.0至P0.7組成了P0口。有了這些標(biāo)準(zhǔn)輸入輸出口,使用起來(lái)就很方便了。這樣,我們可編制一段程序,向這些標(biāo)準(zhǔn)口中存入一定的數(shù)據(jù)(這些數(shù)據(jù)也可叫控制字),各口線引腳就會(huì)呈現(xiàn)出不同的高低電位。比如我們向P0、P1、P2、P3口中送入數(shù)據(jù)#00H,則每個(gè)口的各口線電位狀態(tài)就會(huì)為“0000 0000”,也就是各條口線皆呈低電位。我們?cè)傧騊0口送入數(shù)據(jù)#03H。P0.0至P0.7各條口線所呈電位為“0000 0011”,也就是只有P0.0和P0.1兩條口線所對(duì)應(yīng)的引腳呈高電位。另外,還應(yīng)知道,P0口的P0.0~P0.7的位地址是80H至87H,P1口的P1.0至P1.7的位地址是90H至97H,P2.0至P2.7和P3.0至P3.7的位地址分別是A0H至A7H和B0H至B7H。
4?口結(jié)構(gòu)
AT89C51單片機(jī)或其它與之兼容的單片機(jī),作為初學(xué)者還必須掌握它的I/O口結(jié)構(gòu)和電流負(fù)載能力。比如AT89C2051口線負(fù)載能力達(dá)25mA,AT89C51可達(dá)15mA等等。下面以P1.0口線為例,談一下I/O口結(jié)構(gòu),圖3為P1.0口線的內(nèi)部驅(qū)動(dòng)器電原理圖。由圖可知,驅(qū)動(dòng)器的輸入端是和鎖存器的Q相連接的,驅(qū)動(dòng)器的輸出部分由4只場(chǎng)效應(yīng)管組成,N型管VT4為下拉管,P型的VT1、VT2、VT3為上拉管。依次為強(qiáng)上拉、弱上拉和中上拉。當(dāng)我們向P1.0位寫(xiě)“1”時(shí),Q呈低電位,于是,VT4截止,VT1、VT2、VT3導(dǎo)通。其中VT1導(dǎo)通過(guò)程稍復(fù)雜一些,圖3中VT1的柵極與Q之間接有一個(gè)延時(shí)器件F1,此延時(shí)器件的導(dǎo)通態(tài)維持時(shí)間是2個(gè)振蕩周期。也就是說(shuō),當(dāng)Q為低電位時(shí),延時(shí)器F1導(dǎo)通,VT1也迅速導(dǎo)通,經(jīng)過(guò)兩個(gè)振蕩周期以后,延時(shí)電路處于開(kāi)路狀態(tài),于是VT1截止。所以,VT1只是在CPU向P1.0寫(xiě)“1”后很短的時(shí)間內(nèi)導(dǎo)通,以較強(qiáng)的電流拉動(dòng)能力將P1.0引腳的電位拉起。經(jīng)過(guò)2個(gè)振蕩周期以后,VT1截止,只有VT2和VT3導(dǎo)通。如果此時(shí)P1.0引腳的負(fù)載不是嚴(yán)重超載,P1.0引腳的電位會(huì)高于2.1V,此電位高于非門(mén)F3的門(mén)限電壓,F(xiàn)3的輸出端為低電位,與之相接的VT3的柵極亦為低電位,VT3導(dǎo)通,提供中度的上拉電流,使P1.0輸出的電流達(dá)到額定值;如果P1.0引腳嚴(yán)重超載,比如被SB1對(duì)地短路,P1.0引腳的輸出電位將很低,幾乎為零,此電位低于非門(mén)F3的門(mén)限電壓,F(xiàn)3的輸出端為高電位,VT3截止,只有VT2提供微安級(jí)的弱上拉電流。而當(dāng)SB1釋放后VT3又重新導(dǎo)通,P1.0引腳的電位和上拉負(fù)載能力均恢復(fù)。單片機(jī)標(biāo)準(zhǔn)口的這種結(jié)構(gòu),既安全,又可靠。由上述我們不難得出這樣的結(jié)論:這些口線不論在什么狀態(tài)下都不怕對(duì)地短路,但絕不能直接與Vcc相接。因?yàn)楫?dāng)口線處于低電位時(shí),VT4導(dǎo)通,如果此時(shí)口線直接與Vcc相連接,VT4就可能被燒壞。許多開(kāi)發(fā)者曾用此方法將某些口線燒壞來(lái)實(shí)現(xiàn)加密。當(dāng)然這樣是以犧牲單片機(jī)的口資源為代價(jià)的。
二、 CPU的工作過(guò)程
CPU盡管結(jié)構(gòu)復(fù)雜,靠程序的支持來(lái)實(shí)現(xiàn)其強(qiáng)大的功能,但在運(yùn)行程序中執(zhí)行每條指令的過(guò)程卻是非常簡(jiǎn)單的,就是不斷地從程序存儲(chǔ)器中取出程序代碼,按照代碼所代表的含義去完成一種單一的操作。上述程序存儲(chǔ)器的這4096個(gè)存儲(chǔ)單元,就好像4096個(gè)小抽屜,而程序代碼就好像放在小抽屜里的工作說(shuō)明。CPU就像是一個(gè)只能依照抽屜里的說(shuō)明,而且是每次只能完成一條說(shuō)明的識(shí)讀來(lái)依次完成簡(jiǎn)單操作的弱智人一樣。這個(gè)人開(kāi)始時(shí)一定會(huì)先打開(kāi)第1個(gè)抽屜,如果第1個(gè)抽屜里的紙條上寫(xiě)著“請(qǐng)到第2個(gè)和第3個(gè)抽屜里的紙條上所標(biāo)明的抽屜里去找指定的工作做”,他就會(huì)打開(kāi)第2個(gè)和第3個(gè)抽屜取出紙條來(lái)準(zhǔn)確地識(shí)讀,確認(rèn)第3個(gè)抽屜的號(hào)碼。如果這兩張紙條上分別寫(xiě)著“10”和“08”,他就會(huì)打開(kāi)第1008個(gè)抽屜取出紙條去完成操作。此過(guò)程就相當(dāng)于CPU執(zhí)行了一條無(wú)條件轉(zhuǎn)移指令,一下子從程序的開(kāi)始,跳到了第1008個(gè)單元去運(yùn)行主程序。如果第1008個(gè)抽屜中的這張紙條上寫(xiě)著:“把第18#黑板上的會(huì)議通知中的時(shí)間由下午2點(diǎn)改成下午3點(diǎn),”這個(gè)人就會(huì)將第18#黑板上的2擦掉改成3。這18#黑板就好像RAM的第18單元,此次操作相當(dāng)于CPU執(zhí)行了一條送數(shù)指令。前述向各I/O口送數(shù)的過(guò)程亦如此。
單片機(jī)只是一個(gè)可以讀懂人給予它的命令并能按照這種命令去完成某種操作的高級(jí)電路而已,由它構(gòu)成的各種智能系統(tǒng)的智力在程序中,完成操作的能力在執(zhí)行設(shè)備中。而程序必須由人來(lái)編制。所以,我們學(xué)習(xí)單片機(jī),要在認(rèn)識(shí)它的結(jié)構(gòu)和功能的基礎(chǔ)上學(xué)會(huì)編程,能夠設(shè)計(jì)出各種系統(tǒng)的硬件和軟件才行。結(jié)合機(jī)器碼學(xué)習(xí)程序便于深刻理解,特別適合于愛(ài)好電路制作的電子愛(ài)好者,能學(xué)到真功夫。但機(jī)器碼不容易記憶,在編較長(zhǎng)的程序時(shí),會(huì)遇到許多不便。所以,當(dāng)你能熟練地使用一些高級(jí)開(kāi)發(fā)設(shè)備時(shí),還必須掌握匯編語(yǔ)言?!?/P>
51單片機(jī)相關(guān)文章:51單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
評(píng)論