單片機(jī)面試問(wèn)題集
單片機(jī)的最小系統(tǒng)?內(nèi)部的主要結(jié)構(gòu)?
答:最小系統(tǒng):電源、晶振(為系統(tǒng)提供基本的時(shí)鐘信號(hào))、復(fù)位電路;內(nèi)部結(jié)構(gòu):ROM/RAM、計(jì)時(shí)器、中斷、I/O串并行口、總線擴(kuò)展控制。
RAM和ROM的區(qū)別?
答:ROM(只讀存儲(chǔ)器):它的信息一次寫(xiě)入后只能被讀出,而不能被操作者修改或者刪除。一般用于存放固定的程序或數(shù)據(jù)表格。但是,“只讀”這個(gè)概念有時(shí)候可以被一些新特性的器件顛覆。
RAM(隨機(jī)存儲(chǔ)器):它就是我們平時(shí)說(shuō)的內(nèi)存,主要用來(lái)存放各種現(xiàn)場(chǎng)的輸入/輸出數(shù)據(jù)、中間計(jì)算結(jié)果,以及與外部存儲(chǔ)器交換信息,或者作堆棧(特點(diǎn):先進(jìn)后出,后進(jìn)先出)用。它的存儲(chǔ)單元根據(jù)具體需要可以讀出或者改寫(xiě)。
兩者區(qū)別:RAM只能用于暫時(shí)存放程序與數(shù)據(jù)。一旦電源關(guān)閉或發(fā)生斷電,RAM中的數(shù)據(jù)就會(huì)丟失。而ROM中的數(shù)據(jù)在電源關(guān)閉或者斷電后仍然會(huì)保留下來(lái)。
簡(jiǎn)而言之:相同點(diǎn)它們都是用來(lái)存儲(chǔ)數(shù)據(jù)的
不同點(diǎn)存儲(chǔ)數(shù)據(jù)的方式與數(shù)據(jù)能不能在二次加工不同
單片機(jī)I/O口有什么作用?I/0口的驅(qū)動(dòng)能力?上拉電阻與下拉電阻的作用?
答:I/O口最主要的功能用來(lái)與外部器件實(shí)現(xiàn)數(shù)據(jù)信息的交互、速度匹配、數(shù)據(jù)傳送方式和增強(qiáng)單片機(jī)的負(fù)載能力。它在兩者之間扮演橋梁的作用,單片機(jī)擁有著串行與并行接口。每個(gè)種類(lèi)的單片機(jī)的不同并行口也有著各自不同的功能。
單片機(jī)輸出低電平時(shí),將允許外部器件,向單片機(jī)引腳內(nèi)灌入電流,這個(gè)電流,稱(chēng)為“灌電流”,外部電路稱(chēng)為“灌電流負(fù)載”。
單片機(jī)輸出高電平時(shí),則允許外部器件,從單片機(jī)的引腳拉出電流,這個(gè)電流,稱(chēng)為“拉電流”,外部電路稱(chēng)為“拉電流負(fù)載”。
單片機(jī)輸出驅(qū)動(dòng)能力的問(wèn)題:每個(gè)單個(gè)的引腳,輸出低電平的時(shí)候,允許外部電路,向引腳灌入的最大電流為 10 mA;每個(gè) 8 位的接口(P1、P2 以及 P3),允許向引腳灌入的總電流最大為 15 mA,而 P0 的能力強(qiáng)一些,允許向引腳灌入的最大總電流為26 mA;全部的四個(gè)接口所允許的灌電流之和,最大為 71 mA。而當(dāng)這些引腳“輸出高電平”的時(shí)候,單片機(jī)的“拉電流”能力呢?可以說(shuō)是太差了,竟然不到 1 mA。
結(jié)論就是:?jiǎn)纹瑱C(jī)輸出低電平的時(shí)候,驅(qū)動(dòng)能力尚可,而輸出高電平的時(shí)候,就沒(méi)有輸出電流的能力。
綜上所述:灌電流負(fù)載,是合理的;而“拉電流負(fù)載”和“上拉電阻”會(huì)產(chǎn)生很大的無(wú)效電流,并且功耗大。
設(shè)計(jì)單片機(jī)的負(fù)載電路,應(yīng)該采用“灌電流負(fù)載”的電路形式,以避免無(wú)謂的電流消耗。
在數(shù)字電路中,只有二種狀態(tài),要么是高電平,要么是低電平,在通電初期,這些輸出狀態(tài)是不確定的,為了使電路確定狀態(tài),必需使用上拉電阻或下拉電阻,使一個(gè)原來(lái)不確定電平變高的叫上拉電阻,否則就是下拉電阻,上拉電阻就是從電源上接一只電阻到這個(gè)狀態(tài)口上就可以了,(就是把高的電壓加到這個(gè)點(diǎn)上去,這個(gè)點(diǎn)的電位就高了)下拉電阻的接法,從這個(gè)狀態(tài)口接一只電阻到負(fù)極(或數(shù)字接地),因電路形式與類(lèi)別不同,當(dāng)輸入端有信號(hào),這種變化會(huì)反應(yīng)到輸出口,從輸出口得到了一個(gè)狀態(tài),本來(lái)應(yīng)該完成任務(wù)了,但這會(huì)兒輸入口已沒(méi)信號(hào)了,可輸出端還是這個(gè)狀態(tài)(這個(gè)人習(xí)慣不好,開(kāi)門(mén)后總是不關(guān)門(mén),加一只彈簧,(電阻)讓它自己關(guān)門(mén),)這時(shí)候也要用到上下拉電阻,這里有復(fù)位的作用。
常見(jiàn)的時(shí)鐘電路有哪些?為什么要使用PLL?
答:先了解一下什么是時(shí)鐘電路?
時(shí)鐘電路就是產(chǎn)生像時(shí)鐘一樣準(zhǔn)確運(yùn)動(dòng)的振蕩電路,任何工作都按時(shí)間順序。用于產(chǎn)生這個(gè)時(shí)間的電路就是時(shí)鐘電路。
組成:晶體振蕩器、晶震控制芯片和電容組成。
現(xiàn)在流行的串行時(shí)鐘電路有:DS1302、DS1307、PCF8485等
它們的特點(diǎn):接口簡(jiǎn)單、價(jià)格低廉、使用方便。
DS1302:具有涓細(xì)電流充電能力的電路,主要特點(diǎn):采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768KHz晶振。
PLL(PhaseLocked Loop):鎖相環(huán)電路。用來(lái)統(tǒng)一整合時(shí)脈訊號(hào),使高頻器件正常工作。如:內(nèi)存的存取資料等。PLL用于振蕩器中的反饋技術(shù)。許多電子設(shè)備要正常工作,通常需要外部的輸入信號(hào)與內(nèi)部的振蕩信號(hào)同步。一般的晶振由于工藝與成本原因,做不到很高的頻率,而在需要高頻應(yīng)用時(shí),有相應(yīng)的器件VCO,實(shí)現(xiàn)轉(zhuǎn)成高頻,但不穩(wěn)定,故利用鎖相環(huán)路就可以實(shí)現(xiàn)穩(wěn)定且高頻的時(shí)脈沖訊號(hào)。
什么是時(shí)脈:指同步電路中時(shí)鐘的基礎(chǔ)頻率,它以(若千次周期每秒)來(lái)度量,單位是(Hz)
總之:PLL可以同步頻率,相位正交。倍頻、變頻。
單片機(jī)的尋址方式有哪些?
答:80C51有七種尋址方式:
1、立即尋址,尋址空間為ROM;
2、直接尋址,尋址空間為片內(nèi)RAM的低128B和特殊功能寄存器;
3、寄存器尋址,尋址空間為A、B、DPTR、CY、通用工作寄存器等;
4、寄存器間接尋址,片內(nèi)RAM低128B、片外RAM;
5、相對(duì)尋址,尋址空間為ROM;
6、變址尋址,尋址空間為ROM;
7、位尋址,尋址空間為片內(nèi)RAM低128B的位尋址區(qū)的128個(gè)位,其字節(jié)地址為20H~2FH;以及部分可以位尋址的特殊功能寄存器。
參考:AT89C51單片機(jī)能直接認(rèn)識(shí)和執(zhí)行的機(jī)器指令有255條,有7種尋址方式,即立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址。
1. 直接尋址:
指令中直接給出參與操作的數(shù)據(jù)的地址,該地址一般用direct表示。
匯編指令:MOV A,direct
該指令的功能是將片內(nèi)RAM地址direct單元中的內(nèi)容(參與操作的數(shù)據(jù))傳送到累加器A中,雙字節(jié)指令。
2. 立即尋址:
指令中直接給出參與操作的數(shù)據(jù),稱(chēng)立即數(shù),用data表示。在匯編語(yǔ)言中,為標(biāo)明立即數(shù),為data加前綴”#”。立即數(shù)可以是8位和16位二進(jìn)制數(shù),分別用#data和#data16表示。
匯編語(yǔ)言指令:MOV A,#data
該指令將立即數(shù)data傳送到累加器A中,雙字節(jié)指令。
3. 寄存器尋址:
參與操作的數(shù)據(jù)存放在寄存器中,匯編指令中直接以寄存器名來(lái)表示參與操作的數(shù)據(jù)地址,寄存器包括工作寄存器R0~R7、累加器A、AB、數(shù)據(jù)指針DPTR和位運(yùn)算寄存器C。
匯編語(yǔ)言指令:MOV A,Rn ;n=0~7
該指令將Rn中的內(nèi)容傳送到累加器A中,單字節(jié)指令。
4. 寄存器間接尋址:
寄存器間接尋址為二次尋址,第一次尋址得到寄存器的內(nèi)容為(Ri)或(DPTR),第二次尋址是將第一次尋址得到的寄存器內(nèi)容作為地址,并在其中存、取參與操作的數(shù)據(jù)。匯編語(yǔ)言中,寄存器前綴@是寄存器間接尋址的標(biāo)志,有@Ri、@DPTR等。
匯編語(yǔ)言指令:MOV A,@Ri ;i=0、1
該指令是將Ri中的內(nèi)容作為地址,再將該地址中的內(nèi)容傳送到累加器A中,單字節(jié)指令。
5. 變址尋址:
間接尋址由兩個(gè)寄存器提供。若由A、PC提供,在匯編語(yǔ)言指令中尋址地址表示為@A+PC;若由A和DPTR提供,在匯編語(yǔ)言指令中尋址地址為@A+DPTR。其中,PC或DPTR被稱(chēng)為基址寄存器,A被稱(chēng)為變址寄存器,基址與變址相加為16位無(wú)符號(hào)加法。若變址寄存器A中內(nèi)容加基址寄存器DPTR(或PC)中內(nèi)容時(shí),低8位有進(jìn)位,則該進(jìn)位直接加到高位,不影響進(jìn)位標(biāo)志。因變址尋址指令多用于查表,故常稱(chēng)為查表指令。
匯編語(yǔ)言指令:MOVC A,@A+DPTR
該指令將DPTR中的內(nèi)容加上A中的內(nèi)容作為地址,再將該地址中的內(nèi)容傳送到累加器A中,單字節(jié)指令。
6. 相對(duì)尋址:
相對(duì)尋址是以相對(duì)尋址指令的下一條指令的程序計(jì)數(shù)器PC的內(nèi)容為基值,加上指令機(jī)器代碼中的“相對(duì)地址”,形成新的PC值(要轉(zhuǎn)移的指令地址)的尋址方式。指令機(jī)器代碼中“相對(duì)地址”指的是用一個(gè)帶符號(hào)的8位二進(jìn)制補(bǔ)碼表示的偏移字節(jié)數(shù),其取值范圍為-128~+127,負(fù)數(shù)表示向后轉(zhuǎn)移,正數(shù)表示向前轉(zhuǎn)移。
若(PC)表示該指令在ROM中的首地址,該指令字節(jié)數(shù)為2,執(zhí)行時(shí)分兩步操作:(PC)←(PC)+2,(PC)←(PC)+相對(duì)地址。第一步完成后,PC中的值為該指令的下一條指令的首地址;第二步完成后,PC中的內(nèi)容(PC)為轉(zhuǎn)移的目標(biāo)地址。所以,轉(zhuǎn)移的目標(biāo)地址范圍是該相對(duì)尋址指令的下一條指令首址加上-128~—+127字節(jié)的地址。
匯編語(yǔ)言指令:SJMP rel
匯編語(yǔ)言相對(duì)尋址指令中的”rel”往往是一個(gè)標(biāo)號(hào)地址,表示ROM中某轉(zhuǎn)移目標(biāo)地址。匯編軟件對(duì)該匯編語(yǔ)言指令進(jìn)行匯編時(shí),自動(dòng)算出“相對(duì)地址”并填入機(jī)器代碼中,應(yīng)將”rel”理解為“帶有相對(duì)意義的轉(zhuǎn)移目標(biāo)地址”。
Rel=(PC)+相對(duì)尋址指令字節(jié)數(shù)+相對(duì)地址
其中,(PC)為該指令所在ROM中的首地址。
7. 位尋址:
參與操作的數(shù)據(jù)為“位”,而不是字節(jié),是對(duì)片內(nèi)數(shù)據(jù)存儲(chǔ)器RAM和SFR中可位尋址單元的位進(jìn)行操作的尋址方式。
匯編語(yǔ)言指令:ANL C,bit
該指令將bit(位地址)中的內(nèi)容(0或1)與C中的內(nèi)容進(jìn)行與操作,再將結(jié)果傳送到PSW中的進(jìn)位標(biāo)志C中。
什么是時(shí)鐘周期?機(jī)器周期?指令周期?它們之間的關(guān)系?
答:1、時(shí)鐘周期又叫做振蕩周期;單片機(jī)內(nèi)部時(shí)鐘電路產(chǎn)生(或外部時(shí)鐘電路送入)的信號(hào)周期,單片機(jī)的時(shí)序信號(hào)是以時(shí)鐘周期信號(hào)為基礎(chǔ)而形成的,在它的基礎(chǔ)上形成了機(jī)器周期、指令周期和各種時(shí)序信號(hào)。定義為時(shí)鐘脈沖的倒數(shù)(可以這樣理解:時(shí)鐘周期就是單片機(jī)外接晶振的倒數(shù),例如:12M的晶振,它的時(shí)鐘周期就是1/12us),是計(jì)算機(jī)中最基本的、最小的時(shí)間單位。在一個(gè)時(shí)鐘周期內(nèi),CPU僅完成一個(gè)最基本的動(dòng)作。
2、計(jì)算機(jī)中,為了便于管理,常把一條指令的執(zhí)行過(guò)程劃分為若干個(gè)階段,每一個(gè)階段完成一項(xiàng)工作。例如:取指令、存儲(chǔ)器讀、存儲(chǔ)器寫(xiě)等,這每一項(xiàng)工作稱(chēng)為一個(gè)基本操作。完成一項(xiàng)基本操作所需要的時(shí)間成為機(jī)器周期。一般情況,一個(gè)機(jī)器周期由若干個(gè)S周期(狀態(tài)周期)組成。機(jī)器周期是單片機(jī)的基本操作周期,每個(gè)機(jī)器周期包含S1、S2、……S6這6個(gè)狀態(tài),每個(gè)狀態(tài)包含兩拍P1和P2,每個(gè)拍為一個(gè)時(shí)鐘周期(振蕩周期)。因此,一個(gè)機(jī)器周期包含12個(gè)時(shí)鐘周期。依次可表示為S1P1、S1P2、S2P1、S2P2……、S6P1、S6P2。
3、指令周期:計(jì)算機(jī)從取一條指令開(kāi)始,到執(zhí)行完該指令所需要的時(shí)間稱(chēng)為指令周期。不同的指令,指令長(zhǎng)度不同,指令周期也不一樣。但指令周期以機(jī)器周期為單位,指令不同,所需的機(jī)器指令也不同。
51單片機(jī)指令根據(jù)指令長(zhǎng)度與執(zhí)行周期分為:
1) 單字節(jié)單周期指令
2) 單字節(jié)雙周期指令
3) 雙字節(jié)單周期指令
4) 雙字節(jié)雙周期指令
5) 三字節(jié)雙周期指令
6) 一字節(jié)四周期指令
總結(jié):時(shí)鐘周期是最小單位,機(jī)器周期需要1個(gè)或者多個(gè)時(shí)鐘周期,指令周期需要1個(gè)或者多個(gè)機(jī)器周期;機(jī)器周期是指完成一個(gè)基本操作的時(shí)間。指令周期是CPU的關(guān)鍵指標(biāo),指取出并執(zhí)行一條指令的時(shí)間。一般以機(jī)器周期為單位,分單指令執(zhí)行周期、雙指令執(zhí)行周期等。機(jī)器周期是完成一個(gè)基本操作的時(shí)間單元。時(shí)鐘周期是CPU的晶振的工作頻率的倒數(shù)。
單片機(jī)有哪些接口,各模塊有哪些特性及應(yīng)用環(huán)境?
答:接口電路——用于銜接外設(shè)與總線,實(shí)現(xiàn)存儲(chǔ)空間擴(kuò)展、I/O口線擴(kuò)展、類(lèi)型轉(zhuǎn)換(電平轉(zhuǎn)換、串并轉(zhuǎn)換、A/D轉(zhuǎn)換)、功能模塊、通信擴(kuò)展、總線擴(kuò)展等。
外圍設(shè)備——工作設(shè)備,連接在接口電路上,主要有輸出設(shè)備和輸入設(shè)備。
看門(mén)狗相關(guān)問(wèn)題:
看門(mén)狗的原理?
答:工作原理:在系統(tǒng)運(yùn)行以后就啟動(dòng)看門(mén)狗計(jì)數(shù)器,此時(shí)看門(mén)狗就開(kāi)始自動(dòng)計(jì)時(shí),如果達(dá)到一定的時(shí)間還不去給它進(jìn)行清零,看門(mén)狗計(jì)數(shù)器就會(huì)溢出從而引起看門(mén)狗中斷,造成系統(tǒng)的復(fù)位。
為什么會(huì)溢出呢?
因?yàn)榭撮T(mén)狗是一個(gè)計(jì)數(shù)器,而計(jì)數(shù)器位數(shù)有限。能夠裝的數(shù)值也就有限(比如8位的最多裝256個(gè)數(shù),16位的最多裝65536個(gè)數(shù)),從開(kāi)啟看門(mén)狗那刻起,它就開(kāi)始不停的數(shù)機(jī)器周期,數(shù)一個(gè)機(jī)器周期就計(jì)數(shù)器加1,加到計(jì)數(shù)器盛不下了(這就是溢出)就產(chǎn)生一個(gè)復(fù)位信號(hào),重啟系統(tǒng)。
看門(mén)狗分為軟件看門(mén)狗和硬件看門(mén)狗,在什么情況下軟件看門(mén)狗失效?
答:硬件看門(mén)狗是利用一個(gè)定時(shí)器電路,其定時(shí)輸出連接到電路的復(fù)位端,程序在一定時(shí)間范圍內(nèi)對(duì)定時(shí)器清零,因此程序正常工作時(shí),定時(shí)器總不能溢出,也就不能產(chǎn)生復(fù)位信號(hào)。如果程序出現(xiàn)故障,不在定時(shí)周期內(nèi)復(fù)位看門(mén)狗,就使得看門(mén)狗定時(shí)器溢出產(chǎn)生復(fù)位信號(hào)并重啟系統(tǒng)。
軟件看門(mén)狗原理上一樣,只是將硬件電路上的定時(shí)器用處理器的內(nèi)部定時(shí)器代替,這樣可以簡(jiǎn)化硬件電路設(shè)計(jì),但是在可靠性方面不如硬件定時(shí)器。
1、系統(tǒng)內(nèi)部定時(shí)器自身發(fā)生故障看門(mén)狗就會(huì)失效(當(dāng)然可以通過(guò)雙定時(shí)器相互監(jiān)視,成本高);
2、中斷系統(tǒng)故障導(dǎo)致定時(shí)器中斷失效。
3、整個(gè)程序死機(jī)。主程序出現(xiàn)異常。
什么時(shí)候喂狗?怎么喂狗?喂狗的注意事項(xiàng)?
答:在實(shí)際的單片機(jī)應(yīng)用系統(tǒng)中,到底選用哪種型號(hào)的看門(mén)狗,采用何種喂狗方式和看門(mén)狗連接方式以及在編程中喂狗命令應(yīng)該放在程序中什么位置,這要根據(jù)現(xiàn)場(chǎng)干擾源的特點(diǎn)、已采用的干擾措施、單片機(jī)硬件資源和軟件結(jié)構(gòu)特點(diǎn)以及對(duì)單片機(jī)系統(tǒng)的可靠性等具體情況而定。
看門(mén)狗一般應(yīng)用到程序的那些位置?
答: 一些重要的程序,必須讓它一直跑著;而且還要時(shí)時(shí)關(guān)心它的狀態(tài)——不能讓它出現(xiàn)死鎖現(xiàn)象。(當(dāng)然,如果一個(gè)主程序會(huì)出現(xiàn)死鎖,肯定是設(shè)計(jì)或者編程上的失誤。首要做的事是Debug。)但如果時(shí)間緊迫可以用軟件看門(mén)狗,暫時(shí)應(yīng)急。
喂狗命令放置位置:
定時(shí)中斷服務(wù)子程序中;
主程序中.
復(fù)位相關(guān)問(wèn)題:
復(fù)位時(shí)單片機(jī)有什么動(dòng)作?
答:主要做的就是初始化每個(gè)寄存器,包括最重要的PC指針,不包括RAM,然后單片機(jī)從復(fù)位地址開(kāi)始執(zhí)行程序。
必須使RST引腳(9)加上持續(xù)兩個(gè)機(jī)器周期(即24個(gè)振蕩周期)的高電平。單片機(jī)就執(zhí)行復(fù)位操作。如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。
單片機(jī)有哪些復(fù)位源,什么情況下會(huì)導(dǎo)致各個(gè)復(fù)位源
答:
6個(gè)復(fù)位源
TM4C123GH6PM微控制器有6個(gè)復(fù)位源:
(1)上電復(fù)位(POR);
(2)外部復(fù)位輸入引腳有效(RST);
(3)掉電檢測(cè)可以用于由以下任一事件引起:① 低于BOR0,觸發(fā)值是BOR0的 最高電壓值;② 低于BOR1,觸發(fā)值是BOR1的最高 電壓值。
(4)軟件啟動(dòng)復(fù)位(利用軟件復(fù)位寄存器);
(5)違反看門(mén)狗復(fù)位條件;
(6)MOSC故障。
STM8S共有9個(gè)復(fù)位源:
NRST引腳產(chǎn)生的外部復(fù)位
上電復(fù)位(POR)
掉電復(fù)位(BOR)
獨(dú)立看門(mén)狗復(fù)位
窗口看門(mén)狗復(fù)位
軟件復(fù)位
SWIM復(fù)位
非法操作碼復(fù)位
EMS復(fù)位:當(dāng)一些關(guān)鍵的寄存器被破壞或錯(cuò)誤加載時(shí)產(chǎn)生的復(fù)位
所有的復(fù)位源最終都作用于NRST管腳,并在復(fù)位過(guò)程中保持低電平。復(fù)位入口向量在內(nèi)存映射中位于固定的地址6000h。
復(fù)位的兩種啟動(dòng)方式?
答:1、上電復(fù)位:要求接通電源后,自動(dòng)實(shí)現(xiàn)復(fù)位操作。
2、按鈕復(fù)位:要求接通電源后,單片機(jī)自動(dòng)復(fù)位,并且在單片機(jī)運(yùn)行期間,使用開(kāi)關(guān)也可以實(shí)現(xiàn)復(fù)位。
復(fù)位存在哪些問(wèn)題?
答:采用上電復(fù)位:復(fù)位信號(hào)上電過(guò)程中有掉電現(xiàn)象,可能會(huì)造成邏輯方面的錯(cuò)誤導(dǎo)致相關(guān)芯片復(fù)位時(shí)間不夠、二次復(fù)位等、從而不能夠正常工作起來(lái)。原因:產(chǎn)生的復(fù)位信號(hào)給了幾個(gè)芯片用,導(dǎo)致這個(gè)復(fù)位信號(hào)的負(fù)載壓力比較大,驅(qū)動(dòng)能力不夠從而往下調(diào)電,此現(xiàn)象常常出現(xiàn)在RC復(fù)位上。
復(fù)位信號(hào)上電前有毛刺與復(fù)位信號(hào)上電時(shí)有毛刺,可能會(huì)造成邏輯方面的錯(cuò)誤導(dǎo)致相關(guān)芯片復(fù)位時(shí)間不夠。方案:加大上拉電阻的阻值。
復(fù)位電路有哪些?那種比較好?
答:?jiǎn)纹瑱C(jī)復(fù)位電路主要有四種類(lèi)型:
(1)微分型復(fù)位電路:
(2)積分型復(fù)位電路:
(3)比較器型復(fù)位電路:
比較器型復(fù)位電路的基本原理。上電復(fù)位時(shí),由于組成了一個(gè)RC低通網(wǎng)絡(luò),所以比較器的正相輸入端的電壓比負(fù)相端輸入電壓延遲一定時(shí)間.而比較器的負(fù)相端網(wǎng)絡(luò)的時(shí)間常數(shù)遠(yuǎn)遠(yuǎn)小于正相端RC網(wǎng)絡(luò)的時(shí)間常數(shù),因此在正端電壓還沒(méi)有超過(guò)負(fù)端電壓時(shí),比較器輸出低電平,經(jīng)反相器后產(chǎn)生高電平.復(fù)位脈沖的寬度主要取決于正常電壓上升的速度.由于負(fù)端電壓放電回路時(shí)間常數(shù)較大,因此對(duì)電源電壓的波動(dòng)不敏感.但是容易產(chǎn)生以下二種不利現(xiàn)象:
1)電源二次開(kāi)關(guān)間隔太短時(shí),復(fù)位不可靠:
2)當(dāng)電源電壓中有浪涌現(xiàn)象時(shí),可能在浪涌消失后不能產(chǎn)生復(fù)位脈沖。
為此,將改進(jìn)比較器重定電路,可以利用數(shù)字邏輯的方法和比較器配合,設(shè)計(jì)的比較器重定電路。此電路稍加改進(jìn)即可作為上電復(fù)位和看門(mén)狗復(fù)位電路共同復(fù)位的電路,大大提高了復(fù)位的可靠性。
(4)看門(mén)狗型復(fù)位電路.
看門(mén)狗型復(fù)位電路主要利用CPU正常工作時(shí),定時(shí)復(fù)位計(jì)數(shù)器,使得計(jì)數(shù)器的值不超過(guò)某一設(shè)定的值;當(dāng)CPU不能正常工作時(shí),由于計(jì)數(shù)器不能被復(fù)位,因此其計(jì)數(shù)會(huì)超過(guò)某一值,從而產(chǎn)生復(fù)位脈沖,使得CPU恢復(fù)正常工作狀態(tài)。此復(fù)位電路的可靠性主要取決于軟件設(shè)計(jì),即將定時(shí)向復(fù)位電路發(fā)出脈沖的程序放在何處是最優(yōu)的設(shè)計(jì)。一般設(shè)計(jì),將此段程序放在定時(shí)器中斷服務(wù)子程序中。然而,有時(shí)這種設(shè)計(jì)仍然會(huì)引起程序走飛或工作不正常。原因主要是:當(dāng)程序"走飛"發(fā)生時(shí),定時(shí)器初始化以及開(kāi)中斷之后的話(huà),這種"走飛"情況就有可能不能由Watchdog復(fù)位電路校正回來(lái).因?yàn)槎〞r(shí)器中斷一真在產(chǎn)生,即使程序不正常,Watchdog也能被正常復(fù)位.為此提出定時(shí)器加預(yù)設(shè)的設(shè)計(jì)方法.即在初始化時(shí)壓入堆棧一個(gè)地址,在此地址內(nèi)執(zhí)行的是一條關(guān)中斷和一條死循環(huán)語(yǔ)句.在所有不被程序代碼占用的地址盡可能地用子程序返回指令RET代替.這樣,當(dāng)程序走飛后,其進(jìn)入陷阱的可能性將大大增加.而一旦進(jìn)入陷阱,定時(shí)器停止工作并且關(guān)閉中斷,從而使Watchdog復(fù)位電路會(huì)產(chǎn)生一個(gè)復(fù)位脈沖將CPU復(fù)位.當(dāng)然這種技術(shù)用于實(shí)時(shí)性較強(qiáng)的控制或處理軟件中有一定的困難。
由此可見(jiàn),四種復(fù)位電路中,看門(mén)狗型復(fù)位電路較其他三中復(fù)位電路更加適合。
堆棧相關(guān)問(wèn)題:
堆棧的原理?過(guò)程怎么操作?
答:?jiǎn)纹瑱C(jī)RAM中,常常會(huì)指定一個(gè)專(zhuān)門(mén)的區(qū)域來(lái)存放某些特別的數(shù)據(jù),它遵循先進(jìn)后出、后進(jìn)先出的原則。這個(gè)RAM區(qū)就是堆棧。堆棧是一種數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)項(xiàng)按序排列:堆,順序隨意。棧,后進(jìn)先出)。使用一個(gè)稱(chēng)作堆棧指針的專(zhuān)用寄存器指示前的操作位置,堆棧指針總是指向棧頂。
操作過(guò)程:
1) 堆棧的建立(初始化)
2) 參數(shù)入棧(push)
3) 參數(shù)出棧(pop)(后進(jìn)先出)
堆棧應(yīng)用在什么地方?存在什么問(wèn)題?怎么解決?
答:在80C51單片機(jī)中,堆棧在子程序調(diào)用和中斷時(shí)會(huì)把斷點(diǎn)地址自動(dòng)進(jìn)棧和出棧。進(jìn)棧和出棧的指令(PUSH、POP)操作可用于保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。由于子程序調(diào)用和中斷都允許嵌套,并可以多級(jí)嵌套,而現(xiàn)場(chǎng)的保護(hù)也往往使用堆棧,所以一定要注意給堆棧以一定的深度,以免造成堆棧內(nèi)容的破壞而引起程序執(zhí)行的“跑飛”。
堆棧指針SP在80C51中存放當(dāng)前的堆棧棧頂所指存儲(chǔ)單元地址的一個(gè)8位寄存器。80C51單片機(jī)的堆棧是向上生成的,即進(jìn)棧時(shí)SP的內(nèi)容是增加的;出棧時(shí)SP的內(nèi)容是減少的。
系統(tǒng)復(fù)位后。80C51的SP內(nèi)容為07H。若不重新定義,則以07H為棧底,壓棧的內(nèi)容從08H單元開(kāi)始存放。但工作寄存器R0~R7有4組,占有內(nèi)部RAM地址為00H~1FH,位尋址區(qū)占有內(nèi)部RAM地址為20H~2FH。若程序中使用了工作寄存器1~3組或位尋址區(qū),則必須通過(guò)軟件對(duì)SP的內(nèi)容重新定義,使堆棧區(qū)設(shè)定在片內(nèi)數(shù)據(jù)RAM區(qū)中的某一區(qū)域內(nèi)(如30H),堆棧深度不能超過(guò)片內(nèi)RAM空間。
學(xué)習(xí)堆棧的作用?
答:在片內(nèi)RAM中,常常要指定一個(gè)專(zhuān)門(mén)的區(qū)域來(lái)存放某些特別的數(shù)據(jù),它遵循順序存取和后進(jìn)先出(LIFO/FILO)的原則,這個(gè)RAM區(qū)叫堆棧。
1.子程序調(diào)用和中斷服務(wù)時(shí)CPU自動(dòng)將當(dāng)前PC值壓棧保存,返回時(shí)自動(dòng)將PC值彈棧。
2.保護(hù)現(xiàn)場(chǎng)/恢復(fù)現(xiàn)場(chǎng)
3.數(shù)據(jù)傳輸
也就是說(shuō),堆棧是進(jìn)入中斷的時(shí)候用到的,單片機(jī)一旦遇到中斷請(qǐng)求,就會(huì)去處理中斷,處理完后再回來(lái)處理主程序,這樣就涉及到了一個(gè)問(wèn)題,單片機(jī)要保存中斷之前的信息,以便處理完后能夠回到主程序中,單片機(jī)會(huì)在響應(yīng)中斷前,把單片機(jī)現(xiàn)在的指針地址(也就是處理完要返回的地址),以及一些必要的數(shù)據(jù)壓入堆棧(沒(méi)有這些數(shù)據(jù),單片機(jī)處理完中斷后就無(wú)法確定主程序的狀態(tài))。
中斷相關(guān)問(wèn)題:
中斷的響應(yīng)過(guò)程?優(yōu)先級(jí)?
答:1、響應(yīng)過(guò)程:
1)根據(jù)響應(yīng)的中斷源的中斷優(yōu)先級(jí),使相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器置1;
2) 執(zhí)行硬件中斷服務(wù)子程序調(diào)用,并把當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧,保護(hù)斷點(diǎn),尋找中斷源。
3) 清除相應(yīng)的中斷請(qǐng)求標(biāo)志位(串行口中斷請(qǐng)求標(biāo)志RI和TI除外);
4) 把被響應(yīng)的中斷源所對(duì)應(yīng)的中斷服務(wù)程序的入口地址(中斷矢量)送入PC,從而轉(zhuǎn)入相應(yīng)的中斷服務(wù)程序。
5) 中斷返回,程序返回?cái)帱c(diǎn)處進(jìn)行執(zhí)行。
2、優(yōu)先級(jí):中斷的優(yōu)先級(jí)有兩個(gè):查詢(xún)優(yōu)先級(jí)與執(zhí)行優(yōu)先級(jí)
查詢(xún)優(yōu)先級(jí):查詢(xún)優(yōu)先級(jí)是不可以更改和設(shè)置的
1)系統(tǒng)默認(rèn)的優(yōu)先級(jí)(邏輯上):
外部中斷0 > 定時(shí)器中斷0 > 外部中斷1 > 定時(shí)器中斷1 > 串行中斷
2)由IP寄存器來(lái)決定優(yōu)先級(jí)。當(dāng)IP對(duì)應(yīng)位置為1時(shí),該中斷級(jí)別提高。同為1是按默認(rèn)級(jí)別
中斷嵌套的好處與壞處?
答:中斷嵌套:CPU在處理級(jí)別較低的中斷過(guò)程中,出現(xiàn)了級(jí)別較高的中斷請(qǐng)求。CPU停止執(zhí)行低級(jí)別中斷,執(zhí)行高級(jí)別的中斷處理程序后,再接著執(zhí)行低級(jí)別的未被處理完的中斷程序。
使用中斷嵌套可以使高優(yōu)先級(jí)別的中斷得到及時(shí)的響應(yīng)和處理。
1) CPU與外部設(shè)備并行工作
2) 能夠處理例外事件
3) 實(shí)現(xiàn)實(shí)時(shí)處理
4) 實(shí)現(xiàn)人機(jī)聯(lián)系
5) 實(shí)現(xiàn)用戶(hù)程序與操作系統(tǒng)的聯(lián)系
6) 實(shí)現(xiàn)多道程序并行執(zhí)行
7) 在多處理機(jī)系統(tǒng)中,實(shí)現(xiàn)處理機(jī)之間的聯(lián)系
壞處:高級(jí)別的中斷一直持續(xù)的話(huà)會(huì)影響低級(jí)別中斷的處理。
中斷向量表的理解
答:中斷源的識(shí)別標(biāo)志,可用來(lái)形成相應(yīng)的中斷服務(wù)程序的入口地址或存放中斷服務(wù)程序的首地址稱(chēng)為中斷向量。把所有的中斷向量集中起來(lái),按中斷類(lèi)型號(hào)從小到大的順序存放到存儲(chǔ)器的某一區(qū)域內(nèi),這個(gè)存放中斷向量的存儲(chǔ)區(qū)叫做中斷向量表,即中斷服務(wù)程序入口地址表。
中斷在單片機(jī)中起到什么作用?
答:中斷能實(shí)現(xiàn)快速的CPU與慢速的外設(shè)同步工作,實(shí)現(xiàn)數(shù)據(jù)傳送、故障檢測(cè)與處理、人機(jī)聯(lián)系、多機(jī)系統(tǒng)、多道程序分時(shí)操作、實(shí)時(shí)信息處理等。
其它:
什么是臨界段,哪些情況下會(huì)存在臨界段的問(wèn)題,如何進(jìn)行臨界段保護(hù)。
答:1.臨界段代碼,也叫臨界區(qū),是指那些必須完整連續(xù)運(yùn)行,不可被打斷的代碼段。
2. ①讀取或者修改變量(特別是用于任務(wù)間通信的全局變量)的代碼,一般來(lái)說(shuō)這是最常見(jiàn)的臨界代碼。
②調(diào)用公共函數(shù)的代碼,特別是不可重入的函數(shù),如果多個(gè)任務(wù)都訪問(wèn)這個(gè)函數(shù),結(jié)果是可想而知的?傊,對(duì)于臨界段要做到執(zhí)行時(shí)間越短越好,否則會(huì)影響系統(tǒng)的實(shí)時(shí)性。
3.中斷處理程序和任務(wù)都會(huì)訪問(wèn)的臨界段代碼,需要使用關(guān)中斷的方法加以保護(hù);僅由任務(wù)訪問(wèn)的臨界段代碼,可以通過(guò)給調(diào)度器上鎖的方法來(lái)保護(hù)。
什么是可重入型函數(shù),使用時(shí)需要注意哪些問(wèn)題
答:可重入函數(shù)
不為連續(xù)的調(diào)用持有靜態(tài)數(shù)據(jù)。
不返回指向靜態(tài)數(shù)據(jù)的指針;所有數(shù)據(jù)都由函數(shù)的調(diào)用者提供。
使用本地?cái)?shù)據(jù),或者通過(guò)制作全局?jǐn)?shù)據(jù)的本地拷貝來(lái)保護(hù)全局?jǐn)?shù)據(jù)。
如果必須訪問(wèn)全局變量,記住利用互斥信號(hào)量來(lái)保護(hù)全局變量。
絕不調(diào)用任何不可重入函數(shù)。
注意事項(xiàng):
1 :編寫(xiě)可重入函數(shù)時(shí),應(yīng)注意局部變量的使用(如編寫(xiě)C/C++ 語(yǔ)言的可重入函數(shù)時(shí),應(yīng)使用auto 即缺省態(tài)局部變量或寄存器變量)
說(shuō)明:編寫(xiě)C/C++語(yǔ)言的可重入函數(shù)時(shí),不應(yīng)使用static局部變量,否則必須經(jīng)過(guò)特殊處理,才能使函數(shù)具有可重入性。
2 :編寫(xiě)可重入函數(shù)時(shí),若使用全局變量,則應(yīng)通過(guò)關(guān)中斷、信號(hào)量(即P 、V 操作)等手段對(duì)其加以保護(hù)
說(shuō)明:若對(duì)所使用的全局變量不加以保護(hù),則此函數(shù)就不具有可重入性,即當(dāng)多個(gè)進(jìn)程調(diào)用此函數(shù)時(shí),很有可能使有關(guān)全局變量變?yōu)椴豢芍獱顟B(tài)。
專(zhuān)用詞匯解釋?zhuān)?/p>
VCC:C=circuit 表示電路的意思, 即接入電路的電壓;
VDD:D=device 表示器件的意思, 即器件 內(nèi)部的工作電壓;
對(duì)于數(shù)字電路來(lái)說(shuō),VCC是電路的供電電壓,VDD是芯片的工作電壓(通常Vcc>Vdd),VSS是接地點(diǎn);有些IC既有VDD引腳又有VCC引腳,說(shuō)明這種器件自身帶有電壓轉(zhuǎn)換功能。
VEE:發(fā)射極電源電壓, Emitter Voltage, 一般用于 ECL 電路的負(fù)電源電壓.
VSS:S=series 表示公共連接的意思,通常是指電路公共接地端電壓。
VPP:不同芯片對(duì)Vpp的定義稍有不同,比如電壓峰峰值,單片機(jī)中Vpp多數(shù)定義為編程電壓
在場(chǎng)效應(yīng)管(或COMS器件)中,VDD為漏極,VSS為源極,VDD和VSS指的是元件引腳,而不表示供電電壓。一般來(lái)說(shuō)VCC=模擬電源,VDD=數(shù)字電源,VSS=數(shù)字地,VEE=負(fù)電源
編輯:admin 最后修改時(shí)間:2018-05-18