PIC單片機(jī)應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)與技巧_第1頁(yè)
PIC單片機(jī)應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)與技巧_第2頁(yè)
PIC單片機(jī)應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)與技巧_第3頁(yè)
PIC單片機(jī)應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)與技巧_第4頁(yè)
PIC單片機(jī)應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)與技巧_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、【W(wǎng)ord版本下載可任意編輯】 PIC單片機(jī)應(yīng)用設(shè)計(jì)經(jīng)驗(yàn)與技巧 美國(guó)微芯公司(Microchp Technology Inc.)開發(fā)的CM0S工藝PIC系列8位單片機(jī)(RISC微控制器),特別是采用內(nèi)置第二代Flash存儲(chǔ)器(40年存儲(chǔ)壽命)的微控制器在快速應(yīng)用方面具有獨(dú)到之處。由于其易用性和高可靠性,該系列微控制器穩(wěn)居8位單片機(jī)出貨量之首。PIC系列單片機(jī)具有指令集簡(jiǎn)潔、簡(jiǎn)單易學(xué)、速度高、功能強(qiáng)、功耗低、價(jià)格低廉、體積小巧、適用性好及抗干擾能力強(qiáng)等特點(diǎn),大量應(yīng)用于汽車電氣控制、電機(jī)控制、工業(yè)控制儀表和儀表、通信、家電、玩具、低功耗的測(cè)控應(yīng)用等領(lǐng)域,在國(guó)內(nèi)越來越受到廣闊設(shè)計(jì)者的歡迎,微芯公司的

2、單片機(jī)已經(jīng)成為目前單片機(jī)世界的主流產(chǎn)品。 PIC 8位單片機(jī)內(nèi)已經(jīng)包含運(yùn)算器、存儲(chǔ)器、AD、PWM、輸入和輸出IO(灌電流可達(dá)25mA)、通信等常用接口,自由靈活的定義功能可以適應(yīng)不同的控制要求。而不必增加額外的IC芯片。這樣電路構(gòu)造很簡(jiǎn)單,開發(fā)周期將大為縮短。 PICl6系列單片機(jī)屬于PIC8位單片機(jī)的中級(jí)型產(chǎn)品,采用14位的RISC指令系統(tǒng)。筆者使用PICl6F716單片機(jī)設(shè)計(jì)了一個(gè)電動(dòng)機(jī)保護(hù)器,在設(shè)計(jì)過程中遇到很多問題,通過多方查找資料以及向Microchip公司技術(shù)人員尋求支持,問題一一得到解決?,F(xiàn)將部分問題記錄如下,與大家一起探討。 1 ICD2作為程序燒寫的使用 1.1 ICD2簡(jiǎn)

3、介 MPLAB ICD2在線調(diào)試器是一款低價(jià)位的PIC開發(fā)工具。它利用Flash工藝芯片的程序區(qū)自讀寫功能來實(shí)現(xiàn)仿真器調(diào)試功能;使用的軟件平臺(tái)是Microchip的MPLAB IDE(集成開發(fā)環(huán)境軟件包),兼容Windows NT、Windows 2000和Windlows XP等操作系統(tǒng)。其通信接口方式可以是USB(可達(dá)2Mbs)或RS-232串行接口方式;工作電壓范圍為2.O5.5V,可支持2.0V的低壓調(diào)試。 MPLABICD2可以支持大部分Flash工藝的芯片。它不僅可以用作調(diào)試器,同時(shí)還可以作為開發(fā)型的燒寫器使用。 1.2 ICD2作為燒寫器時(shí)的配置 燒寫芯片的方式有兩種:普通燒寫和

4、在線燒寫。在線燒寫是適合大批量生產(chǎn)方式的燒寫方法。使用在線燒寫時(shí)通常用戶都已經(jīng)把芯片焊到了板上,此時(shí)就要求用戶板上有預(yù)留的燒寫接口。用戶板上的接口是通過一條6芯的扁平電纜與ICD2主機(jī)上同樣的接口一一對(duì)應(yīng)連接的。圖1顯示了MPLAB ICD2與目標(biāo)板上模塊連接插座的互連狀況。 ICD連接插座有6個(gè)引腳,但只使用了其中的5個(gè)引腳,分別是VDD(電源)、VSS(地)、VPP(編程電壓)、PGC(同步時(shí)鐘)和PGD(數(shù)據(jù))。 1.3 ICD2作為燒寫器時(shí)容易出現(xiàn)的問題及解決方法 盡管MPLAG ICD2與目標(biāo)板的互連非常簡(jiǎn)單,但是一不小心就會(huì)出現(xiàn)問題,基本上每一個(gè)PIC的入門者都會(huì)碰到類似的問題。下

5、面就一些常見問題作簡(jiǎn)要表達(dá)。 如圖l所示,在VPP與VDD之間通常要串接一個(gè)上拉電阻(通常約為lOk),這樣VPP線可置為低電平來手動(dòng)復(fù)位PICmicro單片機(jī)。但是對(duì)一般設(shè)計(jì)者來說,都是采用上電自動(dòng)復(fù)位。如果在這里采用集成器件DMP809,那么就會(huì)導(dǎo)致連接不上,程序沒有方法燒入。 對(duì)于PGC、PGD兩根線,由于在ICD2內(nèi)部已經(jīng)開展了上拉,所以在外圍設(shè)計(jì)中,不要冉開展上拉,否則會(huì)造成分壓。對(duì)于PGC、PGD和VPP三根線,不要對(duì)地接電容.因?yàn)殡娙輹?huì)阻礙在數(shù)據(jù)和時(shí)鐘線上電平的快速轉(zhuǎn)換,從而影響ICD2與目標(biāo)板的連接。同樣對(duì)于PGC、PGD,由于數(shù)據(jù)或時(shí)鐘都是雙向傳輸?shù)?,這時(shí)如果在中間串一個(gè)二極

6、管,則會(huì)影響ICD2與單片機(jī)的雙向通信。 但是,對(duì)PGC和PGD來說,在單片機(jī)上同時(shí)復(fù)用為普通IO口,而有些使用上必須要接對(duì)地電容或者是串接二極管。對(duì)于這種情況,的處理方式就是在燒寫時(shí)從芯片的PGC和PGD端口直接跳線到程序燒寫口。 2 AD轉(zhuǎn)換通道切換問題 筆者所設(shè)計(jì)的電動(dòng)機(jī)保護(hù)器需要開展很多AD轉(zhuǎn)換,比方三相電流轉(zhuǎn)換、零序電流轉(zhuǎn)換以及各種*等。但是筆者所采用的PIC16F716單片機(jī)只有5路AD轉(zhuǎn)換通道,因此附加了一個(gè)多位選擇開關(guān)對(duì)一個(gè)AD通道開展復(fù)用。而在調(diào)試中發(fā)現(xiàn)這樣一個(gè)問題,就是AD轉(zhuǎn)換值不準(zhǔn)確,甚至有點(diǎn)亂,但從程序流程以及代碼角度均查不出任何問題。后查明PICl6F716單片機(jī)開展

7、AD轉(zhuǎn)換通道切換時(shí),需要一定的延時(shí),延時(shí)時(shí)間是毫秒級(jí)。解決方法是:在通道問切換時(shí),當(dāng)個(gè)通道轉(zhuǎn)換完成后,先轉(zhuǎn)到另一個(gè)通道;然后延時(shí)1ms左右,再開展AD轉(zhuǎn)換。而對(duì)同一個(gè)通道信號(hào)切換時(shí),要在個(gè)信號(hào)轉(zhuǎn)換完成后,禁止信號(hào)輸入,延時(shí)1ms左右;然后輸人信號(hào),再開展AD轉(zhuǎn)換。 這種做法比較麻煩,也很占用時(shí)間,并且從調(diào)試結(jié)果來看,問題并沒有解決。在反復(fù)開展調(diào)試中,得到的優(yōu)化解決方法是:對(duì)于通道間轉(zhuǎn)換以及同一通道信號(hào)轉(zhuǎn)換,要對(duì)每一個(gè)信號(hào)至少開展兩次AD轉(zhuǎn)換;次的轉(zhuǎn)換結(jié)果,舍棄不予處理,只取第二次AD轉(zhuǎn)換的結(jié)果。從調(diào)試結(jié)果來看,很好地解決了這一問題。 3 軟件開發(fā)小技巧 PIC單片機(jī)采用精簡(jiǎn)指令集,例如對(duì)于PI

8、Cl6F716單片機(jī),只有35條單字節(jié)指令。要用這么少的指令實(shí)現(xiàn)復(fù)雜的控制或計(jì)算,顯然要在軟件設(shè)計(jì)上多下功夫,并且PIC的指令系統(tǒng)與51系列單片機(jī)有很大不同,這讓PIC初學(xué)者很不適應(yīng)。下面筆者就自己的體會(huì),談一些軟件設(shè)計(jì)需要注意的問題。 3.1 指令的大小寫問題 編寫PIC單片機(jī)的源程序,除了源程序的開始處需要嚴(yán)格的列表指令外,還須注意源程序中字母符號(hào)的大小寫規(guī)則,否則在PC機(jī)上匯編程序時(shí)不會(huì)成功。在源程序中都會(huì)使用偽指令I(lǐng)NCLUDE。這條指令將列表中指定的單片機(jī)文件(在MPLAB中)讀入源程序作為源程序的一部分,所以但凡MPLAB中有關(guān)該單片機(jī)已有的存放器在源程序中無需再用賦值指令(EQU

9、)賦值,這就使所建立的源程序大為簡(jiǎn)化。 此外,由于有了偽指令I(lǐng)NCLUDE,所以根據(jù)MPLAB軟件中的格式,在源程序中的操作數(shù)但凡涉及MPLAB已規(guī)定的存放器名稱的,其字母一律只能大寫,不能小寫。其余操作碼、符號(hào)字母可任意大小寫,但0 x中的x應(yīng)小寫。否則匯編不會(huì)成功。鑒于上述原因,為了書寫方便,在使用MPLAB軟件時(shí),PIC單片機(jī)的源程序均用大寫字母為宜(0 x例外)。 3.2 振蕩器的配置以及時(shí)序的計(jì)算 PIC系列單片機(jī)可以工作于以下4種不同的振蕩器方式:LP(低功耗晶體振蕩器)、XT(晶體諧振器)、HS(高速晶體諧振器)和RC(阻容振蕩器)。用戶可以根據(jù)其系統(tǒng)設(shè)計(jì)的需要,通過對(duì)配置位(F

10、OSC1和F0SC2)編程,選擇其中一種工作模式。 而一旦振蕩器配置完成,那么根據(jù)用戶的配置,可以輕松地計(jì)算出程序運(yùn)行的時(shí)間以及AD轉(zhuǎn)換所占用的時(shí)間,這樣就會(huì)很輕松地安排好單片機(jī)的時(shí)序。例如,如果采用4 MHz的HS振蕩模式,那么單片機(jī)的時(shí)鐘頻率為FOSC/4,也就是說執(zhí)行一條指令需要1s;對(duì)于需要兩個(gè)指令周期的指令,需要2s。而對(duì)于AD轉(zhuǎn)換,如果AD轉(zhuǎn)換時(shí)鐘位選擇為FOSC8,那么AD轉(zhuǎn)換模塊轉(zhuǎn)換一個(gè)位的時(shí)間Tad就為2s。對(duì)一個(gè)8位的轉(zhuǎn)換來說,需要的時(shí)間為9.5Tad,也就是完成AD轉(zhuǎn)換的時(shí)間為19s。這樣只需要查看源程序的行數(shù)并作簡(jiǎn)要分析,就可以計(jì)算出程序運(yùn)行的時(shí)間。 3.3 存儲(chǔ)體的選

11、擇 PIC單片機(jī)的數(shù)據(jù)存儲(chǔ)器通常分為兩個(gè)存儲(chǔ)體,即存儲(chǔ)體O(Bank0)和存儲(chǔ)體1(Bankl)。每個(gè)存儲(chǔ)體都是由專用存放器和通用存放器兩部分組成的。兩個(gè)存儲(chǔ)體中的一氈存放器單元實(shí)際上是同一個(gè)存放器單元,卻又具有不同的地址。 不同型號(hào)的PIC單片機(jī),其數(shù)據(jù)存儲(chǔ)器的組成(即功能)是不完全相同的,所以設(shè)計(jì)人員一旦選用了某個(gè)PIC單片機(jī)的型號(hào)后,就要查找該單片機(jī)的數(shù)據(jù)存儲(chǔ)器資料,以便編程使用。 筆者所采用的PICl6F716單片機(jī)的存儲(chǔ)區(qū),是通過STATUS存放器的RPl位和RP0位來選擇的。當(dāng)配置為00時(shí),表示選擇存儲(chǔ)區(qū)0;當(dāng)配置為01時(shí),表示選擇存儲(chǔ)區(qū)1。因?yàn)榇鎯?chǔ)區(qū)的改變只須改變RP0位,所以通

12、常在程序編寫時(shí),只改變RP0位來選擇存儲(chǔ)區(qū)。但是這樣容易造成程序的混亂,因此,筆者建議在每次更換存儲(chǔ)區(qū)時(shí),要分別對(duì)RPO和RPl開展置位。在程序初始化時(shí),將存放器的初始化分為兩部分:部分為存儲(chǔ)區(qū)O;第二部分為存儲(chǔ)區(qū)1。然后將每個(gè)需要初始化的存放器分別在對(duì)應(yīng)的存儲(chǔ)區(qū)開展初始化即可。 3.4 GOTO和CALL指令的不同使用 在PIC的匯編程序中,CALL與GOT0指令使用的場(chǎng)臺(tái)不同。CALL是用來調(diào)用子程序的,在調(diào)用完子程序后返回到調(diào)用前的程序;而GOTO是無條件轉(zhuǎn)移,即由此狀態(tài)進(jìn)入另外一個(gè)狀態(tài)而不需要返回。 為了使程序更加具有可讀性,使流程更加清晰、合理,通常程序都采用模塊化程序設(shè)計(jì),即將程序

13、按照功能分成不同的子程序,而主程序則相當(dāng)簡(jiǎn)潔,只須采用CALL指令對(duì)子程序開展調(diào)用。 由于PIC單片機(jī)的堆棧有限,在程序中不能無止境地使用GOTO指令,否則會(huì)使堆棧溢出,程序無法正常運(yùn)行。但是在有些時(shí)候,例如當(dāng)程序出現(xiàn)分支時(shí),則不得不使用GOTO指令。對(duì)于PICl6F7x系列單片機(jī),程序出現(xiàn)分支時(shí)只能通過STATUS存放器的Z位或C位開展判斷。這時(shí)在兩種情況的前一種情況下,必須使用GOTO指令開展轉(zhuǎn)移;否則在執(zhí)行完種情況后,緊接著又執(zhí)行第二種情況。程序如下: BTFSS STATUS,Z GOTO A GOTO B 在跳轉(zhuǎn)到A時(shí),必須使用GOTO指令;否則執(zhí)行完這條語(yǔ)句以后,緊接著執(zhí)行GOTO

14、 B。這樣無論Z為何值,程序都將跳轉(zhuǎn)到B。而對(duì)于GOT0 B,則可以不必使用GOTO指令。 在上面這種情況下,由于GOTO只在子程序內(nèi)部開展跳轉(zhuǎn),小程序內(nèi)部循環(huán)占用堆棧的級(jí)數(shù)不多,因此使用GOTO指令是可行的。但是在大的程序中使用GOTO指令,將有可能無法返回到調(diào)用前的下一條指令。 因此,筆者建議,在使用匯編語(yǔ)言開展程序設(shè)計(jì)時(shí),應(yīng)該將程序分解成級(jí)的子程序;然后在程序之間開展調(diào)用,盡量將GOTO指令跳轉(zhuǎn)的范圍縮小。 3.5 對(duì)芯片的重復(fù)燒寫 對(duì)沒有硬件仿真器的設(shè)計(jì)者來說,總是選用帶有EPROM的芯片來調(diào)試程序,通過反復(fù)的修改來觀看運(yùn)行結(jié)果,以便對(duì)程序開展調(diào)試。每更改程序.都是將原來的內(nèi)容先擦除,再編程,浪費(fèi)了相當(dāng)多的時(shí)間,又縮短了芯片的使用壽命。如果后編程較前,僅是對(duì)應(yīng)的機(jī)器碼字節(jié)的相同位由1變?yōu)?,那么就可在前編程芯片上再次寫入數(shù)據(jù),而不必擦除原片內(nèi)容。 在程序調(diào)試 過程中,經(jīng)常遇到常數(shù)的調(diào)整。如果常數(shù)的改變能保證對(duì)應(yīng)位由1變0,則都可在原片內(nèi)容的根底上繼續(xù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論