版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)理論與實(shí)踐的十大誤區(qū)元增民2007年電子報(bào)合訂本發(fā)表單片機(jī)是計(jì)算機(jī)的一個(gè)分支,是計(jì)算機(jī)向控制方向發(fā)展的一個(gè)產(chǎn)物。二十年來,單片機(jī)已經(jīng)從只有少數(shù)人才能掌握的技術(shù)演變?yōu)榇蟊娀墓ぞ?,成為很多專業(yè)技術(shù)人員必不可少的基本工具。如果說技術(shù)人員出行離不開汽車,那么就可以說搞開發(fā)離不開單片機(jī)。但是,單片機(jī)技術(shù)對(duì)很多人來說似乎還是深?yuàn)W玄妙高不可攀的。不僅很多專科生在單片機(jī)面前膽怯了,而且很多本科生也難闖單片機(jī)課程這一關(guān),甚至一些人考研時(shí)因?yàn)楦杏X單片機(jī)課程難而不得不選考其他課程甚至忍疼調(diào)換別的研究方向。造成這個(gè)被動(dòng)局面的原因既有客觀的,又有主觀的,又有客觀與主觀相攙雜的。如果說客觀原因往往是人們所處環(huán)境造
2、成的而不容易改變,那么主觀原因往往是人們自己造成的,是自我設(shè)下的陷阱,就是說由于受到來自教科書等渠道的一些陳腐觀念的引導(dǎo)而不幸走進(jìn)了一些認(rèn)識(shí)上的誤區(qū)。有時(shí)候還因?yàn)檎J(rèn)識(shí)上的誤區(qū)而埋怨客觀條件不好。系統(tǒng)性地認(rèn)識(shí)目前的一些陳腐觀念,消除單片機(jī)理論與實(shí)踐的誤區(qū),有利于學(xué)校調(diào)整課程內(nèi)容、改進(jìn)教學(xué)方法,有利于學(xué)生改善學(xué)習(xí)效果,有利于學(xué)生用較少的精力學(xué)到較多的知識(shí),有利于專業(yè)技術(shù)人員更好地掌握單片機(jī)技術(shù)。本文首先介紹單片機(jī)理論與實(shí)踐的十大誤區(qū),并給出一種基于反復(fù)執(zhí)行指令的模式而設(shè)計(jì)的無機(jī)器周期誤差的高精度液晶電子鐘。一、單片機(jī)理論與實(shí)踐的十大誤區(qū)1單片機(jī)調(diào)試必用仿真器單片機(jī)程序存貯器最早采用掩膜ROM。掩膜
3、ROM只能一次性編程,一般程序一旦固化后就不可能更改。因此通常用一個(gè)程序可更改的、邏輯功能及管腳都與所用單片機(jī)芯片一樣的電路來代替單片機(jī)芯片進(jìn)行試驗(yàn),直到把程序試驗(yàn)成功時(shí),才把調(diào)試好的程序固化到單片機(jī)程序存貯器中。把這樣的程序可更改的、邏輯功能及管腳都與所用單片機(jī)芯片一樣的電路叫做仿真器。如果不用仿真器而是直接把尚沒有調(diào)試完畢的程序固化到掩膜ROM中,那么每調(diào)試一次就要消耗一個(gè)掩膜ROM芯片或帶掩膜ROM的單片機(jī)芯片。8051就是一款帶掩膜ROM的單片機(jī)芯片即掩膜型單片機(jī),流行時(shí)8051單價(jià)上百元。如果每調(diào)試一次就消耗一片8051,就要損失100元左右,這個(gè)代價(jià)實(shí)在有點(diǎn)高。因此,仿真器對(duì)于掩膜
4、ROM結(jié)構(gòu)的程序存貯器的價(jià)值比較大。采用掩膜ROM時(shí),購買一個(gè)仿真器,一般經(jīng)過若干次研制工作,就能收回成本。后來程序存貯器發(fā)展為紫外線擦除的可編程ROM,即EPROM,以及電可擦除的可編程ROM,即EEPROM,也叫E2PROM。8751就是一款內(nèi)含EPROM的單片機(jī)。EPROM和E2PROM可以反復(fù)寫入擦除達(dá)成百上千次。EPROM和EEPROM出現(xiàn)后,仿真器的價(jià)值就大打折扣。因?yàn)橛脩艨梢栽囍殉绦驅(qū)懭隕PROM或EEPROM,然后試機(jī)。若失敗,則一方面用紫外線擦抹器擦除EPROM,或用電擦除EEPROM,均為統(tǒng)統(tǒng)改為1,另一方面根據(jù)故障現(xiàn)象分析程序錯(cuò)誤所在并修正程序,然后重新寫入EPROM或
5、EEPROM進(jìn)行下次試驗(yàn)。如此進(jìn)行若干次試驗(yàn),一般就能將程序調(diào)試成功。近幾年程序存貯器發(fā)展為閃存(FLASH)。FLASH可以反復(fù)寫入擦除達(dá)成千上萬次。FLASH出現(xiàn)后,仿真器的價(jià)值更是大打折扣。用戶可以試著把程序?qū)懭隖ALSH,然后試機(jī)。若失敗則一方面在編程器上直接擦除FLASH,亦是統(tǒng)統(tǒng)改為1,另一方面根據(jù)故障現(xiàn)象分析程序錯(cuò)誤以及硬件錯(cuò)誤所在并修正程序和硬件,然后重新寫入FLASH進(jìn)行下次試驗(yàn)。如此進(jìn)行若干次試驗(yàn),一般就能夠調(diào)試成功。一些人沒有注意到程序存貯器結(jié)構(gòu)特性的發(fā)展,還是一味地追求仿真器,結(jié)果是得不償失。實(shí)際上,筆者從1982年開始研制Z80微機(jī)控制系統(tǒng)、MCS48系列單片機(jī)控制系
6、統(tǒng)、MCS51系列單片機(jī)控制系統(tǒng)以及AT89C51和AT89S51系列單片機(jī)控制系統(tǒng)以來,所用的程序存貯器或單片機(jī)內(nèi)含的程序存貯器剛開始就是EPROM,后來從EPROM直接過渡到FLASH,其間沒有用過仿真器?,F(xiàn)在更不用仿真器。不是不用,實(shí)在是沒有什么必要。復(fù)雜系統(tǒng)調(diào)試時(shí),硬件故障與軟件故障攙雜在一起,往往使人如臨荊棘而無從下手。此時(shí)可以暫時(shí)簡(jiǎn)化硬件和軟件,如能試成,則至少說明單片機(jī)芯片正常,硬件故障范圍縮小了,調(diào)試難度大大減輕了,調(diào)試人員信心倍增。2LED比LCD電路簡(jiǎn)單價(jià)格便宜因而LED為首選發(fā)光二極管顯示器(LED)與液晶顯示器(LCD)在20世紀(jì)70年代同時(shí)出現(xiàn)。LED基于電子源源不斷
7、地從高能級(jí)跌落到低能級(jí)而連續(xù)釋放出多余能量的機(jī)理來發(fā)光,LCD基于液晶材料在電壓控制下光學(xué)特性的變化來實(shí)現(xiàn)顯示。LED發(fā)光方式的效率及壽命雖然優(yōu)于白熾燈發(fā)光方式,但是LED工作時(shí)仍舊在消耗電能。相比之下LCD工作時(shí)電能消耗甚微。LCD工作時(shí)基本上不消耗電能,且可以借助外界自然光。雖然LCD綜合優(yōu)勢(shì)明顯大于LED,但是長(zhǎng)期以來,LED在各行各業(yè)廣泛采用,LCD僅見于計(jì)算器和電子手表等少數(shù)領(lǐng)域。直到現(xiàn)在還有一些人推崇LED而輕視LCD,其理由一是客觀上LED發(fā)光效率逐漸提高,已經(jīng)有高亮度LED品種,二是主觀認(rèn)為L(zhǎng)ED控制電路比LCD簡(jiǎn)單。LCD構(gòu)造與驅(qū)動(dòng)技術(shù)的確比LED復(fù)雜。構(gòu)造與驅(qū)動(dòng)技術(shù)復(fù)雜是L
8、CD很長(zhǎng)時(shí)間以來沒有能夠廣泛應(yīng)用的根本原因。但是正是因?yàn)長(zhǎng)CD構(gòu)造與驅(qū)動(dòng)技術(shù)復(fù)雜,才使一些急需LCD的用戶要求液晶顯示器生產(chǎn)廠家把LCD裸屏、導(dǎo)電橡膠(俗稱斑馬條)等連接件、專用IC控制器和PCB板,甚至包括背光源等統(tǒng)統(tǒng)制作為一個(gè)組件,形成所謂液晶顯示模塊,LCD Module,簡(jiǎn)稱LCM。我國長(zhǎng)沙太陽人電子有限公司從1995年就開始生產(chǎn)LCM。最初LCM是特殊定貨專供某些廠家使用,因此市場(chǎng)上很難見到。后來隨著經(jīng)驗(yàn)積累和技術(shù)進(jìn)步,廠家開始設(shè)計(jì)生產(chǎn)通用型LCM,例如可顯示若干位數(shù)碼的LCM,可顯示若干行數(shù)碼的LCM,可顯示若干點(diǎn)陣的LCM等。LCM研發(fā)、設(shè)計(jì)和制造已經(jīng)成為一個(gè)新產(chǎn)業(yè)。這些通用型L
9、CM具有標(biāo)準(zhǔn)的并行或串行通信接口,作為一個(gè)外圍電路,與單片機(jī)的硬件連接非常方便,控制軟件編制也非常簡(jiǎn)單。眾所周知,編制LED顯示控制軟件時(shí)要考慮顯示方式是靜態(tài)還是動(dòng)態(tài)。對(duì)比之下,選用LCM時(shí)主要看顯示效果,編制LCM控制軟件時(shí)根本不需要考慮所用LCM究竟是采用靜態(tài)顯示還是采用動(dòng)態(tài)顯示。動(dòng)態(tài)LED控制軟件主要內(nèi)容是字模輸出,靜態(tài)LED控制軟件是單純字模輸出,LCM控制軟件也是單純字模輸出。因此,單片機(jī)控制LCM與控制靜態(tài)LED一樣簡(jiǎn)單,單片機(jī)控制LCM比控制動(dòng)態(tài)LED更簡(jiǎn)單。只要往LCM控制器中的映像寄存器寫入字模就可以實(shí)現(xiàn)液晶顯示。對(duì)用戶來說,在硬件使用方面,LCM甚至比LED還簡(jiǎn)單。LED顯
10、示電路一直沒有現(xiàn)成的商品可購,需要用戶自行設(shè)計(jì)。對(duì)比之下,市場(chǎng)上各種LCM已經(jīng)琳瑯滿目,用戶買來就可以使用。認(rèn)為L(zhǎng)ED控制電路比LCD簡(jiǎn)單的觀點(diǎn)不符合實(shí)際。另外,LCD數(shù)碼管的價(jià)格與LED數(shù)碼管已經(jīng)是旗鼓相當(dāng)。例如字高12mm的LCD數(shù)碼管每位價(jià)格已經(jīng)降到1元上下,而同尺寸的LED數(shù)碼管每位價(jià)格也在1元上下。最便宜的45位LCM價(jià)格只要20元上下,亦與功能相似的LED電路不相上下。認(rèn)為L(zhǎng)CD價(jià)格比LED高的觀點(diǎn)也已過時(shí)。液晶顯示器還有一個(gè)優(yōu)點(diǎn),那就是可以根據(jù)用戶和市場(chǎng)需要設(shè)計(jì)任意復(fù)雜字符,并且任意復(fù)雜字符在控制時(shí)都當(dāng)成一個(gè)筆畫考慮,控制復(fù)雜字符就像控制一個(gè)小數(shù)點(diǎn)一樣非常簡(jiǎn)便。例如,長(zhǎng)沙太陽人電
11、子有限公司生產(chǎn)的SMS0501C型電子秤專用LCM,除了有5位數(shù)碼管以顯示5位數(shù)字之外,還能顯示“kg公斤”以及“元”,其中“kg 公斤”、“元”都各作為一個(gè)筆畫考慮。還有,液晶裸屏與控制器的連接件已經(jīng)不單純是排線或斑馬條,方便實(shí)用的金屬針腳LCD商品已經(jīng)推向市場(chǎng)。金屬針腳LCD商品的出現(xiàn),為廣大電子技術(shù)和單片機(jī)愛好者直接涉獵LCD控制大開方便之門。最初的一位LCD數(shù)碼管以及CD4056控制的一位數(shù)碼型LCM目前都已經(jīng)趨于被淘汰。市場(chǎng)上的LCD數(shù)碼管以及數(shù)碼型LCM至少是3.5位或4位以上的。即使有高亮度LED產(chǎn)品,也改變不了LED在顯示領(lǐng)域降格為L(zhǎng)CD的附屬物即LED為L(zhǎng)CD提供背光的現(xiàn)實(shí)。
12、無論從整體效果,從用戶硬件軟件設(shè)計(jì),還是從價(jià)格來看,LCD都優(yōu)于LED??傊壕э@示器為當(dāng)今各種機(jī)電產(chǎn)品、電子產(chǎn)品等顯示器首選品種。具體進(jìn)行液晶顯示設(shè)計(jì)時(shí),LCM一般都應(yīng)當(dāng)是首選品種。只有若干位數(shù)碼時(shí),還可以考慮采用普通單片機(jī)直接驅(qū)動(dòng)LCD,以提高控制靈活性并降低成本。3認(rèn)為11.0592MHz是無理數(shù)而隨意舍去尾數(shù)串行通信雙方應(yīng)當(dāng)以相同的數(shù)據(jù)傳輸速率即波特率工作。串行通信雙方的波特率誤差大到一定程度時(shí),勢(shì)必影響串行通信的正常可靠進(jìn)行。下面首先分析串行通信雙方波特率允差。異步通信發(fā)送方開始數(shù)據(jù)發(fā)送前,首先發(fā)送一個(gè)低電平起始位,告訴接受方,發(fā)送數(shù)據(jù)的過程馬上要開始,然后每隔一個(gè)波特率周期發(fā)送一
13、個(gè)數(shù)據(jù)位,7到8個(gè)數(shù)據(jù)位發(fā)送完畢后,可以發(fā)送一個(gè)奇偶校驗(yàn)位或地址數(shù)據(jù)識(shí)別位,最后發(fā)送一個(gè)高電平停止位。圖1 11位格式的異步通信數(shù)據(jù)傳輸將低電平起始位、若干數(shù)據(jù)位、可能的奇偶校驗(yàn)位和高電平停止位組成的數(shù)據(jù)流稱為一幀數(shù)據(jù)。同步通信不需要起始位、奇偶校驗(yàn)位或停止位。接收方以16倍波特率的速率連續(xù)檢測(cè)數(shù)據(jù)傳輸線電平,以探測(cè)數(shù)據(jù)傳輸線上有無起始位到來。起始位到來時(shí)刻的檢測(cè)誤差為檢測(cè)速率的倒數(shù)。檢測(cè)速率越高,檢測(cè)誤差就越小。當(dāng)檢測(cè)結(jié)果為高電平時(shí),判斷為無數(shù)據(jù)傳輸。一旦檢測(cè)到低電平,就在過半個(gè)波特率周期后即在應(yīng)有的起始位中點(diǎn)b和左邊點(diǎn)a、右邊點(diǎn)c,見圖1,再連續(xù)檢測(cè)三次,a到b、b到c時(shí)間差均等于檢測(cè)速率
14、的倒數(shù)。若連續(xù)3次檢測(cè)結(jié)果中至少有2次為低電平,就判斷為起始位0來到,否則認(rèn)為是一個(gè)干擾而不理會(huì)。判斷起始位來到后,每過一個(gè)波特率周期,就連續(xù)3次檢測(cè)數(shù)據(jù)位,并以3取2的規(guī)則判斷檢測(cè)結(jié)果是0還是1。每個(gè)數(shù)據(jù)位的檢測(cè)都在數(shù)據(jù)脈沖中間段進(jìn)行,并且以3取2方法濾除可能的干擾,是保證異步串行通信可靠性的基本手段。異步通信收發(fā)雙方只是約定使用相同的波特率,實(shí)際雙方各自有波特率發(fā)生器且自產(chǎn)自用,因此異步通信收發(fā)雙方的波特率只是理論上要求相等,實(shí)際上不可能相等。就是說,異步通信收發(fā)雙方的波特率實(shí)際上總有差異,這就是異步通信名稱的由來。若收方波特率與發(fā)方波特率相差甚大,則將使收方數(shù)據(jù)采集逐漸偏離發(fā)送數(shù)據(jù)中位,
15、甚至在發(fā)送數(shù)據(jù)有效范圍的邊沿采集。收方波特率與發(fā)方波特率相差越大,采集位置誤差就越大。一幀數(shù)據(jù)位數(shù)越多,采集位置誤差就越大。設(shè)一幀數(shù)據(jù)總位數(shù)為n,發(fā)方波特率為f1,收方波特率為f2。從圖1可看出,接收方過1.5/f2時(shí)間讀bit0,過2.5/f2時(shí)間讀bit1,過(n-0.5)/f2時(shí)間讀停止位。累積誤差影響最大的是停止位的讀取。若(n-0.5)/f2n/f1,欲讀停止位,實(shí)際讀的卻是空閑位1甚至是下一幀數(shù)據(jù)的起始位0??傊?,要保證正確地讀取停止位,應(yīng)當(dāng)有即有從中解出接收方波特率f2應(yīng)當(dāng)滿足的條件 (a)從上式可解出一幀數(shù)據(jù)為10,11位時(shí)接收方波特率f2應(yīng)當(dāng)滿足的條件。n=10時(shí),接收方波特
16、率f2應(yīng)當(dāng)滿足條件,允差5.6%。n=11時(shí),接收方波特率f2應(yīng)當(dāng)滿足條件,允差5.0%??梢钥闯?,一幀數(shù)據(jù)的總位數(shù)n越大,收方波特率與發(fā)方波特率允差就越小。上述分析只是粗略估計(jì)。實(shí)際上應(yīng)當(dāng)考慮的因素更多,例如接收方檢測(cè)一幀數(shù)據(jù)起始位的頻率不是無窮大,而是有限的16倍波特率,故時(shí)間分割不是無窮小,因此存在起始位檢測(cè)誤差,使異步通信接收方波特率與發(fā)送方波特率允差比上述數(shù)值更小。串行通信常見一幀數(shù)據(jù)以10位、11位居多,因此可認(rèn)為串行通信雙方波特率允差為6%。早期的MCS48單片機(jī)沒有串行口。在很多工業(yè)設(shè)備已經(jīng)使用串行通信的情況下,為了拓寬市場(chǎng),MCS51單片機(jī)設(shè)置了串行口。此時(shí)串行通信波特率已經(jīng)
17、標(biāo)準(zhǔn)化,工業(yè)設(shè)備常用波特率有300bps,600bps,1200bps,2400bps,4800bps,9600bps,19200bps等。因此MCS51單片機(jī)串行口只能向已有標(biāo)準(zhǔn)靠攏。因此就存在一個(gè)問題,用多大的晶振頻率fosc和時(shí)間常數(shù)X來實(shí)現(xiàn)工業(yè)設(shè)備常用波特率300bps,600bps,1200bps,2400bps,4800bps,9600bps, 19200bps。設(shè)SMOD=0,晶振頻率fOSC=12MHz,代入到51單片機(jī)串行通信方式1、3 異步通信波特率計(jì)算公式中有 (b) 從中可求出實(shí)現(xiàn)波特率B所需要的時(shí)間常數(shù)X (c) 將B=1200bps代入到式(c),可計(jì)算理論時(shí)間常數(shù)
18、X=229.96,實(shí)際時(shí)間常數(shù)X只能取整數(shù),取X=230,代入到式(b)可計(jì)算實(shí)際所獲得波特率B=1201.9bps,與標(biāo)準(zhǔn)值1200bps相比,波特率誤差為0.16%。表1 fosc=12MHz條件下實(shí)現(xiàn)的波特率及其誤差要求波特率BX理論值X實(shí)際值實(shí)際波特率波特率誤差1200229.962301201.90.16%2400242.982432403.80.16%4800249.492494464.37%9600252.7425310416.78.5%同理根據(jù)B=2400bps,4800bps,9600bps可計(jì)算理論時(shí)間常數(shù)、實(shí)際時(shí)間常數(shù)、實(shí)際所得波特率以及波特率誤差,見表1??梢钥闯?,采用
19、12MHz晶振頻率時(shí),要求波特率1200bps和2400bps,實(shí)際波特率各為1201.9bps、2403.8bps,波特率誤差遠(yuǎn)遠(yuǎn)小于6%,故設(shè)備能正常工作;要求波特率4800bps和19200bps,實(shí)際波特率各為4464.3bps、10416.7bps,波特率誤差明顯超出允許的6%范圍,設(shè)備就不能工作了。事實(shí)上的確如此。同時(shí)也證明了式(a)符合實(shí)際。設(shè)SMOD=1,再將fOSC=11.0592MHz代入方式1、3 異步通信波特率計(jì)算公式中有表2 fosc=11.0592MHz條件下實(shí)現(xiàn)的波特率及其誤差要求波特率BX值波特率實(shí)際值300643006001606001200208120024
20、00232240048002444800960025096001920025319200可以看出,方式1,3下的波特率計(jì)算公式中的分母,而,除了能除盡外,還剩余,因此用作晶振頻率時(shí),51單片機(jī)串行口選工作方式2、定時(shí)器工作于組合模式2時(shí)可以產(chǎn)生工業(yè)設(shè)備常用波特率300bps,600bps,1200bps,2400bps,4800bps, 9600bps,19200bps?,F(xiàn)在可以總結(jié)常用的6MHz、12MHz、11.0592MHz晶振頻率的優(yōu)點(diǎn):6MHz晶振頻率的機(jī)器周期是整數(shù),12MHz晶振頻率的機(jī)器周期是整數(shù),進(jìn)行時(shí)間控制時(shí)程序設(shè)計(jì)很方便。11.0592MHz晶振頻率的優(yōu)點(diǎn)是適合產(chǎn)生300
21、19200bps之間的常用倍增波特率。51單片機(jī)采用fOSC=11.0592MHz晶振頻率的目的就是用工作于組合模式2的自重裝定時(shí)器T1的整數(shù)初值獲得300,600,1200,2400,4800,9600,19200等常用整數(shù)波特率,以保證異步通信接發(fā)雙方的波特率至少在名義上相等,為在晶振頻率誤差不大的條件下保證異步通信接發(fā)雙方的波特率盡可能接近打下基礎(chǔ)。盡管這樣,也不是所有的51單片機(jī)晶振頻率都采用11.0592MHz。這是因?yàn)?,很?1單片機(jī)僅僅使用雙機(jī)串行通信或同步通信方式,兩個(gè)情況下都沒有必要采用標(biāo)準(zhǔn)波特率30019200bps。4使用液晶顯示時(shí)液晶驅(qū)動(dòng)專用單片機(jī)必用液晶驅(qū)動(dòng)專用單片機(jī)
22、與液晶顯示模塊都是基于解決液晶驅(qū)動(dòng)難的問題而設(shè)計(jì)的,兩者差不多同時(shí)問世。單片機(jī)的一個(gè)發(fā)展趨勢(shì)是把越來越多的功能模塊集成在單片機(jī)芯片內(nèi)。把液晶顯示模塊集成在單片機(jī)芯片內(nèi),并設(shè)計(jì)必要的接口,就形成液晶驅(qū)動(dòng)專用單片機(jī)。液晶顯示模塊已經(jīng)形成巨大的市場(chǎng)和規(guī)模效益,對(duì)比之下,市場(chǎng)上很少能見到液晶驅(qū)動(dòng)專用單片機(jī)產(chǎn)品。因此,綜合看來,使用液晶驅(qū)動(dòng)專用單片機(jī)方案的成本要明顯高于使用液晶顯示模塊方案的成本。要看到,液晶顯示模塊在與液晶驅(qū)動(dòng)專用單片機(jī)的競(jìng)爭(zhēng)中明顯處于上風(fēng),新興的普通單片機(jī)直接驅(qū)動(dòng)LCD技術(shù)對(duì)液晶顯示模塊是一個(gè)沖擊??傊?,選擇液晶顯示方案時(shí)液晶驅(qū)動(dòng)專用單片機(jī)必用的觀點(diǎn)一般并不合適。選擇液晶顯示方案時(shí)首
23、選品種一般應(yīng)為液晶顯示模塊LCM。如果液晶顯示為數(shù)碼型,甚至可以考慮直接用普通單片機(jī),如51單片機(jī),直接驅(qū)動(dòng)LCD裸屏。5輸入接口電路上拉電阻必用上拉電阻指接在正電源與I/O口線之間的電阻。51單片機(jī)除了P0口沒有上拉電阻,屬于漏極開路結(jié)構(gòu)之外,P1、P2、P3口內(nèi)部都設(shè)有上拉電阻。設(shè)有上拉電阻的準(zhǔn)雙向I/O口作輸出時(shí),可以直接提供高電平或低電平輸出,作輸入時(shí)若無按鍵按下,也能提供高電平輸入;若有接在口線與地之間的按鍵按下,則能提供低電平輸入。很明顯,51單片機(jī)P1、P2、P3作輸入時(shí)不需要外接上拉電阻。但是很不幸,在一些單片機(jī)教科書里,甚至個(gè)別流行比較廣的號(hào)稱是“十一五”國家級(jí)規(guī)劃教材的單片
24、機(jī)教科書里,51單片機(jī)P1口作輸入時(shí)統(tǒng)統(tǒng)都外接上拉電阻,真是有些畫蛇添足。學(xué)生用這樣的教科書學(xué)習(xí)單片機(jī),不僅學(xué)不到知識(shí),反而是越學(xué)越糊涂。漏極開路結(jié)構(gòu)的P0口最適合直接提供灌電流輸出,提供電壓輸出或輸入時(shí)才需要外接上拉電阻。上拉電阻結(jié)構(gòu)的P1、P2、P3口最適合直接提供電壓輸出或輸入,當(dāng)然也可以提供灌電流輸出。為節(jié)省外接元件,達(dá)到最佳設(shè)計(jì)效果,安排I/O口時(shí),應(yīng)當(dāng)優(yōu)先用P0口提供灌電流輸出,優(yōu)先用P1、P2、P3口供電壓輸出或輸入。這里還有一個(gè)51單片機(jī)P0口外接上拉電阻阻值多大為宜的問題。早期的MCS51單片機(jī)P1、P2、P3口內(nèi)部上拉電阻大約在,而近期的AT89C/S51單片機(jī)P1、P2、
25、P3口內(nèi)部上拉電阻大約在。經(jīng)驗(yàn)也表明,通常上拉電阻有些大,而上拉電阻有些小??傊?,只考慮電平電壓?jiǎn)栴}時(shí),單片機(jī)外接上拉電阻以為好,電阻額定功率1/8W就足以。651單片機(jī)程序存貯器0323H單元必留大家知道,51單片機(jī)程序存貯器0323H單元可以留給中斷服務(wù)子程序入口使用,不用中斷功能時(shí)也可以留給主程序使用。就是說,不用中斷時(shí)主程序可以從程序存貯器0單元開始一直存放下去,而不必避開0323H單元。這樣的程序結(jié)構(gòu)最簡(jiǎn)單,特別適合初學(xué)者使用。不幸的是,一些人不管是否使用中斷,總是要把程序存貯器0323H單元留給中斷服務(wù)子程序入口用。這樣做看似正規(guī),其實(shí)呆板。因?yàn)檫@樣做把主程序割裂成兩部分,無形中增
26、加了初學(xué)者的困難。靈活的做法應(yīng)當(dāng)是,使用中斷功能時(shí)主程序繞開0323H單元,不用中斷功能時(shí)主程序從程序存貯器0單元開始一直存放下去,而不必避開0323H單元。7反復(fù)執(zhí)行指令的定時(shí)方式的計(jì)時(shí)精度最低很多人一直認(rèn)為反復(fù)執(zhí)行指令的定時(shí)方式的計(jì)時(shí)精度最低,并認(rèn)為基于定時(shí)器中斷的定時(shí)方式的計(jì)時(shí)精度最高。有人甚至說,基于反復(fù)執(zhí)行指令的單片機(jī)控制電子鐘日走時(shí)誤差將達(dá)到不可思議的幾十分鐘。不用定時(shí)器和中斷時(shí),程序中反復(fù)執(zhí)行的指令及執(zhí)行次數(shù)無論有多少,執(zhí)行的邏輯順序以及執(zhí)行過程中消耗的機(jī)器周期(時(shí)間)也是可數(shù)的。執(zhí)行過程中消耗的機(jī)器周期可數(shù),為精確設(shè)計(jì)計(jì)算奠定了基礎(chǔ)。因此基于反復(fù)執(zhí)行指令的定時(shí)方式可以做到?jīng)]有機(jī)
27、器周期誤差,達(dá)到最高計(jì)時(shí)精度。用某種方法確定系統(tǒng)實(shí)際計(jì)時(shí)誤差后,還可以根據(jù)實(shí)際使用的晶振微調(diào)程序,進(jìn)一步提高計(jì)時(shí)精度。相比之下,用定時(shí)器進(jìn)行時(shí)間控制時(shí),其實(shí)存在一些不確定因素。請(qǐng)看下面的例子試在fosc=6MHz晶振條件下用51單片機(jī)定時(shí)器T0編制延時(shí)1秒子程序。解:顯然一次定時(shí)不足以完成1秒延時(shí),需要多次定時(shí)。為計(jì)算方便,取一次定時(shí)時(shí)間,則需要定時(shí)次數(shù)為次。T0應(yīng)當(dāng)選用組合模式1。計(jì)數(shù)器計(jì)數(shù)次數(shù)計(jì)數(shù)器送入初值程序算法:每次定時(shí)100ms,循環(huán)10次定時(shí)1s。T0選軟件啟動(dòng)、定時(shí)工作方式、組合模式1,TMOD控制字各位為GATE=0,M1M0=00。T1閑置不用,TMOD控制字高4位按一般做法
28、設(shè)為0,則整個(gè)TMOD控制字應(yīng)為TMOD=B本程序用查詢方式。單片機(jī)復(fù)位后正好處在查詢即非中斷模式,符合需要,因此不用理會(huì)中斷控制字IE。程序占用:T0,R7子程序:DELAY:MOV R7,#10 ;定時(shí)10次MOV TMOD,#B;設(shè)T0為組合模式1SETB TR0 ;T0軟線圈通電,啟動(dòng)定時(shí)器L1: MOV TL0,#0B0H ;送初值低位 MOV TH0,#3CH ;送初值高位JNB TF0,$ ;原地踏步等待100ms定時(shí)結(jié)束 CLR TF0 ;軟件清除CTC進(jìn)位標(biāo)志,為下次100ms定時(shí)作好準(zhǔn)備 DJNZ R7,L1 ;循環(huán)10次定時(shí)1秒RET首先,程序執(zhí)行主要消耗在其中的JNB
29、TF0,$上,但是其余指令也要消耗時(shí)間而造成誤差,這就造成一些不確定因素,影響定時(shí)精度。再看下面的程序段:SETB TR0 ;T0軟線圈通電,啟動(dòng)定時(shí)器MOV TL0,#0FFH ;送初值低位 MOV TH0,#3CH ;送初值高位該程序要求計(jì)數(shù)器從3CFFH基礎(chǔ)上加1成為3D00H。實(shí)際上計(jì)數(shù)器低位0FFH加1即向高位進(jìn)位,2個(gè)機(jī)器周期后初值高位3CH在進(jìn)位后才送入計(jì)數(shù)器高位,使得進(jìn)位無效,產(chǎn)生定時(shí)誤差。如果使用定時(shí)器配合中斷完成時(shí)間控制,則由于中斷響應(yīng)要在38個(gè)機(jī)器周期內(nèi)進(jìn)行,其中有5個(gè)不確定機(jī)器周期,因此要造成更大的計(jì)時(shí)誤差。實(shí)踐已證明,認(rèn)為反復(fù)執(zhí)行指令的定時(shí)方式的計(jì)時(shí)精度最低的觀點(diǎn)實(shí)在
30、有些主觀臆斷。實(shí)際情況是,使用定時(shí)器配合中斷定時(shí)精度最低,使用定時(shí)器查詢方式定時(shí)精度比較低,而反復(fù)執(zhí)行指令的定時(shí)方式的計(jì)時(shí)精度可以達(dá)到最高。本文第二部分介紹的電子鐘控制程序就采用了反復(fù)執(zhí)行指令的定時(shí)方式的計(jì)時(shí)方式,其精度達(dá)到了無機(jī)器周期誤差,用精度的晶振,達(dá)到了日走時(shí)誤差小于半秒的精度,很多表實(shí)際達(dá)到了日走時(shí)誤差0.1秒的精度。8定時(shí)器必講必學(xué)必用定時(shí)器是計(jì)算機(jī)(包括單片機(jī))的一個(gè)附加功能模塊。有了定時(shí)器,在某些場(chǎng)合下計(jì)算機(jī)能以更高的效率完成更多更復(fù)雜的任務(wù),但是定時(shí)精度不一定有多高。受定時(shí)器定時(shí)精度高等觀點(diǎn)的影響,單片機(jī)教學(xué)中存在一種定時(shí)器必講必學(xué)必用的誤區(qū)。這個(gè)誤區(qū)主觀增加了學(xué)生的學(xué)習(xí)難度
31、。產(chǎn)生這個(gè)誤區(qū)的原因是主觀上認(rèn)為定時(shí)器計(jì)時(shí)精度高,所以一定要講要學(xué)要用定時(shí)器。殊不知定時(shí)器計(jì)時(shí)程序中可能存在不確定因素,因此定時(shí)器計(jì)時(shí)精度比不上反復(fù)執(zhí)行指令的簡(jiǎn)單方式。9中斷必講必學(xué)必用受定時(shí)器配合中斷定時(shí)精度高等錯(cuò)誤觀點(diǎn)的影響,單片機(jī)教學(xué)中還存在一種中斷必講必學(xué)必用的誤區(qū)。這個(gè)誤區(qū)更增加了學(xué)生的學(xué)習(xí)難度。其實(shí)在很多控制系統(tǒng)中,中斷不是必須。筆者在19861989年用Z80匯編語言和MCS51匯編語言編制了4部機(jī)電一體化控制程序。其中只有塑料制袋機(jī)的電子控制程序采用中斷功能,其余3部程序,即切削力采集顯示打印控制程序、機(jī)械傳動(dòng)效率數(shù)據(jù)記錄程序以及振動(dòng)攻絲機(jī)控制程序,都沒有使用中斷功能。不用中斷
32、,不僅沒有影響工作任務(wù)的完成,連程序代碼質(zhì)量也沒有影響。眾所周知,定時(shí)器和中斷都屬于計(jì)算機(jī)的附屬功能。把附屬功能誤認(rèn)為是主要的必不可少的功能,就容易走進(jìn)本末倒置的誤區(qū)。總之,要明確定時(shí)器和中斷都屬于計(jì)算機(jī)的附屬功能。這些附屬功能可以放在稍后講授。課時(shí)比較少時(shí),這些附屬功能可以安排為自學(xué),少講甚至不講。10 51單片機(jī)主程序從非0地址開始存放任何一種計(jì)算機(jī),包括單片機(jī),都規(guī)定主程序從特定單元開始存放,機(jī)器復(fù)位后即從特定單元取指令開始執(zhí)行主程序。51單片機(jī)規(guī)定主程序從0單元開始存放,機(jī)器復(fù)位后即從0單元取指令開始執(zhí)行主程序。但是一些教師指導(dǎo)實(shí)驗(yàn)時(shí),卻讓學(xué)生從2000H等非零單元開始存放主程序。幸運(yùn)
33、的是,這種不合適的做法實(shí)際并不影響主程序的正常執(zhí)行,于是這種不合適的做法在一段時(shí)間內(nèi)竟然還堂而皇之地“合法化”了。通常程序存貯器不寫入的單元事先都默認(rèn)為B。程序從2000H單元寫入,就使0000H1FFFH單元內(nèi)容統(tǒng)統(tǒng)保留B。而機(jī)器碼B代表指令MOV R7,A,即把累加器A內(nèi)容送到寄存器R7。因此,主程序從2000H單元開始存放,相當(dāng)于前邊有2000H條MOV R7,A指令。不過再多的MOV R7,A指令也只影響寄存器R7內(nèi)容。而一般主程序都不直接使用R7內(nèi)容。所以51單片機(jī)主程序即使從非零地址開始存放,一般也不影響主程序的執(zhí)行。但是,51單片機(jī)主程序從非零地址開始存放的消極影響很多。51單片
34、機(jī)主程序從非零地址開始存放,不僅造成很多誤解,還要減小程序存貯器可利用容量。51單片機(jī)主程序從非零地址開始存放的錯(cuò)誤做法的來源,應(yīng)當(dāng)是一些人不加思考地全盤照搬20年前風(fēng)行全國的TP801單板機(jī)的一些模式。計(jì)算機(jī)一般都有一個(gè)外殼,用戶看不到計(jì)算機(jī)內(nèi)部元器件及線路板等結(jié)構(gòu),暴露在外邊的通常只有顯示屏和鍵盤。美國科學(xué)家獨(dú)辟蹊徑,設(shè)計(jì)了一種教學(xué)用的Z80單板微型機(jī),采用了Z80CPU和LED數(shù)碼管顯示器,并把LED數(shù)碼管顯示器和簡(jiǎn)易鍵盤做在主板上,所有元器件及線路板結(jié)構(gòu)都對(duì)用戶一覽無遺,非常適合教學(xué)及擴(kuò)展應(yīng)用。1978年北京工業(yè)大學(xué)消化吸收改進(jìn)美國這種教學(xué)用的Z80單板微型機(jī),然后命名為TP801單板
35、機(jī)并由北京工業(yè)大學(xué)電子廠批量生產(chǎn)。TP801單板機(jī)像一絲新風(fēng)吹遍全國。TP801單板機(jī)為全國各地廠礦企業(yè)、研究所及高校普遍認(rèn)可。例如當(dāng)時(shí)清華大學(xué)一下子就購買了100塊TP801單板機(jī)。緊跟在北京工業(yè)大學(xué)后邊,當(dāng)時(shí)國內(nèi)還有很多單位研制生產(chǎn)各種型號(hào)的Z80單板機(jī)。LED數(shù)碼管就是隨著TP801單板機(jī)的研制生產(chǎn)而迅速為人們認(rèn)可并廣泛應(yīng)用的。北京工業(yè)大學(xué)引進(jìn)并改進(jìn)生產(chǎn)TP801單板機(jī),對(duì)微機(jī)在我國的應(yīng)用以及稍后單片機(jī)的引進(jìn)和普及功不可沒。筆者1977年考入河北工學(xué)院(今河北工業(yè)大學(xué),211工程院校之一)后,曾經(jīng)在學(xué)校計(jì)算中心的克羅曼科型Z80微電腦上用FORTRAN語言和BASIC語言進(jìn)行科學(xué)計(jì)算和繪
36、圖,但始終看不到Z80CPU芯片。單板機(jī)揭開了微型機(jī)的面紗。筆者就讀大學(xué)時(shí)在黃孝安老師的TP801單板機(jī)上首次看到Z80CPU芯片,參加工作后有了一臺(tái)自己可以操作的TP801單板機(jī)。那時(shí)全國各地廠礦企業(yè)、研究所及高校的機(jī)電技術(shù)人員幾乎沒有不接觸TP801單板機(jī)的。很多人都是以TP801單板機(jī)和Z80匯編語言為入門開始向微機(jī)微電子技術(shù)包括單片機(jī)技術(shù)的大進(jìn)軍的。北京工業(yè)大學(xué)、北京工業(yè)大學(xué)電子廠以及TP801單板機(jī)在我國的影響如此大,以至于一些人把TP801單板機(jī)的一些模式錯(cuò)誤地照搬到后來的51單片機(jī)中。通常微機(jī)可以用高級(jí)語言或WORD等應(yīng)用程序輸入用戶程序,但TP801單板機(jī)只能在監(jiān)控程序控制下輸
37、入十六進(jìn)制機(jī)器碼用戶程序。TP801單板機(jī)上的十六進(jìn)制機(jī)器碼用戶程序與監(jiān)控程序之間是一種順序關(guān)系。監(jiān)控程序好像BIOS,用戶程序需要監(jiān)控程序來引導(dǎo)。因此規(guī)定十六進(jìn)制機(jī)器碼用戶程序從程序存貯器2000H號(hào)地址開始存放。51單片機(jī)采用的模式與TP801單板機(jī)不同。在51單片機(jī)中,通常不再有系統(tǒng)監(jiān)控程序(BIOS)概念、用戶程序概念以及兩者之間的區(qū)別。從市場(chǎng)上購進(jìn)的51單片機(jī)芯片和實(shí)驗(yàn)機(jī)上的51單片機(jī)都屬于裸機(jī)。用戶或者學(xué)員編制的程序,都是原始程序,自然應(yīng)當(dāng)按照規(guī)定從裸機(jī)程序存貯器0單元開始存放。二、基于反復(fù)執(zhí)行指令的無機(jī)器周期誤差可調(diào)整液晶電子鐘在12小時(shí)計(jì)時(shí)制中,小時(shí)十位不是1就是前零,即無用的
38、零。通常要求熄滅前零。滅前零時(shí),小時(shí)十位不是1就是滅,因此小時(shí)十位只要b、c兩段就足矣。通常把只有b、c兩段、只能顯示1的數(shù)碼管稱為半位數(shù)碼管。就是說,能夠熄滅前零的12小時(shí)計(jì)時(shí)制計(jì)時(shí)LCD數(shù)碼管通常為三位半即3.5位。圖2 普通單片機(jī)直接驅(qū)動(dòng)LCD玻璃板3.5位直接驅(qū)動(dòng)位液晶電子鐘電路3.5位數(shù)碼管的半位中的b、c兩段要么都亮要么都滅,在圖2中統(tǒng)一用字母k表示,用1根信號(hào)線控制。按下Hour鈕,可使小時(shí)加1,按下Minute鈕,可使分鐘加1。Hour鈕、Minute 鈕持續(xù)按下,可分別連續(xù)調(diào)整小時(shí)和分鐘。用于計(jì)時(shí)的3.5位數(shù)碼管通常在小時(shí)個(gè)位與分鐘十位之間設(shè)置兩個(gè)點(diǎn),兩個(gè)點(diǎn)每秒閃亮一次作為秒
39、計(jì)數(shù)。雙點(diǎn)同時(shí)亮同時(shí)滅,因此雙點(diǎn)在圖2中統(tǒng)一用字母p表示,也用1根信號(hào)線控制。用AT89C52單片機(jī)直接控制專用3.5位計(jì)時(shí)LCD數(shù)碼管,可以用15元左右的成本制成能顯示小時(shí)分鐘和閃亮的雙秒點(diǎn)的液晶電子鐘,其電路見圖2。圖2中的3.5位LCD計(jì)時(shí)數(shù)碼管所有各段用的是同一個(gè)公共極com。對(duì)于每位數(shù)碼管各有一個(gè)公共極的3.5位LCD數(shù)碼管,可以把各段的公共極連接在一起作為總公共極。51單片機(jī)4個(gè)并行I/O口P0P3中,P0口線內(nèi)部無上拉電阻,不能直接輸出電壓, P1P3內(nèi)部有上拉電阻,能直接輸出電壓。因此,用單片機(jī)直接驅(qū)動(dòng)液晶顯示器時(shí),應(yīng)當(dāng)優(yōu)先選用P1P3。圖2液晶電子鐘電路,小時(shí)個(gè)位、分鐘十位、
40、個(gè)位各需要7根口線,小時(shí)十位、秒鐘雙點(diǎn)及公共極各需要1根口線,總共需要根口線,P1P3恰好夠用。因此選用P1P3直接驅(qū)動(dòng)液晶數(shù)碼管,P1、P2和P3口分別控制小時(shí)個(gè)位、分鐘十位和分鐘個(gè)位,其中P1.7、P2.7和P3.7各用于控制小時(shí)十位、閃亮雙點(diǎn)和公共極(背極)。P0.7用于小時(shí)調(diào)整的命令輸入、P0.6用于分鐘調(diào)整的命令輸入,整個(gè)單片機(jī)控制電路只用了2只上拉電阻,見圖2。每次計(jì)時(shí)過后,用位傳送指令將小時(shí)十位BCD數(shù)的個(gè)位送到P1.7,自動(dòng)實(shí)現(xiàn)滅前零和顯示1,將半秒計(jì)數(shù)器的個(gè)位送到P2.7,自動(dòng)實(shí)現(xiàn)雙點(diǎn)閃亮。在每個(gè)半秒內(nèi),每次輸出復(fù)合字模后延時(shí)5ms,然后將復(fù)合字模取反后刷新輸出,如此循環(huán)10
41、0次,完成0.5秒計(jì)時(shí)和顯示。51單片機(jī)EST引腳對(duì)地之間內(nèi)部有一個(gè)下拉電阻,因此圖2省去了外接下拉電阻。硬件資源占用:累加器A工作寄存器:圖3 3.5位LCD電子鐘控制程序框圖R7:小時(shí)數(shù);R6:分鐘數(shù);R5:半秒鐘數(shù);R4:計(jì)數(shù)器;R3:小時(shí)復(fù)合字模;R2:分鐘十位復(fù)合字模;R1:分鐘個(gè)位復(fù)合字模。根據(jù)以上算法和硬件資源分配可畫出計(jì)時(shí)程序框圖。3.5位高精度可調(diào)整LCD電子鐘控制程序: MOV R7, #07H ; 小時(shí)預(yù)置7時(shí) MOV R6, A ; 分鐘清零 MOV R5, A ; 半秒鐘清零 MOV DPTR, #WMTAB ; 設(shè)字模表指針TIME:JB P0.7, HOUR0 ;
42、2 若調(diào)時(shí)鍵未按則檢測(cè)調(diào)分鍵MOV A, R7 ; 調(diào)時(shí)鍵按下,小時(shí)數(shù)取到A ADD A, #1 ; 小時(shí)加1計(jì)數(shù) DA A ; 十進(jìn)制調(diào)整 MOV R7, A ; 小時(shí)數(shù)送回 CJNE A, #13H,HOUR0; 若沒有計(jì)到13,則轉(zhuǎn)去計(jì)半秒 MOV R7, #1 ; 計(jì)到13時(shí),小時(shí)數(shù)回1HOUR0:JB P0.6, SSEC ;2 若調(diào)分鍵未按則轉(zhuǎn)去計(jì)半秒MOV A, R6 ; 調(diào)分鍵按下,分鐘數(shù)取到A ADD A, #1 ; 分鐘加1計(jì)數(shù) DA A ; 十進(jìn)制調(diào)整 MOV R6, A ; 分鐘數(shù)送回 CJNE A,#60H, SSEC ; 若沒有計(jì)到60分則轉(zhuǎn)去檢測(cè)調(diào)時(shí)鍵MOV R6
43、, #0 ; 分鐘數(shù)回0SSEC: INC R5 ;1 半秒加1計(jì)數(shù) MOV A, R5 ;1 半秒數(shù)取到A CJNE A, #120, ADJ1;2 若沒有計(jì)到120個(gè)半秒即60秒則轉(zhuǎn)去字模處理 MOV R5, #0 ;1 計(jì)到60秒,半秒數(shù)回0MINU: MOV A, R6 ;1 分鐘數(shù)取到A ADD A, #1 ;1 分鐘加1計(jì)數(shù) DA A ;1 十進(jìn)制調(diào)整 MOV R6, A ;1 分鐘數(shù)送回 CJNE A, #60H, ADJ2;2 若沒有計(jì)到60分則轉(zhuǎn)去字模處理 MOV R6, #0 ;1 分鐘數(shù)回0HOUR: MOV A, R7 ;1 小時(shí)數(shù)取到A ADD A, #1 ;1 小時(shí)
44、加1計(jì)數(shù) DA A ;1 十進(jìn)制調(diào)整 MOV R7, A ;1 小時(shí)數(shù)送回 CJNE A, #13H, ADJ3;2 若沒有計(jì)到13,則轉(zhuǎn)去字模處理 MOV R7, #1 ;1 計(jì)到13時(shí),小時(shí)數(shù)回1 SJMP WMC ;2ADJ1: 7-NOP ;(7)時(shí)間均衡,CJNE A,#120,ADJ1以下六條指令執(zhí)行時(shí)間ADJ2: 7-NOP ;(7)時(shí)間均衡,CJNE A,#60H,ADJ2以下六條指令執(zhí)行時(shí)間ADJ3: 3-NOP ;(3)時(shí)間均衡,CJNE A,#13H,ADJ3以下兩條指令執(zhí)行時(shí)間WMC: MOV A, R7 ;1 小時(shí)數(shù)送到累加器A MOV C, ACC.4 ;1 取小時(shí)
45、十位數(shù)字模到位累加器C ANL A, #0FH ;1 分離出小時(shí)個(gè)位數(shù) MOVC A, A+DPTR ;2 查表取小時(shí)個(gè)位字模 MOV ACC.7, C ;2 小時(shí)十位字模與個(gè)位字模復(fù)合 MOV R1, A ;1 小時(shí)復(fù)合字模暫存到R1 MOV A, R5 ;1 取半秒鐘數(shù) MOV C, ACC.0 ;1 半秒鐘個(gè)位(雙點(diǎn)字模)送位累加器CMOV A, R6 ;1 一取分鐘數(shù) ANL A, #0F0H ;1 分離出分鐘十位數(shù) SWAP A ;1 分鐘十位數(shù)送到個(gè)位位置 MOVC A, A+DPTR ;2 查表取分鐘十位字模 MOV ACC.7, C ;2 分鐘十位字模與雙點(diǎn)字模復(fù)合 MOV R
46、2, A ;1 分鐘十位復(fù)合字模暫存到R2 MOV A, R6 ;1 二取分鐘數(shù) ANL A, #0FH ;1 分離出分鐘個(gè)位數(shù) MOVC A, A+DPTR ;2 查表取分鐘個(gè)位字模及COM信號(hào) MOV R3, A ;1 分鐘個(gè)位字模及COM信號(hào)暫存到R3 MOV R0, #22 ;1 以下2條指令系根據(jù)計(jì)時(shí)精度要求增加DJNZ R0, $ ;MOV R4, #100 ;1 電壓極性循環(huán)次數(shù),兼延遲次數(shù)DISP: MOV P3, R3 ; 輸出分鐘個(gè)位字模及COM信號(hào) MOV P2, R2 ; 輸出分鐘十位復(fù)合字模 MOV P1, R1 ; 輸出小時(shí)復(fù)合字模 MOV 30H, #5 ;LOO
47、P: MOV R0, #246 ; DJNZ R0, $ ; DJNZ 30H, LOOP ; 5-NOP ; 根據(jù)計(jì)時(shí)精度要求增加 MOV A, R1 ; 取分鐘個(gè)位字模 CPL A ; 字模取反 MOV R1, A ; 改變驅(qū)動(dòng)電壓極性 MOV A, R2 ; 取分鐘十位復(fù)合字模 CPL A ; 字模取反 MOV R2, A ; 改變驅(qū)動(dòng)電壓極性 MOV A, R3 ; 取小時(shí)復(fù)合字模 CPL A ; 字模取反 MOV R3, A ; 改變驅(qū)動(dòng)電壓極性 DJNZ R4, DISP ;MOV A,#0FFH ;1MOV P1, A ;1 暫時(shí)關(guān)掉LCD,保證50%占空比 MOV P2, A
48、;1MOV P3, A ;1AJMP TIME ;2WMTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END“7-NOP”等在此是簡(jiǎn)化寫法,用偉福等匯編器匯編前應(yīng)改寫為7條NOP指令。注釋后的數(shù)字代表參與正常計(jì)時(shí)的指令所用機(jī)器周期數(shù)。從標(biāo)號(hào)TIME到WMC(不含WMC)之前參加計(jì)時(shí)循環(huán)的指令共19條,總共消耗個(gè)機(jī)器周期。從標(biāo)號(hào)WMC到DISP(不含DISP)之前的以及標(biāo)號(hào)WMTAB之前的21條指令,以及MOV A,#0FFHAJMP TIME 共5條指令,參加計(jì)時(shí)顯示循環(huán)的指令共26條,總共消耗個(gè)機(jī)器周期。外層計(jì)時(shí)循環(huán)共消耗31+69=100個(gè)機(jī)
49、周。從標(biāo)號(hào)DISP到DJNZ R4,DISP之間的中、內(nèi)層循環(huán)共用個(gè)機(jī)器周期耗時(shí)半秒的整個(gè)循環(huán)共用 +100=個(gè)機(jī)器周期。晶振頻率fosc=6MHz時(shí),機(jī)周等于2,個(gè)機(jī)器周期,折合,折合500ms即半秒。本3.5位液晶電子鐘電源電流約4mA,折合功耗20mW。本液晶電子鐘程序?qū)崿F(xiàn)了無機(jī)器周期誤差。本3.5位液晶電子鐘硬件軟件均已經(jīng)過調(diào)試,并且經(jīng)過長(zhǎng)時(shí)間考機(jī),可靠性和精度均得到驗(yàn)證。本文作者使用頻率精度的6MHz晶振制作了一批液晶電子鐘,對(duì)其中4機(jī)考機(jī)驗(yàn)證,結(jié)果實(shí)際日走時(shí)誤差各為+0.5秒、-0.1秒、-0.2秒、-0.4秒,達(dá)到實(shí)用要求。參加考機(jī)4個(gè)液晶電子鐘的平均誤差基本為0,說明控制程序確
50、實(shí)沒有機(jī)器周期誤差。若使用精度高于的晶振,走時(shí)誤差會(huì)更低。AT89系列51單片機(jī)電源電壓36V,液晶板電源電壓4.5V.市售價(jià)格10元左右的萬能手機(jī)充電器輸出電壓4.34.4V,能作為本液晶電子鐘的工作電源。傳統(tǒng)的MCS51系列單片機(jī)芯片工作時(shí)發(fā)熱很厲害,手模芯片熱感很強(qiáng)。AT8951系列51單片機(jī)功率消耗很小,工作時(shí)手模芯片很難有熱感。我們制作的液晶電子鐘的單片機(jī)芯片就臥在液晶玻璃板下邊的空當(dāng)中,整個(gè)板子只有大小,讀者制作時(shí)可咨詢。晶振頻率改為12MHz,并調(diào)整程序,可進(jìn)一步提高計(jì)時(shí)精度。本文部分內(nèi)容節(jié)選自元增民、張文希編著、國防科技大學(xué)出版社2006年6月出版的單片機(jī)原
51、理與應(yīng)用基礎(chǔ)一書,在此謹(jǐn)致謝意。附件1:給電子報(bào)編輯部的說明對(duì)稿件的出處補(bǔ)充說明如下,以供審稿專家參考。文中所說將有理數(shù)11.0592MHz誤認(rèn)為是無理數(shù)的謬誤,發(fā)生在很多單片機(jī)教材中,其中有李朝青編、北航出版的單片機(jī)原理與接口技術(shù)(第三版),還有中國機(jī)械工業(yè)教育協(xié)會(huì)組編、機(jī)械工業(yè)出版社出版的單片機(jī)原理與應(yīng)用。文中所說上拉電阻必用的謬誤,也發(fā)生在很多單片機(jī)教材中,其中以李朝青編、北航出版的單片機(jī)原理與接口技術(shù)最為明顯。該書大約三分之二的插圖中都有濫用上拉電阻的毛病,使人越學(xué)越糊涂,誤導(dǎo)作用極壞。文章介紹的液晶電子鐘控制程序就是用反復(fù)執(zhí)行指令方式計(jì)時(shí)的,實(shí)際表明這種電子鐘用普通晶振就能具有很高的
52、計(jì)時(shí)精度,達(dá)到了實(shí)用要求。我們的學(xué)生已經(jīng)制作了一批這樣的電子鐘,配上一個(gè)萬能手機(jī)充就可以工作。附件2:李朝青單片機(jī)原理及接口技術(shù)第3版教材若干重大錯(cuò)誤(僅供長(zhǎng)沙學(xué)院學(xué)生內(nèi)部使用)一般講,教材中個(gè)別文字及數(shù)字錯(cuò)漏在所難免。盡管已經(jīng)是第3版,李朝青單片機(jī)原理及接口技術(shù)教材還是存在個(gè)別文字及數(shù)字錯(cuò)漏。但是,李朝青單片機(jī)原理及接口技術(shù)教材的主要問題已經(jīng)不僅僅是個(gè)別文字及數(shù)字錯(cuò)漏,而是系統(tǒng)性的錯(cuò)誤問題。下面的討論不涉及個(gè)別文字及數(shù)字錯(cuò)漏,只討論影響比較大的系統(tǒng)性的概念性的錯(cuò)誤。一 插圖錯(cuò)誤錯(cuò)誤不僅發(fā)生在接口電路圖,而且大量發(fā)生在程序。這里僅討論容易鑒別的接口電路,不涉及程序框圖和程序。這樣的接口電路(不
53、含I2C部分)共有約30幅,其中23幅有錯(cuò)誤,其中更有10幅是根本性錯(cuò)誤??傊?,該書所述接口電路中有問題的占同類電路的將近80%,對(duì)學(xué)員的誤導(dǎo)作用是非常大的,必須引起足夠的警惕。1第127頁圖5-14以下三處錯(cuò):(1) 四只4.7k上拉電阻多余,因?yàn)閱纹瑱C(jī)P1口內(nèi)部已經(jīng)有上拉電阻;(2) 四只200限流電阻阻值太小,使LED工作電流,遠(yuǎn)遠(yuǎn)超過本書第47頁所介紹P1“端口只能提供幾毫安的輸出電流”的比較合適的說法,將燒毀單片機(jī),這是一條根本性錯(cuò)誤即不能容忍的錯(cuò)誤;(3) 兩只1k上拉電阻阻值嫌小。2第128頁圖5-15該圖出現(xiàn)根本性錯(cuò)誤,因?yàn)?1單片機(jī)P1口只適合提供灌電流輸出。按照該圖設(shè)計(jì)電路,即使限流電阻阻值取最小,LED也只能獲得約0.15mA的電流,根本不足以使LED正常發(fā)光。3第148頁圖7-1(a)并行通信缺讀信號(hào)和寫信號(hào)線各一根。4第157頁圖7-10時(shí)鐘脈沖信號(hào)上升沿沒有對(duì)準(zhǔn)數(shù)據(jù)有效階段,沒有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣浮設(shè)備行業(yè)相關(guān)投資計(jì)劃提議范本
- 2025中國旅游集團(tuán)崗位公開招聘20人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國南水北調(diào)集團(tuán)江漢水網(wǎng)建設(shè)開發(fā)限公司春季公開招聘【15人】高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025中國人民財(cái)產(chǎn)保險(xiǎn)股份限公司嘉興市分公司招聘29人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年陜西省省屬事業(yè)單位聯(lián)考招聘377人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年廣東佛山市南海區(qū)糧油儲(chǔ)備限公司招聘3人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川省瀘州市古藺縣事業(yè)單位招聘86人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇省揚(yáng)州廣陵事業(yè)單位招聘141人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省雅安市考試招聘綜合類事業(yè)單位人員418人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川南充市高坪區(qū)招聘事業(yè)單位工作人員48人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- windows7 操作系統(tǒng)
- 幼兒園交通安全宣傳課件PPT
- 門窗施工組織設(shè)計(jì)與方案
- 健身健美(課堂PPT)
- 鋼筋統(tǒng)計(jì)表(插圖有尺寸)
- (完整版)財(cái)務(wù)管理學(xué)課后習(xí)題答案-人大版
- 食品安全管理體系培訓(xùn)系列教材(共44頁).ppt
- 世界各地的新年習(xí)俗(課堂PPT)
- 生物礦化與仿生材料的研究現(xiàn)狀及展望
- JJF 1827-2020水泥細(xì)度負(fù)壓篩析儀校準(zhǔn)規(guī)范
- 物業(yè)項(xiàng)目月度績(jī)效考核表格
評(píng)論
0/150
提交評(píng)論