單片機學習中常見的問題

發(fā)布時間:2024-01-25
1.學單片機可以做什么?
單片機應用廣泛,遙控小車,洗衣機,冰箱,彩電,空調隨處都可見到單片機的身影。學會了單片機,你可以玩你喜歡的小制作,也可以用單片機設計一些小的產品,最重要的是,單片機會把你帶進電子設計這一領域,充分展示自己的能力,當然,也會給你帶來不錯的回報。
2.該學哪種單片機?
單片機型號有很多,常見的有51,pic,avr幾個系列,每個系列又有很多型號。那么,作為初學者的我們,該學習哪款單片機呢?
其實單片機都是有相同之處的。只要認真學了,真正掌握了一款單片機,在學習其他款,后者是直接使用都是很容易的。51系列作為經典的一款單片機,它的資料非常的豐富,因此,從51開始入門應該是一個不錯的選擇。
3.該學匯編還是學c51?
這估計是爭論最大的一個問題了,有些人堅持學單片機軟件一定要匯編,也有人堅持選擇高級語言,這主要是c51推行不久時,那時候單片機內部資源比較寶貴,而且c51本身的編譯器效率也不夠高,導致當時很多人選擇用匯編來寫代碼。那么現(xiàn)在的情況是怎樣的呢?編譯器效率高了,單片機內部的資源也豐富了,用c來寫單片機軟件不會在遇到以前那樣的問題。
如果現(xiàn)在還有人堅持一定要用匯編來寫整個單片機軟件,那么這個人肯定是不會c的,看看外面企業(yè)就知道,有幾家不是用c呢,畢竟c容易寫,可讀性強,可移植性強。
但是光會c也還是不夠的,你還得了解匯編,實際上不是了解匯編指令,是了解單片機的體系結構。所以我以為學習單片機,還是推薦用c來寫代碼,但是平時也得多看看別人的匯編代碼,最低要求就是:能熟練運用c寫代碼,用讀懂匯編代碼。
4:c51編譯器如何區(qū)分位地址和字節(jié)地址
是靠預定義實現(xiàn)的,比如:sfrp0=0x80;sbitp0_0=0x80;前者聲明了p0端口地址位于0x80,后者說明了p0端口的bit0,即p0.0位于位地址空間0x80處。這2個0x80具有完全不同的含義,靠關鍵字sfr和sbit來區(qū)別。這樣當程序被編譯時,編譯器會依此編譯成相應的匯編語言。例如:
c51語句:p0=1;
p0聲明為sfr,因此編譯成:mov80h,01h,將把0x01數(shù)據送入0x80單元,由于0x80單元物理上對應p0端口,因此,p0.0腳將輸出高電平(其實是呈現(xiàn)高阻態(tài),p0口獨有的),其他.1-.7腳輸出低電平。
c51語句:p0_0=1;
p0_0聲明為sbit,因此編譯成:setb80h,這將把位地址空間的0x80地址的bit的值置1。這個位正是p0口的bit0,執(zhí)行后,p0.0將輸出高阻態(tài)。而p0.1-.7不會變化。
5:c51為什么要嵌套匯編
51單片機一個顯著優(yōu)點就是指令執(zhí)行時間固定,因此可以適應時序要求嚴格的場合。例如符合iso7816協(xié)議的cpu卡的讀寫,對時序要求比較嚴格。其實就是用io腳做出來的同步半雙工串口。支持cpu卡的程序一般比較龐大,需要用c51來組織,但是由于c編譯的不確定性,必須把底層程序封裝成匯編語言模塊嵌入到工程中。這就帶來幾個問題:如何聲明函數(shù)、參數(shù)如何傳遞等。限于篇幅,不能說得很細。下面舉例:
匯編程序單獨保存一個文件,加入到工程中,函數(shù)如下:
_proc_a:
mova,r7
inca
movr7,a
ret
用c語言在.h文件中聲明:externunsignedcharproc_a(unsignedcharval);
調用時形如:retvalue=proc_a(0x11);
說明:
a:匯編程序如果帶參數(shù),則需要在匯編程序前多加一個下劃線。而聲明它的地方不用加(偉福編譯器這么要求的)。
b:函數(shù)的形參中第一參數(shù)用r7傳遞,函數(shù)返回值用r7返回,這是c51的通用規(guī)范。其他參數(shù)都有相應規(guī)定。函數(shù)可以返回一個位,用psw的c位返回。
c:上面的語句,執(zhí)行順序是把0x11給r7,然后跳轉子程序,子程序將它加1后送回。
d:函數(shù)跳轉到匯編程序時,本區(qū)的r0-r7,a,b,psw,dptr等寄存器可以供子程序使用,不必考慮調用后是否要恢復這些常規(guī)資源。上例中,a的值被函數(shù)使用了,編程者不必恢復調用前的值。
6:51單片機的p0口特殊之處
許多新手都碰到這個問題,其實很簡單,這涉及到芯片的io腳是怎么做出來的。這對硬件工程師來說十分重要。ttl的io腳模型:
p1,p2,p3口都可以理解成左圖,注意vcc下面有個電阻,因此可以理解成:引腳輸出1的能力弱。地那邊沒有電阻,可以理解成引腳吸入電流能力強。而p0口,可以理解成右圖。這就是集電極開路輸出,也叫oc輸出??梢钥闯?,當ctr=1時,三極管導通,引腳被接地;當ctr=0時,三極管截止,引腳浮空,也叫三態(tài)。這個端口這么做的目的是考慮p0口肩負讀寫數(shù)據和地址復用,這個關系要仔細看懂cpu時序圖。因此,p0口要加合適的上拉電阻,絕不要加下拉電阻。上拉電阻的選擇要看外部負載情況。
7:p1-3口如何輸入輸出
從上節(jié)的左圖可以看出。做輸出時,ctr=1則輸出強信號0,ctr=0則輸出弱信號1。當io腳做輸入時,應使ctr=0,這樣三極管截止。外部信號如果是1,則上拉電阻加強了這個1,單片機就會讀到1。當外部信號為0時,注意,必須將上拉電阻的上拉作用全部抵消,才能在引腳上得到0。
因此,對于程序來說,把io腳置1就處于接收狀態(tài),當然也是輸出1狀態(tài)。程序置io口為1,讀取的信號是不是1就依靠外部電路了,如果外部電路沒有“吃掉”上拉電阻的電流,則讀取得到1,反之,雖然程序置io腳為1,但是讀取得到的就是0。
因此,如果用io腳的高電平驅動外部電路時,要小心外部電路把這個1“吃掉”從而輸出不了1。而作為輸入時,為0電平的外設必須足夠有能力將io腳拉低。所以,用io腳直接點亮led的時候,最好用反邏輯,就是輸出0,讓led亮。這樣能保證驅動能力。就是io腳接led的負端,led的正端過電阻接vcc。
因此,io腳輸出1時,外部電路將它強行接地是沒有關系的,而io腳輸出0的時候,外部電路強行接電源就會把io腳損壞。所以,程序加電之后,一般把所有io口都寫成1:movp0,0ffh。
p3口引腳復用,必須引腳都處于輸出1狀態(tài)。例如,把rxd腳輸出0,則它什么數(shù)據都讀不進來了,筆者早期曾調試一整天才發(fā)現(xiàn)串口收不到數(shù)據是沒有把rxd置1的原因,把時間都浪費在外圍了,當時很是汗顏。
8:有關晶振
單片機的晶振在內部可以簡化成一個反向器。當晶振輸入腳xi剛過坎壓、被認為是1的一瞬間,輸出腳xo就輸出0,這個0會帶動晶振使xi電壓下降,當降低到坎壓被認為是0的一瞬間,輸出腳xo就輸出1。這樣周而復始。
因此,用示波器觀察正常工作的晶振輸入腳xi時,得到的是一個不高不低的近似水平線。而xo則是幅值很大的正弦波。測量晶振輸入腳xi時,示波器表筆要打在x10檔上,否則,表筆就能把晶振弄停。
因此布線時,晶振輸入腳xi要盡量靠近晶振,而xo腳可稍遠。同時xo具有一定的驅動能力,某些芯片可以用它驅動其它時序電路(不推薦這么做,因為系統(tǒng)可靠性下降)。
上一個:海南實力強的服務器租用云主機
下一個:RC0201FR-074R22L,0201 4.22Ω 1.0%電阻

瓜葉菊的養(yǎng)殖方法
百度云服務器云盤掛載
windows10 開始菜單(window10開始菜單在哪)
提升設備壽命(purolator電機潤滑油在工控自動化中的應用價值解析)
清水混凝土分哪幾類?
OT systems光纖
插件金屬膜電阻器如何選型?
哪種硬盤性能最好用,希捷硬盤系列分類 性能最好
非全日制用工要簽勞動合同嗎
綠蘿的介紹與管理要點
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos