日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> 技術(shù)中心 >> 單片機(jī)入門 >> 單片機(jī)學(xué)習(xí)中常見的問題

單片機(jī)學(xué)習(xí)中常見的問題

作者:admin 來源:不詳 發(fā)布時(shí)間:2018-05-08  瀏覽:4

1.學(xué)單片機(jī)可以做什么?

單片機(jī)應(yīng)用廣泛,遙控小車,洗衣機(jī),冰箱,彩電,空調(diào)隨處都可見到單片機(jī)的身影。學(xué)會(huì)了單片機(jī),你可以玩你喜歡的小制作,也可以用單片機(jī)設(shè)計(jì)一些小的產(chǎn)品,最重要的是,單片機(jī)會(huì)把你帶進(jìn)電子設(shè)計(jì)這一領(lǐng)域,充分展示自己的能力,當(dāng)然,也會(huì)給你帶來不錯(cuò)的回報(bào)。

2.該學(xué)哪種單片機(jī)?

單片機(jī)型號(hào)有很多,常見的有51,PIC,AVR幾個(gè)系列,每個(gè)系列又有很多型號(hào)。那么,作為初學(xué)者的我們,該學(xué)習(xí)哪款單片機(jī)呢?

其實(shí)單片機(jī)都是有相同之處的。只要認(rèn)真學(xué)了,真正掌握了一款單片機(jī),在學(xué)習(xí)其他款,后者是直接使用都是很容易的。51系列作為經(jīng)典的一款單片機(jī),它的資料非常的豐富,因此,從51開始入門應(yīng)該是一個(gè)不錯(cuò)的選擇。

3.該學(xué)匯編還是學(xué)C51?

這估計(jì)是爭(zhēng)論最大的一個(gè)問題了,有些人堅(jiān)持學(xué)單片機(jī)軟件一定要匯編,也有人堅(jiān)持選擇高級(jí)語(yǔ)言,這主要是C51推行不久時(shí),那時(shí)候單片機(jī)內(nèi)部資源比較寶貴,而且C51本身的編譯器效率也不夠高,導(dǎo)致當(dāng)時(shí)很多人選擇用匯編來寫代碼。那么現(xiàn)在的情況是怎樣的呢?編譯器效率高了,單片機(jī)內(nèi)部的資源也豐富了,用C來寫單片機(jī)軟件不會(huì)在遇到以前那樣的問題。

如果現(xiàn)在還有人堅(jiān)持一定要用匯編來寫整個(gè)單片機(jī)軟件,那么這個(gè)人肯定是不會(huì)C的,看看外面企業(yè)就知道,有幾家不是用C呢,畢竟C容易寫,可讀性強(qiáng),可移植性強(qiáng)。

但是光會(huì)C也還是不夠的,你還得了解匯編,實(shí)際上不是了解匯編指令,是了解單片機(jī)的體系結(jié)構(gòu)。所以我以為學(xué)習(xí)單片機(jī),還是推薦用C來寫代碼,但是平時(shí)也得多看看別人的匯編代碼,最低要求就是:能熟練運(yùn)用C寫代碼,用讀懂匯編代碼。

4:C51編譯器如何區(qū)分位地址和字節(jié)地址

是靠預(yù)定義實(shí)現(xiàn)的,比如:sfrP0=0x80;sbitP0_0=0x80;前者聲明了P0端口地址位于0x80,后者說明了P0端口的bit0,即P0.0位于位地址空間0x80處。這2個(gè)0x80具有完全不同的含義,靠關(guān)鍵字sfr和sbit來區(qū)別。這樣當(dāng)程序被編譯時(shí),編譯器會(huì)依此編譯成相應(yīng)的匯編語(yǔ)言。例如:

C51語(yǔ)句:P0=1;

P0聲明為sfr,因此編譯成:mov80h,01h,將把0x01數(shù)據(jù)送入0x80單元,由于0x80單元物理上對(duì)應(yīng)P0端口,因此,P0.0腳將輸出高電平(其實(shí)是呈現(xiàn)高阻態(tài),P0口獨(dú)有的),其他.1-.7腳輸出低電平。

C51語(yǔ)句:P0_0=1;

P0_0聲明為sbit,因此編譯成:setb80h,這將把位地址空間的0x80地址的bit的值置1。這個(gè)位正是P0口的bit0,執(zhí)行后,P0.0將輸出高阻態(tài)。而P0.1-.7不會(huì)變化。

5:C51為什么要嵌套匯編

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

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

_proc_a:

  mova,r7
  inca
  movr7,a
  ret
  用c語(yǔ)言在.h文件中聲明:externunsignedcharproc_a(unsignedcharval);
  調(diào)用時(shí)形如:retvalue=proc_a(0x11);
  說明:
  a:匯編程序如果帶參數(shù),則需要在匯編程序前多加一個(gè)下劃線。而聲明它的地方不用加(偉福編譯器這么要求的)。
  b:函數(shù)的形參中第一參數(shù)用R7傳遞,函數(shù)返回值用R7返回,這是C51的通用規(guī)范。其他參數(shù)都有相應(yīng)規(guī)定。函數(shù)可以返回一個(gè)位,用psw的c位返回。
  c:上面的語(yǔ)句,執(zhí)行順序是把0x11給R7,然后跳轉(zhuǎn)子程序,子程序?qū)⑺?后送回。
  d:函數(shù)跳轉(zhuǎn)到匯編程序時(shí),本區(qū)的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考慮調(diào)用后是否要恢復(fù)這些常規(guī)資源。上例中,A的值被函數(shù)使用了,編程者不必恢復(fù)調(diào)用前的值。
  6:51單片機(jī)的P0口特殊之處
  許多新手都碰到這個(gè)問題,其實(shí)很簡(jiǎn)單,這涉及到芯片的io腳是怎么做出來的。這對(duì)硬件工程師來說十分重要。TTL的io腳模型:
  P1,P2,P3口都可以理解成左圖,注意vcc下面有個(gè)電阻,因此可以理解成:引腳輸出1的能力弱。地那邊沒有電阻,可以理解成引腳吸入電流能力強(qiáng)。而P0口,可以理解成右圖。這就是集電極開路輸出,也叫OC輸出。可以看出,當(dāng)CTR=1時(shí),三極管導(dǎo)通,引腳被接地;當(dāng)ctr=0時(shí),三極管截止,引腳浮空,也叫三態(tài)。這個(gè)端口這么做的目的是考慮P0口肩負(fù)讀寫數(shù)據(jù)和地址復(fù)用,這個(gè)關(guān)系要仔細(xì)看懂cpu時(shí)序圖。因此,P0口要加合適的上拉電阻,絕不要加下拉電阻。上拉電阻的選擇要看外部負(fù)載情況。
  7:P1-3口如何輸入輸出
  從上節(jié)的左圖可以看出。做輸出時(shí),ctr=1則輸出強(qiáng)信號(hào)0,ctr=0則輸出弱信號(hào)1。當(dāng)io腳做輸入時(shí),應(yīng)使ctr=0,這樣三極管截止。外部信號(hào)如果是1,則上拉電阻加強(qiáng)了這個(gè)1,單片機(jī)就會(huì)讀到1。當(dāng)外部信號(hào)為0時(shí),注意,必須將上拉電阻的上拉作用全部抵消,才能在引腳上得到0。
  因此,對(duì)于程序來說,把io腳置1就處于接收狀態(tài),當(dāng)然也是輸出1狀態(tài)。程序置io口為1,讀取的信號(hào)是不是1就依靠外部電路了,如果外部電路沒有“吃掉”上拉電阻的電流,則讀取得到1,反之,雖然程序置io腳為1,但是讀取得到的就是0。
  因此,如果用io腳的高電平驅(qū)動(dòng)外部電路時(shí),要小心外部電路把這個(gè)1“吃掉”從而輸出不了1。而作為輸入時(shí),為0電平的外設(shè)必須足夠有能力將io腳拉低。所以,用io腳直接點(diǎn)亮led的時(shí)候,最好用反邏輯,就是輸出0,讓led亮。這樣能保證驅(qū)動(dòng)能力。就是io腳接led的負(fù)端,led的正端過電阻接vcc。
  因此,io腳輸出1時(shí),外部電路將它強(qiáng)行接地是沒有關(guān)系的,而io腳輸出0的時(shí)候,外部電路強(qiáng)行接電源就會(huì)把io腳損壞。所以,程序加電之后,一般把所有io口都寫成1:MOVP0,0FFH。
  P3口引腳復(fù)用,必須引腳都處于輸出1狀態(tài)。例如,把RXD腳輸出0,則它什么數(shù)據(jù)都讀不進(jìn)來了,筆者早期曾調(diào)試一整天才發(fā)現(xiàn)串口收不到數(shù)據(jù)是沒有把RXD置1的原因,把時(shí)間都浪費(fèi)在外圍了,當(dāng)時(shí)很是汗顏。
  8:有關(guān)晶振
  單片機(jī)的晶振在內(nèi)部可以簡(jiǎn)化成一個(gè)反向器。當(dāng)晶振輸入腳XI剛過坎壓、被認(rèn)為是1的一瞬間,輸出腳XO就輸出0,這個(gè)0會(huì)帶動(dòng)晶振使XI電壓下降,當(dāng)降低到坎壓被認(rèn)為是0的一瞬間,輸出腳XO就輸出1。這樣周而復(fù)始。
  因此,用示波器觀察正常工作的晶振輸入腳XI時(shí),得到的是一個(gè)不高不低的近似水平線。而XO則是幅值很大的正弦波。測(cè)量晶振輸入腳XI時(shí),示波器表筆要打在X10檔上,否則,表筆就能把晶振弄停。
  因此布線時(shí),晶振輸入腳XI要盡量靠近晶振,而XO腳可稍遠(yuǎn)。同時(shí)XO具有一定的驅(qū)動(dòng)能力,某些芯片可以用它驅(qū)動(dòng)其它時(shí)序電路(不推薦這么做,因?yàn)橄到y(tǒng)可靠性下降)。

編輯:admin  最后修改時(shí)間:2018-05-08

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

晋城| 双江| 孙吴县| 依兰县| 晴隆县| 漯河市| 合阳县| 克拉玛依市| 华池县| 巴马| 凤山市| 青铜峡市| 平阳县| 锡林浩特市| 会同县| 卢湾区| 维西| 年辖:市辖区| 共和县| 桂阳县| 汽车| 青川县| 嵊州市| 安平县| 中宁县| 突泉县| 河池市| 云林县| 凤台县| 望城县| 萨嘎县| 乌海市| 三门峡市| 奈曼旗| 嘉荫县| 砚山县| 甘德县| 临汾市| 庆安县| 任丘市| 景东|