PIC單片機(jī)C語(yǔ)言編程實(shí)例六 利用CCP模塊設(shè)計(jì)頻率計(jì)_第1頁(yè)
PIC單片機(jī)C語(yǔ)言編程實(shí)例六 利用CCP模塊設(shè)計(jì)頻率計(jì)_第2頁(yè)
PIC單片機(jī)C語(yǔ)言編程實(shí)例六 利用CCP模塊設(shè)計(jì)頻率計(jì)_第3頁(yè)
PIC單片機(jī)C語(yǔ)言編程實(shí)例六 利用CCP模塊設(shè)計(jì)頻率計(jì)_第4頁(yè)
PIC單片機(jī)C語(yǔ)言編程實(shí)例六 利用CCP模塊設(shè)計(jì)頻率計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第10章 利用CCP模塊設(shè)計(jì)頻率計(jì)10.5 程序設(shè)計(jì)10.5.4 程序清單#include #include #include /本程序利用CCP1模塊實(shí)現(xiàn)一個(gè)“簡(jiǎn)易數(shù)字頻率計(jì)”的功能const char table11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0xFF;/不帶小數(shù)點(diǎn)的顯示段碼表const char table011=0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xFF;/帶小數(shù)點(diǎn)的顯示段碼表bank3 int cp1z11; /定義一個(gè)數(shù)組,用于存放各次的捕捉值

2、union cp1 int y1;unsigned char cp1e2;cp1u; /定義一個(gè)共用體unsigned char COUNTW,COUNT; /測(cè)量脈沖個(gè)數(shù)寄存器unsigned char COUNTER,data,k;unsigned char FLAG 0XEF;#define FLAGIT(adr,bit (unsigned(&adr*8+(bit /絕對(duì)尋址位操作指令static bit FLAG1 FLAGIT(FLAG,0;static bit FLAG2 FLAGIT(FLAG,1;static bit FLAG3 FLAGIT(FLAG,2;unsigned c

3、har s4; /定義一個(gè)顯示緩沖數(shù)組int T5 ,uo;double RE5;double puad5;/spi方式顯示初始化子程序void SPIINIT(PIR1=0;SSPCON=0x30; SSPSTAT=0xC0;/設(shè)置SPI的控制方式,允許SSP方式,并且時(shí)鐘下降沿發(fā)送,與74HC595,當(dāng)其/SCLk從低到高跳變時(shí),串行輸入寄存器的特點(diǎn)相對(duì)應(yīng)TRISC=0xD7; /SDO引腳為輸出,SCK引腳為輸出TRISA5=0; /RA5引腳設(shè)置為輸出,以輸出顯示鎖存信號(hào)FLAG1=0 ;FLAG2=0 ;FLAG3=0 ;COUNTER=0X01;/CCP模塊工作于捕捉方式初始化子程

4、序void ccpint( CCP1CON=0X05; /首先設(shè)置CCP1捕捉每個(gè)脈沖的上升沿T1CON=0X00; /關(guān)閉TMR1震蕩器 ?PEIE=1; /外圍中斷允許(此時(shí)總中斷關(guān)閉CCP1IE=1; /允許CCP1中斷TRISC2=1; /設(shè)置RC2為輸入/系統(tǒng)其它部分初始化子程序void initial( COUNT=0X0B; /為保證測(cè)試精度,測(cè)試5個(gè)脈沖的參數(shù)后/求平均值,每個(gè)脈沖都要捕捉其上升、下降沿,/故需要有11次中斷TRISB1=0; PORTB=0XFB; B=1011TRISB2=0; PORTB=0XFD ;D=1101TRISB4=1;TRISB5=1; /設(shè)置

5、與鍵盤(pán)有關(guān)的各口的輸入、輸出方式RB1=0;RB2=0; /建立鍵盤(pán)掃描的初始條件 /SPI傳送數(shù)據(jù)子程序void SPILED(dataSSPBUF=data; /啟動(dòng)發(fā)送do ;while(SSPIF=0;SSPIF=0;/顯示子程序,顯示4位數(shù)void display( RA5=0; /準(zhǔn)備鎖存for(COUNTW=0;COUNTW4;COUNTW+data=sCOUNTW;data=data&0x0F;if(COUNTW=k data=table0data;/第二位需要顯示小數(shù)點(diǎn)else data=tabledata;SPILED(data; /發(fā)送顯示段碼for(COUNTW=0;C

6、OUNTW4 COUNTER=0x01;/若COUNTER超過(guò)4,則又從1計(jì)起if(data=0x02 COUNTER=COUNTER-1; /若按下S11鍵,則COUNTER減1if(COUNTER1 COUNTER=0x04;/若COUNTER小于1,則又循環(huán)從4計(jì)起if(data=0x03 FLAG2=1 ; /若按下S10鍵,則建立標(biāo)志FLAG2if(data=0x04 FLAG2=0 ; /若按下S12鍵,則清除標(biāo)志FLAG2/中斷服務(wù)程序void interrupt cp1int(voidCCP1IF=0; /清除中斷標(biāo)志cp1u.cp1e0=CCPR1L;cp1u.cp1e1=C

7、CPR1H;cp1zdata=cp1u.y1; /存儲(chǔ)1次捕捉值CCP1CON=CCP1CON0X01; /把CCP1模塊改變成捕捉相反的脈沖沿data+;COUNT-;/周期處理子程序void PERIOD( T5=cp1z10-cp1z0; /求得5個(gè)周期的值 ?/RE5=(doubleT5; /強(qiáng)制轉(zhuǎn)換成雙精度數(shù)RE5=RE5/5; /求得平均周期,單位為s/頻率處理子程序void FREQUENCY( PERIOD( ; /先求周期RE5=1000000/RE5; /周期值求倒數(shù),再乘以1 000 000 (s轉(zhuǎn)換,得頻率,/單位為HZ/脈寬處理子程序void PULSE( int p

8、u;for(data=0;puad5=0;data=9;data+pu=cp1zdata+1-cp1zdata;puad5=(doublepu+puad5;data=data+2; /求得5個(gè)脈寬的和值RE5=puad5/5; /求得平均脈寬/占空比處理子程序void OCCUPATIONAL( PULSE( ; /先求脈寬puad5=RE5; /暫存脈寬值PERIOD(; /再求周期RE5=puad5/RE5; /求得占空比 /主程序main( SPIINIT( ; /SPI方式顯示初始化while(1 ccpint(; /CCP模塊工作于捕捉方式初始化initial(; /系統(tǒng)其它部分初始

9、化if(FLAG2=0 s0=COUNTER; /第一個(gè)存儲(chǔ)COUNTER的值s1=0X0A;s2=0X0A;s3=0X0A; /后面的LED將顯示DARKdisplay( ; /調(diào)用顯示子程序keyscan(; /鍵盤(pán)掃描 data=0x00; /存儲(chǔ)數(shù)組指針賦初值TMR1H=0;TMR1L=0; /定時(shí)器1清0CCP1IF=0; /清除CCP1的中斷標(biāo)志,以免中斷一打開(kāi)就進(jìn)入/中斷ei( ; /中斷允許TMR1ON=1; /定時(shí)器1開(kāi)while(1if(COUNT=0break; /等待中斷次數(shù)結(jié)束di(; /禁止中斷TMR1ON=0; /關(guān)閉定時(shí)器keyscan(; /鍵盤(pán)掃描 if(F

10、LAG1=1 keyserve( ; /若確實(shí)有鍵按下,則調(diào)用鍵服務(wù)程序 if(FLAG2=0 continue; /如果沒(méi)有按下確定鍵,則終止此次循環(huán),/繼續(xù)進(jìn)行測(cè)量/如果按下了確定鍵,則進(jìn)行下面的數(shù)值轉(zhuǎn)換和顯示工作if(COUNTER=0x01 FREQUENCY(; /COUNTER=1,則需要進(jìn)行頻率處理if(COUNTER=0x02 PERIOD(; /COUNTER=2,則需要進(jìn)行周期處理if(COUNTER=0x03 OCCUPATIONAL(;/COUNTER=3,則需要進(jìn)行占空比處理if(COUNTER=0x04 PULSE(; /COUNTER=4,則需要進(jìn)行脈寬處理k=5;if(RE51RE5=RE5*1000; /若RE51,則乘以1 000,保證小數(shù)點(diǎn)的精度 k=0x00;else if(RE510RE5=RE5*1000; /若RE510,則乘以1 000,保證小數(shù)點(diǎn)的精度 k=0x00;else if(RE5100RE5=RE5*100; /若RE51

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論