單片機設(shè)計經(jīng)驗技巧精華集錦(六)
51單片機一個顯著優(yōu)點就是指令執(zhí)行時間固定,因此可以適應(yīng)時序要求嚴(yán)格的場合。例如符合ISO7816協(xié)議的cpu卡的讀寫,對時序要求比較嚴(yán)格。其實就是用io腳做出來的同步半雙工串口。支持cpu卡的程序一般比較龐大,需要用c51來組織,但是由于c編譯的不確定性,必須把底層程序封裝成匯編語言模塊嵌入到工程中。這就帶來幾個問題:如何聲明函數(shù)、參數(shù)如何傳遞等。限于篇幅,不能說得很細(xì)。下面舉例:
匯編程序單獨保存一個文件,加入到工程中,函數(shù)如下:
_proc_a:
mov a, r7
inc a
mov r7, a
ret
用c語言在.h文件中聲明: extern unsigned char proc_a(unsigned char val);
調(diào)用時形如: retvalue = proc_a(0x11);
說明:
a:匯編程序如果帶參數(shù),則需要在匯編程序前多加一個下劃線。而聲明它的地方不用加(偉福編譯器這么要求的)。
b:函數(shù)的形參中第一參數(shù)用R7傳遞,函數(shù)返回值用R7返回,這是C51的通用規(guī)范。其他參數(shù)都有相應(yīng)規(guī)定。函數(shù)可以返回一個位,用psw的c位返回。
c:上面的語句,執(zhí)行順序是把0x11給R7,然后跳轉(zhuǎn)子程序,子程序?qū)⑺?后送回。
d:函數(shù)跳轉(zhuǎn)到匯編程序時,本區(qū)的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考慮調(diào)用后是否要恢復(fù)這些常規(guī)資源。上例中,A的值被函數(shù)使用了,編程者不必恢復(fù)調(diào)用前的值。
3:51單片機的P0口特殊之處
許多新手都碰到這個問題,其實很簡單,這涉及到芯片的io腳是怎么做出來的。這對硬件工程師來說十分重要。TTL的io腳模型:
P1,P2,P3口都可以理解成左圖,注意vcc下面有個電阻,因此可以理解成:引腳輸出1的能力弱。地那邊沒有電阻,可以理解成引腳吸入電流能力強。而P0口,可以理解成右圖。這就是集電極開路輸出,也叫OC輸出??梢钥闯?,當(dāng)CTR=1時,三極管導(dǎo)通,引腳被接地;當(dāng)ctr=0時,三極管截止,引腳浮空,也叫三態(tài)。這個端口這么做的目的是考慮P0口肩負(fù)讀寫數(shù)據(jù)和地址復(fù)用,這個關(guān)系要仔細(xì)看懂cpu時序圖。因此,P0口要加合適的上拉電阻,絕不要加下拉電阻。上拉電阻的選擇要看外部負(fù)載情況。
4:P1-3口如何輸入輸出
從上節(jié)的左圖可以看出。做輸出時,ctr=1則輸出強信號0,ctr=0則輸出弱信號1。當(dāng)io腳做輸入時,應(yīng)使ctr=0,這樣三極管截止。外部信號如果是1,則上拉電阻加強了這個1,單片機就會讀到1。當(dāng)外部信號為0時,注意,必須將上拉電阻的上拉作用全部抵消,才能在引腳上得到0。
因此,對于程序來說,把io腳置1就處于接收狀態(tài),當(dāng)然也是輸出1狀態(tài)。程序置io口為1,讀取的信號是不是1就依靠外部電路了,如果外部電路沒有“吃掉”上拉電阻的電流,則讀取得到1,反之,雖然程序置io腳為1,但是讀取得到的就是0。
因此,如果用io腳的高電平驅(qū)動外部電路時,要小心外部電路把這個1“吃掉”從而輸出不了1。而作為輸入時,為0電平的外設(shè)必須足夠有能力將io腳拉低。所以,用io腳直接點亮led的時候,最好用反邏輯,就是輸出0,讓led亮。這樣能保證驅(qū)動能力。就是io腳接led的負(fù)端,led的正端過電阻接vcc。
因此,io腳輸出1時,外部電路將它強行接地是沒有關(guān)系的,而io腳輸出0的時候,外部電路強行接電源就會把io腳損壞。所以,程序加電之后,一般把所有io口都寫成1:MOV P0,0FFH。
P3口引腳復(fù)用,必須引腳都處于輸出1狀態(tài)。例如,把RXD腳輸出0,則它什么數(shù)據(jù)都讀不進(jìn)來了,筆者早期曾調(diào)試一整天才發(fā)現(xiàn)串口收不到數(shù)據(jù)是沒有把RXD置1的原因,把時間都浪費在外圍了,當(dāng)時很是汗顏。
5:有關(guān)晶振
單片機的晶振在內(nèi)部可以簡化成一個反向器。當(dāng)晶振輸入腳XI剛過坎壓、被認(rèn)為是1的一瞬間,輸出腳XO就輸出0,這個0會帶動晶振使XI電壓下降,當(dāng)降低到坎壓被認(rèn)為是0的一瞬間,輸出腳XO就輸出1。這樣周而復(fù)始。
因此,用示波器觀察正常工作的晶振輸入腳XI時,得到的是一個不高不低的近似水平線。而XO則是幅值很大的正弦波。測量晶振輸入腳XI時,示波器表筆要打在X10檔上,否則,表筆就能把晶振弄停。
因此布線時,晶振輸入腳XI要盡量靠近晶振,而XO腳可稍遠(yuǎn)。同時XO具有一定的驅(qū)動能力,某些芯片可以用它驅(qū)動其它時序電路(不推薦這么做,因為系統(tǒng)可靠性下降)。
寫到這里,才發(fā)覺51單片機的問題太多了,這篇文字簡直就是滄海一粟。以后再補充吧,另行成文。
四、單片機經(jīng)驗之談
一、前言
很多單片機初學(xué)者在與我交流的時候總是的一句話是我現(xiàn)在是單片機初學(xué)者,我怎樣才能更快的學(xué)好單片機,學(xué)習(xí)單片機有市場不,對于這個問題現(xiàn)在就我自己如何學(xué)單片機,如何入門,如何熟練,整個過程談?wù)勛约旱南敕?。先說說單片機,現(xiàn)在用的比較多的的MCS-51的單片機(但是考慮到成本及引腳資源在實際開發(fā)中用的單片機型號不一),它的學(xué)習(xí)資料非常多,且學(xué)習(xí)成本非常低,如果你聽說企業(yè)里用的是什么什么芯片,但是不知道,你問過沒有,那個仿真器需要多少錢,51單片機對于智能控制入門來說是非常好的,一線下載程序,ARM太神秘,PLC太高貴,想來想去還是51。那怎樣才能更快更好的學(xué)好單片機呢?單片機這門課是一項非常重視動手實踐的科目,而且單片機也是一門集計算機編程與電子技術(shù)為一身的學(xué)科,如果你是單片機高手,那么說明你也是計算機編程和電子技術(shù)高手。
二、學(xué)習(xí)單片機時候一定要看書
不能總是看書,但是學(xué)習(xí)它首先必須得看書,那這不很矛盾。因為從書中你需要大概了解單片機各個功能寄存器(比如引腳控制寄存器、定時、中斷、串口相關(guān)寄存器),控制單片機的核心是用程序去控制單片機的各個功能寄存器,給寄存器賦值二進(jìn)制數(shù)據(jù)0或者1,這樣一來對于引腳寄存器單片機可以根據(jù)二進(jìn)制數(shù)據(jù)0和1輸出高低電平控制外部設(shè)備,對于內(nèi)部資源寄存器,單片機也通過二進(jìn)制數(shù)據(jù)0和1使用單片機內(nèi)部的功能。比如單片機引腳寄存器P1,語句P1=0xfe;(MOV P1,#0FEH)。說明現(xiàn)在控制單片機P1口的第一個引腳輸出低電平,其他引腳輸出高電平。比如中斷中斷允許寄存器IE,語句IE=0x81;(MOV IE,#81H) 則說明控制中斷打開總開關(guān)和外部中斷0的子開關(guān)。至于看書,只需大概了解單片機各管腳、各個特殊功能寄存器都是干什么的?能實現(xiàn)什么樣的功能?這個非常重要,這也許是看書的最主要的目的。第一次,第二次你可能看不明白,但這不要緊,因為還缺少實際的感觀認(rèn)識。通過接下來的實驗就可以非常感觀的認(rèn)識,在這個過程一定要花時間,學(xué)習(xí)程序不能硬背,但是學(xué)習(xí)寄存器一定要下功夫,理解他的功能所在。推薦一本書,就這一本就足夠了,書名是《例說8051》有匯編語言和C語言版本的,非常強悍的一本書,但是我用一個五一放假的時間看完了這本書,看完后,覺得自己已經(jīng)是單片機高手了。書中圖文并茂,內(nèi)容安排緊張有序,并非市面上很多說教的技術(shù)文檔式的書,什么學(xué)完概念,學(xué)指令,學(xué)完指令學(xué)接口,學(xué)完接口才知道,原來學(xué)習(xí)單片機是學(xué)天書。根據(jù)書本的安排循序漸進(jìn)的看完前兩章,然后一定是實踐,一定是實踐啊,這是非常關(guān)鍵的一步,在戰(zhàn)場上上紙上談兵的列子很多,在學(xué)習(xí)單片機也一樣,很多相關(guān)專業(yè)的研究生甚至博士生直到畢業(yè)都不清楚單片機的IO口的分布,不知道分布談何說開發(fā)呢?更有一些所謂的單片機高手只停留在編程,以為了買了一塊高級學(xué)習(xí)板,練習(xí)完了里面所有的程序,感覺自己排第二沒人敢拍第一,覺得下一步不知道如何學(xué)習(xí)單片機了。殊不知,他們中的很多人到最后單片機LED的電阻加多大都不清楚更不用說單片機的引腳分布,你說,如果這樣去開發(fā)那不是“草菅人命”啊。不是紙上談兵是什么啊。
三、學(xué)習(xí)單片機準(zhǔn)備什么所以???
學(xué)習(xí)單片機看書不夠,實踐也要從實際出發(fā),現(xiàn)在的技術(shù)太模塊了,什么都可以模塊,模塊的到最后,技術(shù)人員都成了只會用了,祖先的留下的知識,基礎(chǔ)的知識該知道還是一定要知道的啊。 畢竟學(xué)習(xí)單片機的最終目的是開發(fā),是通過創(chuàng)造智能控制的實物,體現(xiàn)自己的價值。關(guān)于實踐有兩種方法可以選擇一種方法:購買一塊51單片機的實驗板,不要求功能太的,對于初學(xué)者來功能非常多的那種板子,上面有很多東西你這輩子都用不著,更有實驗板為了增加功能,降低
蜂鳴器相關(guān)文章:蜂鳴器原理
評論