日韩欧美国产极速不卡一区,国产手机视频在线观看尤物,国产亚洲欧美日韩蜜芽一区,亚洲精品国产免费,亚洲二区三区无码中文,A大片亚洲AV无码一区二区三区,日韩国语国产无码123

您好,歡迎來到維庫電子市場網(wǎng) 登錄 | 免費(fèi)注冊

pic單片�(jī)
閱讀�14469時間�2010-11-03 09:08:02

  PIC單片�(jī)是一個小的計算機(jī)PIC單片�(jī)有計算功能和記憶�(nèi)�CPU并由軟件控制允行。然�,處理能�-存儲�容量卻很有限,這取決于PIC的類�。但是它們的操作頻率大約都在20MHz左右,存儲器容量用做寫程序的大約1K-4K字節(jié)。時鐘頻率與掃描程序的時間和�(zhí)行程序指令的時間有關(guān)�。但不能僅以時鐘頻率來判斷程序處理能�,它還隨處理裝置的體系結(jié)�(gòu)改變(1*)。如果是同樣的體系結(jié)�(gòu),時鐘頻率較高的處理能力會較�(qiáng)�

簡介

  PIC單片�(jī)系列是美國微芯公�(MiCroShip)的產(chǎn)�,是�(dāng)前市場份額增長最快的單片�(jī)之一。CPU采用RISC�(jié)�(gòu),分別有33�35�58條指�(視單片機(jī)的級別而定),屬精簡指令�。�51系列�111條指�,AVR單片�(jī)�118條指�,都比前者復(fù)�。采用Haryard雙總線結(jié)�(gòu),運(yùn)行速度�(指令周期�160�200nS),它能使程序存儲器的訪問和數(shù)�(jù)存儲器的訪問并行處理,這種指令流水線結(jié)�(gòu),在一個周期內(nèi)完成兩部分工�,一是執(zhí)行指�,二是從程序存儲器取出下一條指�,這樣總的看來每條指令只需一個周�(個別除外),這也是高效率�(yùn)行的原因之一。此�,它還具有低工作電壓、低功耗、驅(qū)動能力強(qiáng)等特�(diǎn)。PIC系列單片�(jī)共分三個級�,即基本級、中��。其中又以中級的PICl6F873(A)、PICl6F877(A)用的最�,本文以這兩種單片機(jī)為例�(jìn)行說明。這兩種芯片除了引出腳不同�(:PICl6F873(A)�28腳的PDIP或SOIC封裝PICl6F877(A)�40腳的PDIP�44腳的PICC/QFP封裝),其他的差別并不很大�

  PIC系列單片�(jī)的:I/O口是雙向�,其輸出電路為CMOS互補(bǔ)推挽輸出電路。I/O腳增加了用于�(shè)置輸入或輸出狀�(tài)的方向寄存器(TRISn,其中n對應(yīng)各口,如A、B、C、D、E�),從而解決了51系列I/O腳為高電平時同為輸入和輸出的狀�(tài)。當(dāng)置位1時為輸入狀�(tài),且不管該腳呈高電平或低電平,對外均呈高阻狀�(tài);置�0時為輸出狀�(tài),不管該腳為何種電平,均呈低阻狀�(tài),有相當(dāng)?shù)�?qū)動能�,低電平吸人電流�(dá)25mA,高電平輸出電流可達(dá)20mA。相對于51系列而言,這是一個很大的�(yōu)�(diǎn),它可以直接�(qū)動數(shù)碼管顯示且外電路簡單。它的A/D�10位,能滿足精度要�。具有在線調(diào)試及編程(ISP)功能�

  該系列單片機(jī)的專用寄存器(SFR)并不�51系列那樣都集中在一個固定的地址區(qū)間內(nèi)(80~FFH),而是分散在四個地址區(qū)間內(nèi),即存儲�0(Bank0�00-7FH)、存儲體1(Bankl�80-FFH)、存儲體2(Bank2�100-17FH)、存儲體3(Bank3�180-1FFH)。只�5個專用寄存器PCL、STATUS、FSR、PCLATH、INTCON�4個存儲體�(nèi)同時出現(xiàn)。在編程過程�,少不了要與專用寄存器打交道,得反復(fù)地選擇對�(yīng)的存儲體,也即對狀�(tài)寄存器STATUS的第6�(RPl)和第5�(RPO)置位或清�。如�

  �4�

  CLRF STATUS  ;清零RPl,RPO。選擇存儲體O  BSF STAUS,RPO;置位RPO。選擇存儲體1  BCF STATUS,RPO;清零RPO。選擇存儲體O

  這多少給編程帶來了一些麻�。對于上述的單片�(jī),它的位指令操作通常限制在存儲體0區(qū)�(00�7FH)�

  �(shù)�(jù)的傳送和邏輯�(yùn)算基本上都得通過工作寄存器w(相當(dāng)�5l系列的累加器A)來�(jìn)行,�51系列的還可以通過寄存器相互之間直接傳�(如:MOV30H�20H;將寄存�20H的內(nèi)容直接傳送至寄存�30H�),因而PIC單片�(jī)的瓶頸現(xiàn)象比51系列還要�(yán)重,這在編程中很有感��

�(yōu)�(diǎn)

  �(jù)�(tǒng)�,我國的單片�(jī)年容量已�(dá)1�3億片,且每年以大�16[%]的速度增長,但相對于世界市場我國的占有率還不到1[%]。這說明單片機(jī)�(yīng)用在我國才剛剛起�,有著廣闊的前景。培�(yǎng)單片�(jī)�(yīng)用人才,特別是在工程技�(shù)人員中普及單片機(jī)知識有著重要的現(xiàn)�(shí)意義�

  �(dāng)今單片機(jī)廠商琳瑯滿目,產(chǎn)品性能各異。針對具體情�,我們應(yīng)選何種型號呢?首�,我們來弄清兩個概念:集中指令集(CISC)和精簡指令集(RISC�。采用CISC�(jié)�(gòu)的單片機(jī)�(shù)�(jù)線和指令線分時復(fù)�,即所謂馮.諾伊曼結(jié)�(gòu)。它的指令豐富,功能較強(qiáng),但取指令和取數(shù)�(jù)不能同時�(jìn)�,速度受限,價格亦�。采用RISC�(jié)�(gòu)的單片機(jī)�(shù)�(jù)線和指令線分�,即所謂哈佛結(jié)�(gòu)。這使得取指令和取�(shù)�(jù)可同時�(jìn)�,且由于一般指令線寬于�(shù)�(jù)�,使其指令較同類CISC單片�(jī)指令包含更多的處理信�,執(zhí)行效率更�,速度亦更快。同�,這種單片�(jī)指令多為單字節(jié),程序存儲器的空間利用率大大提高,有利于�(shí)�(xiàn)超小型化。屬于CISC�(jié)�(gòu)的單片機(jī)有Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、臺灣Winbond(華邦)W78系列、荷蘭Pilips的PCF80C51系列�;屬于RISC�(jié)�(gòu)的有Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韓國三星公司的KS57C系列4位單片機(jī)、臺灣義隆的EM-78系列�。一般來說,控制�(guān)系較簡單的小家電,可以采用RISC型單片機(jī);控制關(guān)系較�(fù)雜的場合,如通訊�(chǎn)�、工�(yè)控制系統(tǒng)�(yīng)采用CISC單片�(jī)。不�,RISC單片�(jī)的迅速完�,使其佼佼者在控制�(guān)系復(fù)雜的場合也毫不遜色�

  根據(jù)程序存儲方式的不�,單片機(jī)可分為EPROM、OTP(一次可編程�、QTP(掩膜)三種。我國一開始都采用ROMless型單片機(jī)(片�(nèi)無ROM,需片外配EPROM),對單片機(jī)的普及起了很大作用,但這種�(qiáng)�(diào)接口的單片機(jī)無法廣泛�(yīng)�,甚至走入了誤區(qū)。如單片�(jī)的應(yīng)用一味強(qiáng)�(diào)接口,外接I/O及存儲器,便失去了單片機(jī)的特�。目前單片機(jī)大都將程序存儲體置于其內(nèi),給�(yīng)用帶來了極大的方�。值得一提的�,以往OTP型單片機(jī)的價格是QTP�3�,而現(xiàn)在已降至1.5�1.2�,選用OTP型以免訂貨周�、批量的麻煩是可取的�

  �、PIC系列單片�(jī)有什么優(yōu)勢?

  自從�95年接觸PIC單片�(jī)以來,便一直熱衷于這種單片�(jī)的開�(fā)與應(yīng)�。有不少朋友問我:PIC到底有什么優(yōu)�?也許你也會有這樣的疑�,所以我在這里略談幾點(diǎn)自己的看��

  1)PIC的特�(diǎn)是不搞單純的功能堆積,而是從實(shí)際出�(fā),重視產(chǎn)品的性能與價格比,靠�(fā)展多種型號來滿足不同層次的應(yīng)用要求。就�(shí)際而言,不同的�(yīng)用對單片�(jī)功能和資源的需求也是不同的。比�,一個摩托車的點(diǎn)火器需要一個I/O較少、RAM及程序存儲空間不�、可靠性較高的小型單片�(jī),若采用40腳且功能�(qiáng)大的單片�(jī),投資大不說,使用起來也不方�。PIC系列從低到高有幾十個型�,可以滿足各種需�。其�,PIC12C508單片�(jī)僅有8個引�,是世界上最小的單片�(jī)�

  該型號有512字節(jié)ROM�25字節(jié)RAM、一�8位定時器、一根輸入線�5根I/O�,市面售價在3�6元人人民幣。這樣一款單片機(jī)在象摩托車點(diǎn)火器這樣的應(yīng)用無疑是非常適合。PIC的型號,如PIC16C74(尚不是檔型號)�40個引�,其�(nèi)部資源為ROM�4K�192字節(jié)RAM�8路A/D�3�8位定時器�2�*模塊、三個串行口�1個并行口�11個中斷源�33個I/O�。這樣一個型號可以和其它品牌的型號媲��

  2) 精簡指令使其�(zhí)行效率大為提�。PIC系列8位CMOS單片�(jī)具有�(dú)特的RISC�(jié)�(gòu),數(shù)�(jù)總線和指令總線分離的哈佛總線(Harvard)結(jié)�(gòu),使指令具有單字長的特�,且允許指令碼的位數(shù)可多�8位的�(shù)�(jù)位數(shù),這與傳統(tǒng)的采用CISC�(jié)�(gòu)�8位單片機(jī)相比,可以達(dá)�2:1的代碼壓縮,速度提高4��

  3) �(chǎn)品上市零等待(Zero time to market)。采用PIC的低價OTP型芯�,可使單片機(jī)在其�(yīng)用程序開�(fā)完成后立刻使該產(chǎn)品上市�

  4) PIC有優(yōu)越開�(fā)�(huán)�。OTP單片�(jī)開發(fā)系統(tǒng)的實(shí)時性是一個重要的指標(biāo),象普�51單片�(jī)的開�(fā)系統(tǒng)大都采用型號仿真低檔型號,其�(shí)時性不盡理�。PIC在推出一款新型號的同時推出相�(yīng)的仿真芯�,所有的開發(fā)系統(tǒng)由專用的仿真芯片支持,實(shí)時性非常好。就我個人的經(jīng)�(yàn)�,還沒有出現(xiàn)過仿真結(jié)果與�(shí)際運(yùn)行結(jié)果不同的情況�

  5) 其引腳具有防瞬態(tài)能力,通過限流電阻可以接至220V交流電源,可直接與繼電器控制電路相�,無須光電耦合器隔�,給�(yīng)用帶來極大方��

  6) 徹底的保密性。PIC以保密熔絲來保護(hù)代碼,用戶在燒入代碼后熔斷熔�,別人再也無法讀�,除非恢�(fù)熔絲。目�,PIC采用熔絲深埋工藝,恢�(fù)熔絲的可能性極��

  7) 自帶看門狗定時器,可以用來提高程序運(yùn)行的可靠��

  8) 睡眠和低功耗模式。雖然PIC在這方面已不能與新型的TI-MSP430相比,但在大多數(shù)�(yīng)用場合還是能滿足需要的�

程序�(shè)計解�

  PIC單片�(jī)采用精簡指令集,例如對于PIC16F716單片�(jī),只�35條單字節(jié)指令。要用這么少的指令�(shí)�(xiàn)�(fù)雜的控制或計�,顯然要在程序設(shè)計上多做文章,以下就程序�(shè)計需要注意的問題談一些看法�   美國微芯公司開發(fā)的CMOS工藝PIC系列單片�(jī),特別是采用�(nèi)置第二代Flash存儲器的微控制器在快速應(yīng)用方面具有獨(dú)到之處。PIC單片�(jī)系列�(nèi)大都包含�(yùn)算器、存儲器、A/D、PWM、輸入和輸出I/O、通信等常用接口。自由靈活的定義功能可以適應(yīng)不同的控制要��

  一、區(qū)分指令的大小�

  編寫PIC單片�(jī)的源程序,除了源程序的開始處需要嚴(yán)格的列表指令�,還須注意源程序中字母符號的大小寫規(guī)�,否則在PC�(jī)上匯編程序時不會成功。在源程序中都會使用偽指令I(lǐng)NCLUDE。這條指令將列表中指定的單片機(jī)文件(在MPLAB�)瀆入源程序作為源程序的一部分,所以凡是MPLAB中有�(guān)該單片機(jī)已有的寄存器在源程序中無須再用賦值指�(EQU)賦�,這就使所建立的源程序大為簡化�

  此外,由于有了偽指令I(lǐng)NCLUDE,所以根�(jù)MPLAB軟件中的格式,在源程序中的操作數(shù)凡是涉及MPLAB已規(guī)定的寄存器名稱的,其字母一律只能大寫,不能小寫。其余操作碼、符號字母可任意大小�,但0x中的X�(yīng)小寫。否則匯編不會成�。鑒于上述原�,為了書寫方�,在使用MPLAB軟件�,PIC單片�(jī)的源程序均用大寫字母為宜(0x例外)�

  以下舉例有關(guān)�(jī)器人控制的實(shí)�(xiàn)。控制部分采用PIC16F7X系列單片�(jī),運(yùn)用匯編語言編程,運(yùn)行速度較快,能夠達(dá)到系�(tǒng)的要��

  �、動作標(biāo)志位的使�

  在整個控制中,組合的動作很多,當(dāng)所有動作定位都通過光電開關(guān)控制�,在程序編寫上就有一些問�。如要求左手上升到鼓掌位、右手上升到舉手�(手初始位置在最下的放下�),光電開�(guān)0有效(即為0時是擋住),到�(dá)正確位置。用簡單的理解可以寫成下面的程序�

  list P=16c73

  call lefthandup

  call righthandup

  L0 call readinsignal

  bdss csl[_]v,lefthandligbts

  call lefthandstop

  bfsc csl[_]v,righthandlight4

  goto L0

  call righthandstop

  L1 call readinsignal

  bfsc csl[_]v,lefthandlight3

  goto L1

  call lefthandstop

  lefthandlight表示光電開關(guān),由此判斷是否到相應(yīng)的位��1表示在手臂最下面的位��2表示在手臂的握手位置�3表示在手臂的鼓掌位置�4表示在手臂的高舉手位�。上面程序描寫左手臂上升到舉手位置和右手臂上升到鼓掌位置并停止的過程。先判斷左手到達(dá)�,到�(dá)則左手停止,接著看右手是否到�(dá)舉手�,到�(dá)則停�,否則循�(huán)上述的檢�,直到左手到�(dá)鼓掌�,右手到�(dá)舉手��

  注意,這里�3�4表示的就是鼓掌位、舉手位。經(jīng)過循�(huán)檢測可以讓手臂停在各位上,然而機(jī)械動作是有慣性的,機(jī)械停止位可能在該位的上一�(diǎn)或下一�(diǎn),這就影響下面動作的�(jìn)行,可能在若干動作后�(jī)械動作出�(xiàn)失常,也就是程序沒法正常地運(yùn)行。在此情況下,需要修改程序的編寫方式,采用標(biāo)志位來控制動作的�(jìn)行。如果采用控制標(biāo)志位,一定要在動作子函數(shù)中對�(biāo)志位置零�

  �、區(qū)分GOTO和CALL指令的使用場�

  在PIC的匯編程序中,CALL與GOTO指令的使用比較多、且容易混淆,一般情況下,在于程序與主程序之間大多用CALL指令;而狀�(tài)�(zhuǎn)換模塊之間大多用GOTO指令,即由此狀�(tài)�(jìn)入另一種狀�(tài)不需返回。由于PIC單片�(jī)的堆棧有�,在程序中,不能無止境地使用GOTO語句,否則會使堆棧溢�,程序無法正常運(yùn)�。各個小程序�(nèi)部循�(huán)占用堆棧的級�(shù)不多,使用GOTO指令是可行的,但在大的程序中用GOTO則無法返回到�(diào)用前程序的下一條指令。CALL指令完成�(diào)用完子程序后返回到調(diào)用前的程�。如在超聲檢測中程序如下�

  list D=16c76

  start:call setcpu

  call automaflsmstate1

  L3 call readinsignal

  bfsc es2[_]v,ultrasonicdetect1

  goto L3

  goto automatlsmstate2:

  automatlsmstate2:

  return

  automafismstate1、automatlsmstate2表示兩種狀�(tài),ultrasonicdetect1表示一個輸入超聲檢測信�。上面程序描寫調(diào)用automatlstmstatei狀�(tài),執(zhí)行完后�(jìn)行下面的檢測uhrasonicdetect1,沒有觸�(fā)就一直循�(huán)檢測,觸�(fā)就�(jìn)入automatlsmstate2狀�(tài),執(zhí)行完也不再回到下面的程序�

  由于PIC單片�(jī)的堆棧有�,在程序中不能無止境地使用GOTO指令,否則會使堆棧溢�,程序無法正常運(yùn)行。但是在有些時�,例如當(dāng)程序出現(xiàn)分支時,則不得不使用GOTO指令。對于PIC16F7X系列單片�(jī),程序出�(xiàn)分支時只能通過STATUS寄存器的z位或c位�(jìn)行判�。這時在兩種情況的前一種情況下,必須使用GOTO指令�(jìn)行轉(zhuǎn)�;否則在�(zhí)行完種情況后,緊接著又執(zhí)行第二種情況。因此,在使用匯編語言�(jìn)行程序設(shè)計時,應(yīng)該將程序分解成一級級的子程序;然后在程序之間�(jìn)行調(diào)用,盡量將GOTO指令跳轉(zhuǎn)的范圍縮��

  �、注意狀�(tài)�(biāo)志位Z、C的不同使用情�

  在�(jìn)行判斷標(biāo)志位�,Z(零標(biāo)�)、C(借位�(biāo)�)是不同的。Z�1時,表示上面的結(jié)果為0,Z�0�,則�(jié)果不�0。C�1�,借位,C�0�,沒有借位。在使用定時器的時候,一般使用C�(biāo)志位,這是由于�(dāng)完成某一動作去檢查定時器時,時間可能沒到,或是正�,或是已�(jīng)超過時間,只要到了或超過時間,都要按照要求關(guān)閉定時器,如下面程序所�。如果用Z�(biāo)志位,等�0時可能沒有檢測到,無法判斷停止的狀�(tài),而用Z可以很好地控制時間定時。�(jìn)行一般的計算時大多用Z,如前面的動作標(biāo)志位中就是如此使用的�

  list D=16c76

  call openfimer0

  L4 movlw d'30'

  subwf t0[_]v2,W

  bfsc status,c

  goto L4

  call dosetimer0

  程序檢測時間是否到達(dá)1.5s,沒有則循�(huán)等待,到了或檢測時間過了就關(guān)閉定時器,�(zhí)行下面的程序�

  總之,在PIC單片�(jī)的編程中采用合適的方�,可以使整個程序運(yùn)行穩(wěn)�,而且程序空間的使用也將有所減小,避免了�(diào)試中的Bug�

�(yīng)用設(shè)計經(jīng)�(yàn)與技�

  美國微芯公司(Microch{p Technology Inc�)開發(fā)的CM0S工藝PIC系列8位單片機(jī)(RISC微控制器),特別是采用�(nèi)置第二代Flash存儲�(40年存儲壽�)的微控制器在快速應(yīng)用方面具有獨(dú)到之�。由于其易用性和高可靠性,該系列微控制器穩(wěn)�8位單片機(jī)全球出貨量之�。PIC系列單片�(jī)具有指令集簡潔、簡單易�(xué)、速度高、功能強(qiáng)、功耗低、價格低�、體積小�、適用性好及抗干擾能力�(qiáng)等特�(diǎn),大量應(yīng)用于汽車電氣控制、電�(jī)控制、工�(yè)控制儀表和儀表、通信、家�、玩�、低功耗的測控�(yīng)用等�(lǐng)�,在國內(nèi)越來越受到廣大設(shè)計者的歡迎,微芯公司的單片�(jī)已經(jīng)成為目前單片�(jī)世界的主流產(chǎn)��

  PIC 8位單片機(jī)�(nèi)已經(jīng)包含�(yùn)算器、存儲器、A/D、PWM、輸入和輸出I/O(灌電流可�(dá)25mA)、通信等常用接�,自由靈活的定義功能可以適應(yīng)不同的控制要�。而不必增加額外的IC芯片。這樣電路�(jié)�(gòu)很簡�,開�(fā)周期將大為縮短�

  PICl6系列單片�(jī)屬于PIC8位單片機(jī)的中級型�(chǎn)�,采�14位的RISC指令系統(tǒng)。筆者使用PICl6F716單片�(jī)�(shè)計了一個電動機(jī)保護(hù)�,在�(shè)計過程中遇到很多問題,通過多方查找資料以及向Microchip公司技�(shù)人員尋求支持,問題一一得到解決?,F(xiàn)將部分問題記錄如�,與大家一起探��

  1 ICD2作為程序燒寫的使�

  1.1 ICD2簡介

  MPLAB ICD2在線�(diào)試器是一款低價位的PIC開發(fā)工具。它利用Flash工藝芯片的程序區(qū)自讀寫功能來�(shí)�(xiàn)仿真器調(diào)試功�;使用的軟件平臺是Microchip的MPLAB IDE(集成開發(fā)�(huán)境軟件包),兼容Windows NT、Windows 2000和Windlows XP等操作系�(tǒng)。其通信接口方式可以是USB(可達(dá)2Mb/s)或RS-232串行接口方式;工作電壓范圍為2.O�5�5V,可支持2�0V的低壓調(diào)試�

  MPLABICD2可以支持大部分Flash工藝的芯�。它不僅可以用作�(diào)試器,同時還可以作為開發(fā)型的燒寫器使��

  1�2 ICD2作為燒寫器時的配�

  燒寫芯片的方式有兩種:普通燒寫和在線燒寫。在線燒寫是適合大批量生�(chǎn)方式的燒寫辦�。使用在線燒寫時通常用戶都已�(jīng)把芯片焊到了板上,此時就要求用戶板上有預(yù)留的燒寫接口。用戶板上的接口是通過一�6芯的扁平電纜與ICD2主機(jī)上同樣的接口一一對應(yīng)連接�。圖1顯示了MPLAB ICD2與目�(biāo)板上模塊連接插座的互連狀況�

  ICD連接插座�6個引�,但只使用了其中�5個引�,分別是VDD(電源)、VSS(�)、VPP(編程電壓)、PGC(同步時鐘)和PGD(�(shù)�(jù))�

  1�3 ICD2作為燒寫器時容易出現(xiàn)的問題及解決方法

  盡管MPLAG ICD2與目�(biāo)板的互連非常簡�,但是一不小心就會出�(xiàn)問題,基本上每一個PIC的入門者都會碰到類似的問題。下面就一些常見問題作簡要敘述�

  如圖1所�,在VPP與VDD之間通常要串接一個上拉電�(通常約為10kΩ),這樣VPP線可置為低電平來手動�(fù)位PICmicro單片�(jī)。但是對一般設(shè)計者來�,都是采用上電自動復(fù)位。如果在這里采用集成器件DMP809,那么就會導(dǎo)致連接不上,程序沒有辦法燒入�

MPLAB ICD2與目標(biāo)板的連接圖

  對于PGC、PGD兩根�,由于在ICD2�(nèi)部已�(jīng)�(jìn)行了上拉,所以在外圍�(shè)計中,不要冉�(jìn)行上�,否則會造成分壓。對于PGC、PGD和VPP三根�,不要對地接電容.因?yàn)殡娙輹璧K在數(shù)�(jù)和時鐘線上電平的快速轉(zhuǎn)�,從而影響ICD2與目�(biāo)板的連接。同樣對于PGC、PGD,由于數(shù)�(jù)或時鐘都是雙向傳�?shù)?,這時如果在中間串一個二極管,則會影響ICD2與單片機(jī)的雙向通信�

  但是,對PGC和PGD來說,在單片�(jī)上同時復(fù)用為普通I/O�,而有些使用上必須要接對地電容或者是串接二極�。對于這種情況,的處理方式就是在燒寫時從芯片的PGC和PGD端口直接跳線到程序燒寫口�

  2 A/D�(zhuǎn)換通道切換問題

  筆者所�(shè)計的電動�(jī)保護(hù)器需要�(jìn)行很多A/D�(zhuǎn)換,比如三相電流�(zhuǎn)�、零序電流轉(zhuǎn)換以及各�*�。但是筆者所采用的PIC16F716單片�(jī)只有5路A/D�(zhuǎn)換通道,因此附加了一個多位選擇開�(guān)對一個A/D通道�(jìn)行復(fù)�。而在�(diào)試中�(fā)�(xiàn)這樣一個問�,就是A/D�(zhuǎn)換值不�(zhǔn)確,甚至有點(diǎn)�,但從程序流程以及代碼角度均查不出任何問�。后查明PICl6F716單片�(jī)�(jìn)行A/D�(zhuǎn)換通道切換時,需要一定的延時,延時時間是毫秒�。解決辦法是:在通道問切換時,當(dāng)個通道�(zhuǎn)換完成后,先�(zhuǎn)到另一個通道;然后延�1ms左右,再�(jìn)行A/D�(zhuǎn)�。而對同一個通道信號切換�,要在個信號轉(zhuǎn)換完成后,禁止信號輸�,延�1ms左右;然后輸人信�,再�(jìn)行A/D�(zhuǎn)��

  這種做法比較麻煩,也很占用時�,并且從�(diào)試結(jié)果來�,問題并沒有解決。在反復(fù)�(jìn)行調(diào)試中,得到的�(yōu)化解決辦法是:對于通道間轉(zhuǎn)換以及同一通道信號�(zhuǎn)換,要對每一個信號至少�(jìn)行兩次A/D�(zhuǎn)�;次的轉(zhuǎn)換結(jié)�,舍棄不予處理,只取第二次A/D�(zhuǎn)換的�(jié)�。從�(diào)試結(jié)果來�,很好地解決了這一問題�

  3 軟件開發(fā)小技�

  PIC單片�(jī)采用精簡指令�,例如對于PICl6F716單片�(jī),只�35條單字節(jié)指令。要用這么少的指令�(shí)�(xiàn)�(fù)雜的控制或計算,顯然要在軟件�(shè)計上多下功夫,并且PIC的指令系�(tǒng)�51系列單片�(jī)有很大不�,這讓PIC初學(xué)者很不適�(yīng)。下面筆者就自己的體�,談一些軟件設(shè)計需要注意的問題�

  3.1 指令的大小寫問題

  編寫PIC單片�(jī)的源程序,除了源程序的開始處需要嚴(yán)格的列表指令外,還須注意源程序中字母符號的大小寫�(guī)�,否則在PC�(jī)上匯編程序時不會成功。在源程序中都會使用偽指令I(lǐng)NCLUDE。這條指令將列表中指定的單片機(jī)文件(在MPLAB�)讀入源程序作為源程序的一部分,所以凡是MPLAB中有�(guān)該單片機(jī)已有的寄存器在源程序中無需再用賦值指�(EQU)賦�,這就使所建立的源程序大為簡化�

  此外,由于有了偽指令I(lǐng)NCLUDE,所以根�(jù)MPLAB軟件中的格式,在源程序中的操作數(shù)凡是涉及MPLAB已規(guī)定的寄存器名稱的,其字母一律只能大�,不能小寫。其余操作碼、符號字母可任意大小�,但0x中的x�(yīng)小寫。否則匯編不會成功。鑒于上述原�,為了書寫方便,在使用MPLAB軟件�,PIC單片�(jī)的源程序均用大寫字母為宜(0x例外)�

  3�2 振蕩器的配置以及時序的計�

  PIC系列單片�(jī)可以工作于以�4種不同的振蕩器方式:LP(低功耗晶體振蕩器)、XT(晶體諧振�)、HS(高速晶體諧振器)和RC(阻容振蕩�)。用戶可以根�(jù)其系�(tǒng)�(shè)計的需�,通過對配置位(FOSC1和F0SC2)編程,選擇其中一種工作模��

  而一旦振蕩器配置完成,那么根�(jù)用戶的配�,可以輕松地計算出程序運(yùn)行的時間以及A/D�(zhuǎn)換所占用的時間,這樣就會很輕松地安排好單片機(jī)的時�。例如,如果采用4 MHz的HS振蕩模式,那么單片機(jī)的時鐘頻率為FOSC/4,也就是說執(zhí)行一條指令需�1μs;對于需要兩個指令周期的指令,需�2μs。而對于A/D�(zhuǎn)換,如果A/D�(zhuǎn)換時鐘位選擇為FOSC�8,那么A/D�(zhuǎn)換模塊轉(zhuǎn)換一個位的時間Tad就為2μs。對一�8位的�(zhuǎn)換來�,需要的時間�9�5Tad,也就是完成一次A/D�(zhuǎn)換的時間�19μs。這樣只需要查看源程序的行�(shù)并作簡要分析,就可以計算出程序運(yùn)行的時間�

  3.3 存儲體的選擇

  PIC單片�(jī)的數(shù)�(jù)存儲器通常分為兩個存儲體,即存儲體O(Bank0)和存儲體1(Bankl)。每個存儲體都是由專用寄存器和通用寄存器兩部分組成�。兩個存儲體中的一氈寄存器單元�(shí)際上是同一個寄存器單元,卻又具有不同的地址�

  不同型號的PIC單片�(jī),其�(shù)�(jù)存儲器的組成(即功�)是不完全相同�,所以設(shè)計人員一旦選用了某個PIC單片�(jī)的型號后,就要查找該單片�(jī)的數(shù)�(jù)存儲器資�,以便編程使用�

  筆者所采用的PICl6F716單片�(jī)的存儲區(qū),是通過STATUS寄存器的RPl位和RP0位來選擇的。當(dāng)配置�00�,表示選擇存儲區(qū)0;當(dāng)配置�01時,表示選擇存儲區(qū)1。因?yàn)榇鎯^(qū)的改變只須改變RP0�,所以通常在程序編寫時,只改變RP0位來選擇存儲區(qū)。但是這樣容易造成程序的混�,因�,筆者建議在每次更換存儲區(qū)�,要分別對RPO和RPl�(jìn)行置�。在程序初始化時,將寄存器的初始化分為兩部分:部分為存儲區(qū)O;第二部分為存儲區(qū)1。然后將每個需要初始化的寄存器分別在對�(yīng)的存儲區(qū)�(jìn)行初始化即可�

  3.4 GOTO和CALL指令的不同使�

  在PIC的匯編程序中,CALL與GOT0指令使用的場臺不�。CALL是用來調(diào)用子程序�,在�(diào)用完子程序后返回到調(diào)用前的程序;而GOTO是無條件�(zhuǎn)�,即由此狀�(tài)�(jìn)入另外一個狀�(tài)而不需要返回�

  為了使程序更加具有可讀�,使流程更加清晰、合�,通常程序都采用模塊化程序�(shè)計,即將程序按照功能分成不同的子程序,而主程序則相�(dāng)簡潔,只須采用CALL指令對子程序�(jìn)行調(diào)��

  由于PIC單片�(jī)的堆棧有�,在程序中不能無止境地使用GOTO指令,否則會使堆棧溢�,程序無法正常運(yùn)�。但是在有些時�,例如當(dāng)程序出現(xiàn)分支時,則不得不使用GOTO指令。對于PICl6F7x系列單片�(jī),程序出�(xiàn)分支時只能通過STATUS寄存器的Z位或C位�(jìn)行判�。這時在兩種情況的前一種情況下,必須使用GOTO指令�(jìn)行轉(zhuǎn)移;否則在執(zhí)行完種情況后,緊接著又執(zhí)行第二種情況。程序如下:

  BTFSS STATUS,Z

  GOTO A

  GOTO B

  在跳�(zhuǎn)到A�,必須使用GOTO指令;否則執(zhí)行完這條語句以后,緊接著�(zhí)行GOTO B。這樣無論Z為何�,程序都將跳�(zhuǎn)到B。而對于GOT0 B,則可以不必使用GOTO指令�

  在上面這種情況�,由于GOTO只在子程序內(nèi)部�(jìn)行跳�(zhuǎn),小程序�(nèi)部循�(huán)占用堆棧的級�(shù)不多,因此使用GOTO指令是可行的。但是在大的程序中使用GOTO指令,將有可能無法返回到�(diào)用前的下一條指��

  因此,筆者建�,在使用匯編語言�(jìn)行程序設(shè)計時,應(yīng)該將程序分解成一級級的子程序;然后在程序之間�(jìn)行調(diào)�,盡量將GOTO指令跳轉(zhuǎn)的范圍縮��

  3.5 對芯片的重復(fù)燒寫

  對沒有硬件仿真器的設(shè)計者來說,總是選用帶有EPROM的芯片來�(diào)試程�,通過反復(fù)的修改來觀看運(yùn)行結(jié)果,以便對程序�(jìn)行調(diào)�。每更改一次程序.都是將原來的�(nèi)容先擦除,再編程,浪�(fèi)了相�(dāng)多的時間,又縮短了芯片的使用壽命。如果后一次編程較前一次,僅是對應(yīng)的機(jī)器碼字節(jié)的相同位�1�?yōu)?,那么就可在前一次編程芯片上再次寫入�(shù)�(jù),而不必擦除原片內(nèi)容�

  在程序調(diào)�

  過程�,經(jīng)常遇到常�(shù)的調(diào)整。如果常�(shù)的改變能保證對應(yīng)位由1�0,則都可在原片內(nèi)容的基礎(chǔ)上繼�(xù)編程。另�,由于指令NOP對應(yīng)的機(jī)器碼�00,調(diào)試過程中指令的刪�,可先用NOP指令替代,編譯后也可在原片內(nèi)容上繼續(xù)編程�

  �(jié)�

  在采用PIC單片�(jī)�(jìn)行設(shè)計過程中,注意到PIC單片�(jī)自身的特�(diǎn),可盡量少走彎路,從而縮短開�(fā)周期。同樣在軟件�(shè)計上采用合適的方�,可以使整個程序運(yùn)行穩(wěn)�,而且程序空間的使用也將有所減少,避免了�(diào)試中的Bug。以上只是筆者在�(shí)際設(shè)計過程中一些小小的體會。希望與大家一起探�,并在共同學(xué)�(xí)中為PIC單片�(jī)的普及和推廣做出貢獻(xiàn)�

捕捉模塊的設(shè)計思路

  PIC16F877單片�(jī)配置了兩個CCP(捕捉/比較/脈寬調(diào)制)模塊,即CCP1和CCP2。它們各白都有獨(dú)立的16位寄存器CCPR1和CCPR2。兩個模塊的�(jié)�(gòu)、功�、操作方法基本一�,區(qū)別僅在于它們各自有�(dú)立的外部引腳和特殊事件觸�(fā)�。CCP模塊的功能包括外部信號捕捉、內(nèi)部比較輸出以及PWM輸出,它往往與定時器/計�(shù)器配合使��

  CCP模塊可工作在3種模式下:捕捉方式、比較方式和脈寬�(diào)制方��

  · 捕捉方式是指檢測引腳上輸入信號的狀�(tài),當(dāng)信號的狀�(tài)符合�(shè)定的條件時(信號上升沿或下降沿出�(xiàn)時)�(chǎn)生中�,并記錄�(dāng)時的定時器/計數(shù)器�,當(dāng)CCP模塊工作在捕捉方式時,TMR1控制寄存器必須工作在定時器或同步計數(shù)方式��

  · 比較方式是指將事先設(shè)定好的值與定時器方式或同步計數(shù)方式下的值相互比較,�(dāng)兩個值相等時,產(chǎn)生中斷并�(qū)動事先設(shè)定好的動��

  · 脈寬�(diào)制功能適用于從引腳上輸出脈沖寬度隨時可調(diào)的PWM信號,來�(shí)璣直流電�(jī)的調(diào)�、D/A�(zhuǎn)換和步�(jìn)電機(jī)的步�(jìn)控制�

  本設(shè)計應(yīng)用PIC16F877單片�(jī)的CCP模塊的捕獲工作方式�(jìn)行頻率計的設(shè)�,具體設(shè)計要求如��

  測量對象�100�1000Hz的TTL電平信號,待測量的參�(shù)有:

  · 頻率,測量誤差小�0.1��

  · 周期,測量誤差小�0.1��

  · 脈沖寬度(高電平持續(xù)時間),脈沖寬度大于100μs,測量誤差小�1%;

  · 占空�,占空比的變化范圍為10%~90�,測量誤差小�1��

  頻率計的�(shè)計原理如��

  在t1時刻之前把CCP1�(shè)置為捕捉脈沖上升�。當(dāng)信號上升沿到來時,產(chǎn)生CCP中斷,在中斷服務(wù)程序中捕捉該時刻TMR1寄存器中16位的值time1,將CCP1�(shè)置為捕捉脈沖的下降沿�

  �(dāng)該信號下降沿到來�,產(chǎn)生CPP中斷,在中斷服務(wù)程序中捕捉該時刻TMR1寄存器中16位的值time2,而后再把CCP1�(shè)置為捕捉脈沖的上升沿�

  �(dāng)信號的下一個上升沿來到�,又�(chǎn)生CCP中斷,在中斷服務(wù)程序中捕捉此刻TMR1寄存器中�16位的值time3,則信號的周期T=(time3-time1)μS,信號頻率f=1/T,脈沖寬度P=(time2-time1)μS,占空比D=P/T×100%�

  考慮到CCP捕捉方式可能�(fā)生的誤差為�1μs,為滿足誤差要求,可把上述過程多�(jìn)行幾�,將各次測試的平均值作為的測量值�

頻率計設(shè)計原理示意圖

  � 頻率計設(shè)計原理示意圖

  如果需要測量的頻率�1000Hz,周期只�1000μs,且占空比的變化范圍�10%~90%,則高低電平持�(xù)的最短時間都�100μs,可以有充分的時間執(zhí)行中斷服�(wù)程序�

  如果�(shí)際應(yīng)用中�(fā)�(xiàn)兩次捕捉中斷的時間間隔小�1次中斷服�(wù)時間,則可以通過適當(dāng)�(shè)置寄存器CCPICON的�,使CCP模塊�4個脈沖上升沿捕捉1次或�16個脈沖上升沿捕捉一�,這樣兩次中斷的時間間隔就增大�。如果還不能�(dá)到要求,則可用分頻器對輸入頻率信號分頻處理后,再由CCP1引腳輸入�

維庫電子�,電子知�,一查百��

已收錄詞�162111