<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 單片機設計經(jīng)驗技巧精華集錦(六)

單片機設計經(jīng)驗技巧精華集錦(六)

作者: 時(shí)間:2013-05-27 來(lái)源:網(wǎng)絡(luò ) 收藏
2:C51為什么要嵌套匯編

  51一個(gè)顯著(zhù)優(yōu)點(diǎn)就是指令執行時(shí)間固定,因此可以適應時(shí)序要求嚴格的場(chǎng)合。例如符合ISO7816協(xié)議的cpu卡的讀寫(xiě),對時(shí)序要求比較嚴格。其實(shí)就是用io腳做出來(lái)的同步半雙工串口。支持cpu卡的程序一般比較龐大,需要用c51來(lái)組織,但是由于c編譯的不確定性,必須把底層程序封裝成匯編語(yǔ)言模塊嵌入到工程中。這就帶來(lái)幾個(gè)問(wèn)題:如何聲明函數、參數如何傳遞等。限于篇幅,不能說(shuō)得很細。下面舉例:

  匯編程序單獨保存一個(gè)文件,加入到工程中,函數如下:

  _proc_a:

  mov a, r7

  inc a

  mov r7, a

  ret

  用c語(yǔ)言在.h文件中聲明: extern unsigned char proc_a(unsigned char val);

  調用時(shí)形如: retvalue = proc_a(0x11);

  說(shuō)明:

  a:匯編程序如果帶參數,則需要在匯編程序前多加一個(gè)下劃線(xiàn)。而聲明它的地方不用加(偉福編譯器這么要求的)。

  b:函數的形參中第一參數用R7傳遞,函數返回值用R7返回,這是C51的通用規范。其他參數都有相應規定。函數可以返回一個(gè)位,用psw的c位返回。

  c:上面的語(yǔ)句,執行順序是把0x11給R7,然后跳轉子程序,子程序將它加1后送回。

  d:函數跳轉到匯編程序時(shí),本區的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考慮調用后是否要恢復這些常規資源。上例中,A的值被函數使用了,編程者不必恢復調用前的值。

  3:51的P0口特殊之處

  許多新手都碰到這個(gè)問(wèn)題,其實(shí)很簡(jiǎn)單,這涉及到芯片的io腳是怎么做出來(lái)的。這對硬件工程師來(lái)說(shuō)十分重要。TTL的io腳模型:

  單片機設計經(jīng)驗技巧精華集錦(六)

  P1,P2,P3口都可以理解成左圖,注意vcc下面有個(gè)電阻,因此可以理解成:引腳輸出1的能力弱。地那邊沒(méi)有電阻,可以理解成引腳吸入電流能力強。而P0口,可以理解成右圖。這就是集電極開(kāi)路輸出,也叫OC輸出??梢钥闯?,當CTR=1時(shí),三極管導通,引腳被接地;當ctr=0時(shí),三極管截止,引腳浮空,也叫三態(tài)。這個(gè)端口這么做的目的是考慮P0口肩負讀寫(xiě)數據和地址復用,這個(gè)關(guān)系要仔細看懂cpu時(shí)序圖。因此,P0口要加合適的上拉電阻,絕不要加下拉電阻。上拉電阻的選擇要看外部負載情況。

  4:P1-3口如何輸入輸出

  從上節的左圖可以看出。做輸出時(shí),ctr=1則輸出強信號0,ctr=0則輸出弱信號1。當io腳做輸入時(shí),應使ctr=0,這樣三極管截止。外部信號如果是1,則上拉電阻加強了這個(gè)1,就會(huì )讀到1。當外部信號為0時(shí),注意,必須將上拉電阻的上拉作用全部抵消,才能在引腳上得到0。

  因此,對于程序來(lái)說(shuō),把io腳置1就處于接收狀態(tài),當然也是輸出1狀態(tài)。程序置io口為1,讀取的信號是不是1就依靠外部電路了,如果外部電路沒(méi)有“吃掉”上拉電阻的電流,則讀取得到1,反之,雖然程序置io腳為1,但是讀取得到的就是0。

  因此,如果用io腳的高電平驅動(dòng)外部電路時(shí),要小心外部電路把這個(gè)1“吃掉”從而輸出不了1。而作為輸入時(shí),為0電平的外設必須足夠有能力將io腳拉低。所以,用io腳直接點(diǎn)亮led的時(shí)候,最好用反邏輯,就是輸出0,讓led亮。這樣能保證驅動(dòng)能力。就是io腳接led的負端,led的正端過(guò)電阻接vcc。

  因此,io腳輸出1時(shí),外部電路將它強行接地是沒(méi)有關(guān)系的,而io腳輸出0的時(shí)候,外部電路強行接電源就會(huì )把io腳損壞。所以,程序加電之后,一般把所有io口都寫(xiě)成1:MOV P0,0FFH。

  P3口引腳復用,必須引腳都處于輸出1狀態(tài)。例如,把RXD腳輸出0,則它什么數據都讀不進(jìn)來(lái)了,筆者早期曾調試一整天才發(fā)現串口收不到數據是沒(méi)有把RXD置1的原因,把時(shí)間都浪費在外圍了,當時(shí)很是汗顏。

  5:有關(guān)晶振

  單片機的晶振在內部可以簡(jiǎn)化成一個(gè)反向器。當晶振輸入腳XI剛過(guò)坎壓、被認為是1的一瞬間,輸出腳XO就輸出0,這個(gè)0會(huì )帶動(dòng)晶振使XI電壓下降,當降低到坎壓被認為是0的一瞬間,輸出腳XO就輸出1。這樣周而復始。

  因此,用示波器觀(guān)察正常工作的晶振輸入腳XI時(shí),得到的是一個(gè)不高不低的近似水平線(xiàn)。而XO則是幅值很大的正弦波。測量晶振輸入腳XI時(shí),示波器表筆要打在X10檔上,否則,表筆就能把晶振弄停。

  因此布線(xiàn)時(shí),晶振輸入腳XI要盡量靠近晶振,而XO腳可稍遠。同時(shí)XO具有一定的驅動(dòng)能力,某些芯片可以用它驅動(dòng)其它時(shí)序電路(不推薦這么做,因為系統可靠性下降)。

  寫(xiě)到這里,才發(fā)覺(jué)51單片機的問(wèn)題太多了,這篇文字簡(jiǎn)直就是滄海一粟。以后再補充吧,另行成文。

  四、單片機經(jīng)驗之談

  一、前言

  很多單片機初學(xué)者在與我交流的時(shí)候總是的一句話(huà)是我現在是單片機初學(xué)者,我怎樣才能更快的學(xué)好單片機,學(xué)習單片機有市場(chǎng)不,對于這個(gè)問(wèn)題現在就我自己如何學(xué)單片機,如何入門(mén),如何熟練,整個(gè)過(guò)程談?wù)勛约旱南敕?。先說(shuō)說(shuō)單片機,現在用的比較多的的MCS-51的單片機(但是考慮到成本及引腳資源在實(shí)際開(kāi)發(fā)中用的單片機型號不一),它的學(xué)習資料非常多,且學(xué)習成本非常低,如果你聽(tīng)說(shuō)企業(yè)里用的是什么什么芯片,但是不知道,你問(wèn)過(guò)沒(méi)有,那個(gè)仿真器需要多少錢(qián),51單片機對于智能控制入門(mén)來(lái)說(shuō)是非常好的,一線(xiàn)下載程序,ARM太神秘,PLC太高貴,想來(lái)想去還是51。那怎樣才能更快更好的學(xué)好單片機呢?單片機這門(mén)課是一項非常重視動(dòng)手實(shí)踐的科目,而且單片機也是一門(mén)集計算機編程與電子技術(shù)為一身的學(xué)科,如果你是單片機高手,那么說(shuō)明你也是計算機編程和電子技術(shù)高手。

  二、學(xué)習單片機時(shí)候一定要看書(shū)

  不能總是看書(shū),但是學(xué)習它首先必須得看書(shū),那這不很矛盾。因為從書(shū)中你需要大概了解單片機各個(gè)功能寄存器(比如引腳控制寄存器、定時(shí)、中斷、串口相關(guān)寄存器),控制單片機的核心是用程序去控制單片機的各個(gè)功能寄存器,給寄存器賦值二進(jìn)制數據0或者1,這樣一來(lái)對于引腳寄存器單片機可以根據二進(jìn)制數據0和1輸出高低電平控制外部設備,對于內部資源寄存器,單片機也通過(guò)二進(jìn)制數據0和1使用單片機內部的功能。比如單片機引腳寄存器P1,語(yǔ)句P1=0xfe;(MOV P1,#0FEH)。說(shuō)明現在控制單片機P1口的第一個(gè)引腳輸出低電平,其他引腳輸出高電平。比如中斷中斷允許寄存器IE,語(yǔ)句IE=0x81;(MOV IE,#81H) 則說(shuō)明控制中斷打開(kāi)總開(kāi)關(guān)和外部中斷0的子開(kāi)關(guān)。至于看書(shū),只需大概了解單片機各管腳、各個(gè)特殊功能寄存器都是干什么的?能實(shí)現什么樣的功能?這個(gè)非常重要,這也許是看書(shū)的最主要的目的。第一次,第二次你可能看不明白,但這不要緊,因為還缺少實(shí)際的感觀(guān)認識。通過(guò)接下來(lái)的實(shí)驗就可以非常感觀(guān)的認識,在這個(gè)過(guò)程一定要花時(shí)間,學(xué)習程序不能硬背,但是學(xué)習寄存器一定要下功夫,理解他的功能所在。推薦一本書(shū),就這一本就足夠了,書(shū)名是《例說(shuō)8051》有匯編語(yǔ)言和C語(yǔ)言版本的,非常強悍的一本書(shū),但是我用一個(gè)五一放假的時(shí)間看完了這本書(shū),看完后,覺(jué)得自己已經(jīng)是單片機高手了。書(shū)中圖文并茂,內容安排緊張有序,并非市面上很多說(shuō)教的技術(shù)文檔式的書(shū),什么學(xué)完概念,學(xué)指令,學(xué)完指令學(xué)接口,學(xué)完接口才知道,原來(lái)學(xué)習單片機是學(xué)天書(shū)。根據書(shū)本的安排循序漸進(jìn)的看完前兩章,然后一定是實(shí)踐,一定是實(shí)踐啊,這是非常關(guān)鍵的一步,在戰場(chǎng)上上紙上談兵的列子很多,在學(xué)習單片機也一樣,很多相關(guān)專(zhuān)業(yè)的研究生甚至博士生直到畢業(yè)都不清楚單片機的IO口的分布,不知道分布談何說(shuō)開(kāi)發(fā)呢?更有一些所謂的單片機高手只停留在編程,以為了買(mǎi)了一塊高級學(xué)習板,練習完了里面所有的程序,感覺(jué)自己排第二沒(méi)人敢拍第一,覺(jué)得下一步不知道如何學(xué)習單片機了。殊不知,他們中的很多人到最后單片機LED的電阻加多大都不清楚更不用說(shuō)單片機的引腳分布,你說(shuō),如果這樣去開(kāi)發(fā)那不是“草菅人命”啊。不是紙上談兵是什么啊。

  三、學(xué)習單片機準備什么所以???

  學(xué)習單片機看書(shū)不夠,實(shí)踐也要從實(shí)際出發(fā),現在的技術(shù)太模塊了,什么都可以模塊,模塊的到最后,技術(shù)人員都成了只會(huì )用了,祖先的留下的知識,基礎的知識該知道還是一定要知道的啊。 畢竟學(xué)習單片機的最終目的是開(kāi)發(fā),是通過(guò)創(chuàng )造智能控制的實(shí)物,體現自己的價(jià)值。關(guān)于實(shí)踐有兩種方法可以選擇一種方法:購買(mǎi)一塊51單片機的實(shí)驗板,不要求功能太的,對于初學(xué)者來(lái)功能非常多的那種板子,上面有很多東西你這輩子都用不著(zhù),更有實(shí)驗板為了增加功能,降低

蜂鳴器相關(guān)文章:蜂鳴器原理

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>