簡(jiǎn)述C51單片機(jī)并行口擴(kuò)展設(shè)計(jì)及應(yīng)用
1 引言
本文引用地址:http://www.ex-cimer.com/article/273788.htmMCS51是指由美國(guó)INTEL公司(對(duì)了,就是大名鼎鼎的INTEL)生產(chǎn)的一系列單片機(jī)的總稱(chēng),這一系列單片機(jī)包括了好些品種,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的產(chǎn)品,該系列其它單片機(jī)都是在8051的基礎(chǔ)上進(jìn)行功能的增、減、改變而來(lái)的,所以人們習(xí)慣于用8051來(lái)稱(chēng)呼MCS51系列單片機(jī),而8031是前些年在我國(guó)最流行的單片機(jī),所以很多場(chǎng)合會(huì)看到8031的名稱(chēng)。但如是對(duì)一般的系統(tǒng)而言,這些功能往往閑置不用。那么就可以選用一些本來(lái)閑置不用的口線作為選通信號(hào)來(lái)進(jìn)行并行口的擴(kuò)展,這樣就能充分利用單片機(jī)有限的i/o資源,在本設(shè)計(jì)中是將p1口擴(kuò)展成一個(gè)或幾個(gè)8位并行口,在每一個(gè)八位口上接入8個(gè)發(fā)光二極管做為輸出,二極 管是做開(kāi)關(guān)量來(lái)使用的,在這里設(shè)計(jì)了跑馬燈和流水燈程序,做到對(duì)開(kāi)關(guān)量的開(kāi)斷控制;配合開(kāi)關(guān)量的控制筆者設(shè)計(jì)了一個(gè)共陽(yáng)led數(shù)碼管,用來(lái)顯示當(dāng)前發(fā)光二極管發(fā)亮的序號(hào),做到更加直觀的雙重控制效果,然后再將p0口通過(guò)d/a轉(zhuǎn)換器和一放大器輸出一個(gè)模擬信號(hào),其結(jié)果可以通過(guò)示波器看出。這樣整個(gè)系統(tǒng)即有 了數(shù)字信號(hào)輸出和模擬信號(hào)輸出,也有數(shù)碼管顯示功能,實(shí)用性能大提高了。
2 基于89c51的系統(tǒng)硬件設(shè)計(jì)
2.1 并行口的擴(kuò)展的電路設(shè)計(jì)
AT89C51是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROM- FlashProgrammableandErasableReadOnlyMemory)的低電壓、高性能CMOS8位微處理器,俗稱(chēng)單片機(jī)。 AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲(chǔ)器的單片機(jī)。單片機(jī)的可擦除只讀存儲(chǔ)器可以反復(fù)擦除1000次。該器件采用ATMEL高密度 非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的 AT89C51是一種高效微控制器,AT89C2051是它的一種精簡(jiǎn)版本。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。
眾所周知,c51系列的單片機(jī)都有四個(gè)i/o口(p0、p1、p2、p3),那么at89c51也不例外,但我們通常僅僅使用p1口作為并行 口,而令其余口(p2、p3)處于閑置狀態(tài),所以這次設(shè)計(jì),我們就是使用閑置不用的p3口做為選能信號(hào)線來(lái)將p1口進(jìn)行并行口擴(kuò)展。
(1) 種方式的并行口擴(kuò)展優(yōu)點(diǎn)
連線簡(jiǎn)單;
不占用存儲(chǔ)器空間;
(2) 編程也方便靈活。但也有很大的缺點(diǎn)
并行口擴(kuò)展能力有限,(如使用74ls573(74ls373)且不進(jìn)行驅(qū)動(dòng)處理,則最多可擴(kuò)展4個(gè)同樣類(lèi)型的并行輸出端口,當(dāng)然還需要與之對(duì)應(yīng)的四個(gè)選通信號(hào)。)
如擴(kuò)展較多,選通信號(hào)占用并行口位數(shù)太多,例如欲擴(kuò)展8個(gè)并行輸出端口,則需要8個(gè)選能信號(hào),此時(shí),僅選能信號(hào)就占用了一個(gè)8位并行口,這對(duì)在 i/o端口線有限的單片機(jī)系統(tǒng)中,如此浪費(fèi)資源的現(xiàn)象是不能容忍的。在本次的設(shè)計(jì)中,采用芯片74hc573(帶三態(tài)輸出的八進(jìn)制透明d型鎖存器)對(duì)p1 口進(jìn)行了一個(gè)8位并行口的擴(kuò)展,選通信號(hào)選用p3口的p3.3引腳。原理圖如圖1所示:
圖1 pi口擴(kuò)展電路
2.2 擬信號(hào)輸出的電路設(shè)計(jì)
數(shù)模轉(zhuǎn)換器,又稱(chēng)D/A轉(zhuǎn)換器,簡(jiǎn)稱(chēng)DAC,它是把數(shù)字量轉(zhuǎn)變成模擬的器件。D/A轉(zhuǎn)換器基本上由4個(gè)部分組成,即權(quán)電阻網(wǎng) 絡(luò)、運(yùn)算放大器、基準(zhǔn)電源和模擬開(kāi)關(guān)。模數(shù)轉(zhuǎn)換器中一般都要用到數(shù)模轉(zhuǎn)換器,模數(shù)轉(zhuǎn)換器即A/D轉(zhuǎn)換器,簡(jiǎn)稱(chēng)ADC,它是把連續(xù)的模擬信號(hào)轉(zhuǎn)變?yōu)殡x散的數(shù) 字信號(hào)的器件。最常見(jiàn)的數(shù)模轉(zhuǎn)換器是將并行二進(jìn)制的數(shù)字量轉(zhuǎn)換為直流電壓或直流電流,它常用作過(guò)程控制計(jì)算機(jī)系統(tǒng)的輸出通道,與執(zhí)行器相連,實(shí)現(xiàn)對(duì)生產(chǎn)過(guò) 程的自動(dòng)控制。數(shù)模轉(zhuǎn)換器電路還用在利用反饋技術(shù)的模數(shù)轉(zhuǎn)換器設(shè)計(jì)中。
模擬信號(hào)的輸出需要用到d/a轉(zhuǎn)換器,這里我使用最常用的8位的d/a轉(zhuǎn)換器dac0832來(lái)轉(zhuǎn)換數(shù)字電壓信號(hào)。因dac0832是并行d/a轉(zhuǎn)換集成電路, 其輸出為電流型,在使用時(shí),必須額外增加一個(gè)運(yùn)算放大器,才能得到電壓信號(hào),在本次電路中使用了1個(gè)lm741放大器來(lái)放大信號(hào)輸出,lm741是一個(gè)普通的單操作的放大器,具有輸入電壓范圍大,短路電壓保護(hù),高增益和不需頻率補(bǔ)償?shù)葍?yōu)點(diǎn)。dac0832的片選端口與單片機(jī)的p2.2相連,xfer和 wr2接地,使之一直處于使能狀態(tài),即輸入數(shù)據(jù)寄存器中的數(shù)字信號(hào)可直接轉(zhuǎn)換為模擬信號(hào)。d/a轉(zhuǎn)換電路的輸出是一個(gè)周期的正弦波,通過(guò)外接示波器可以清淅的看到。另外模擬信號(hào)的輸出引在一個(gè)外接端子上,可以與其它系統(tǒng)相連接,做到通用性的效果。d/a轉(zhuǎn)換原理圖如圖2所示:
圖2 d/a轉(zhuǎn)換
2.3 靜態(tài)數(shù)碼管顯示的電路設(shè)計(jì)
靜態(tài)驅(qū)動(dòng)也稱(chēng)直流驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)是指每個(gè)數(shù)碼管的每一個(gè)段碼都由一個(gè)單片機(jī)的I/O端口進(jìn)行驅(qū)動(dòng),或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動(dòng)。靜態(tài)驅(qū)動(dòng)的優(yōu)點(diǎn)是編程簡(jiǎn)單,顯示亮度高,缺點(diǎn)是占用I/O端口多,如驅(qū)動(dòng)5個(gè)數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來(lái)驅(qū)動(dòng),要知道一個(gè) 89S51單片機(jī)可用的I/O端口才32個(gè)呢:),實(shí)際應(yīng)用時(shí)必須增加譯碼驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬件電路的復(fù)雜性。
數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按能顯示多少個(gè)"8"可分為1 位、2位、4位等等數(shù)碼管; 數(shù)碼管要正常顯示,就要用驅(qū)動(dòng)電路來(lái)驅(qū)動(dòng)數(shù)碼管的各個(gè)段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)式兩類(lèi)。這里 我們所設(shè)計(jì)的電路顯示是屬于靜態(tài)顯示那種,是兩位靜態(tài)數(shù)碼管顯示,其主要的功能是顯示當(dāng)前發(fā)光led的序號(hào),比如如果當(dāng)前是l1燈在亮的話,數(shù)碼管將顯示 11,是l2燈亮,數(shù)碼管顯示22字樣等。電路的設(shè)計(jì)使用2個(gè)8位的移位寄存器(74hc164),和兩個(gè)八段的led數(shù)碼管(共陽(yáng)的)加上2個(gè) 8×330ω的排阻構(gòu)成。靜態(tài)數(shù)碼管顯示的優(yōu)點(diǎn)在于,編寫(xiě)程序相對(duì)比較簡(jiǎn)單,一旦將欲顯示的數(shù)據(jù)發(fā)送出去,只要當(dāng)前顯示的數(shù)據(jù)沒(méi)有變化,就無(wú)須理睬它。不足之處在于,如果顯示的位數(shù)太多,硬件的開(kāi)銷(xiāo)和電源的功耗問(wèn)題將會(huì)很?chē)?yán)重(比如這里,只需顯示兩位,就需要用到兩塊74hc164和2個(gè)排阻)。電路原理圖如圖3所示:
圖3 顯示電路
2.4 電源部分電路的設(shè)計(jì)
整個(gè)電路系統(tǒng)使用9v~12v的直流電源供電,故使用一個(gè)拔碼開(kāi)關(guān)和一個(gè)二極管,以起保護(hù)作用,這里拔碼開(kāi)關(guān)只起到電源開(kāi)關(guān)的作用。由于cpu電源為5v,所以使用l7805三端穩(wěn)壓來(lái)供cpu電源,電源指示燈一個(gè)。電源部分電路圖如圖4所示:
圖4 電源電路
2.5 復(fù)位部分電路設(shè)計(jì)
本電路的復(fù)位電路是用一個(gè)復(fù)位芯片max706p來(lái)設(shè)計(jì)的,并帶有復(fù)位按鈕一個(gè)。這里復(fù)位是低電平有效的,有手動(dòng)復(fù)位按鈕,當(dāng)程序跑飛或無(wú)響應(yīng)時(shí)可以選用手動(dòng)復(fù)位。復(fù)位信號(hào)來(lái)自于cpu的p22口。復(fù)位電路原理圖如圖5所示。
圖5 復(fù)位電路
3 系統(tǒng)軟件部分設(shè)計(jì)與應(yīng)用
程序已經(jīng)調(diào)試通過(guò),整個(gè)程序?qū)崿F(xiàn)的功能如下:
p1口的八位擴(kuò)展,控制8個(gè)開(kāi)關(guān)led指示燈,程序?qū)嶒?yàn)了對(duì)這8個(gè)指示燈的開(kāi)關(guān)跑馬控制,實(shí)驗(yàn)程序可以編寫(xiě)從l1至l8的循環(huán)發(fā)亮,在每個(gè)發(fā)光 二極管發(fā)光的同時(shí),數(shù)碼管顯示當(dāng)前發(fā)亮led的序號(hào),比如11、22、33等等。也可讓每個(gè)二極管閃爍,可以規(guī)定閃爍時(shí)間為半秒鐘或更長(zhǎng),然后再在每一個(gè) led指示燈閃爍的同時(shí),讓led數(shù)碼管顯示當(dāng)前閃爍的指示燈的序號(hào),比如,l1燈閃爍時(shí),數(shù)碼管顯示11字樣,l2燈閃爍時(shí),數(shù)碼管顯示22字樣等等。 在數(shù)模轉(zhuǎn)換這一子函數(shù)的編寫(xiě)上,是使用指針數(shù)組來(lái)寫(xiě)的,dac0832實(shí)現(xiàn)da的轉(zhuǎn)換的芯片,實(shí)現(xiàn)的功能是輸出一正弦波模擬信號(hào),當(dāng)在端子口接一示波器時(shí),示波器將輸出一正弦波圖形。主程序流程圖如(圖6)所示。以上所述是整個(gè)系統(tǒng)的功能,所有的程序都已經(jīng)通過(guò)調(diào)試試驗(yàn),實(shí)驗(yàn)證明是可行的。
4 結(jié)束語(yǔ)
整個(gè)系統(tǒng)的軟件已經(jīng)完全通過(guò)調(diào)試,證明是切實(shí)可行的,整個(gè)系統(tǒng)的硬件設(shè)計(jì)是本著單片機(jī)系統(tǒng)設(shè)計(jì)的簡(jiǎn)單化原則來(lái)設(shè)計(jì),顯的簡(jiǎn)煉有序,軟件編寫(xiě)也非常簡(jiǎn)單易懂。本系統(tǒng)設(shè)計(jì)比較適合于在小型系統(tǒng)中應(yīng)用。
評(píng)論