




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
集團(tuán)文件發(fā)布號(hào):(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-19882)集團(tuán)文件發(fā)布號(hào):(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-19882)PIC單片機(jī)應(yīng)用開發(fā)典型模塊第四章程序(1)多功能波形信號(hào)發(fā)生模塊程序應(yīng)用#INCLUDE<P16F877.INC>RTCC EQU 01HPC EQU 02HPCLATH EQU 0AHTEMP0TIME EQU 20H ;方波次數(shù)TEMP0CONST EQU 21H ;方波常數(shù)TEMO0DOT EQU 22H ;方波點(diǎn)數(shù)TEMP0OUT EQU 23H ;方波輸出值TEMP1TIME EQU 30H ;鋸齒波次數(shù)TEMP1CONST EQU 31H ;鋸齒波常數(shù)TEMP1DOT EQU 32H ;鋸齒波點(diǎn)數(shù)TEMP1OUT EQU 33H ;鋸齒波輸出值TEMP2TIME EQU 40H ;三角波次數(shù)TEMP2CONST EQU 41H ;三角波常數(shù)TEMP2DOT EQU 42H ;三角波點(diǎn)數(shù)TEMP2OUT EQU 43H ;三角波輸出值OPTION_R EQU 81H WBU EQU 2FH ;W暫存SBU EQU 2EH ;STATUS暫存RCC EQU 0FAH ;最大頻率常數(shù);------------------------------------------------------------------------------------------------------ORG 0SYS_RESETGOTO START;------------------------------------------------------------------------------------------------------ORG 4 ;中斷程序MOVWF WBUSWAPF WB0,0SWAPF STATUS,0MOVWF SBUCALL SERV_INTSWAPF SBU,0MOVWF STATUSSWAPF WBU,0RETFIE;------------------------------------------------------------------------------------------------------ORG 40HNOPSTARTCALL INTCALL INTPORTCALL INTTMOLOOP ;延時(shí)NOPNOPGOTO LOOP;------------------------------------------------------------------------------------------------------INTCLRF TEMP0DOTCLRF TEMP1DOTCLRF TEMP2DOTCLRF TEMP0OUTCLRF TEMP1OUTCLRF TEMP2OUTMOVLW 03HMOVWF TEMP0TIMEMOVWF TEMP0CONSTMOVWF TEMP2TIMEMOVWF TEMP2CONSTMOVLW 06HMOVWF TEMP1TIMEMOVWF TEMP1CONSTRETURN;------------------------------------------------------------------------------------------------------INTPORT ;端口初始化BCF STATUS,0BCF STATUS,1BCF STATUS,5CLRF PORTCCLRF PORTDBSF PORTE,1BSF STATUS,5MOVLW 00HMOVWF TRISDMOVLW OF4HMOVWF TRISC ;定義RE1為輸出,其他為輸入MOVWF TRISEBCF STATUS,5RETURN;------------------------------------------------------------------------------------------------------INTTM0 ;定時(shí)器初始化BSF STATUS,5MOVLW 80HMOVWF OPTION_RBCF STATUS,5MOVLW 0A0 ;開放定時(shí)器中斷MOVLW RCC ;RCC=最大頻率延時(shí)常數(shù)MOVWF RTCCRETURN;;------------------------------------------------------------------------------------------------------SERY_INT ;中斷服務(wù)程序BTFSC INTCON,2GOTO SERVRTCCCLRF INTCONBSF INTCON,5RETURNSERVRTCCMOVLW RCCMOVWF RTCCBCF INTCON,2CALL OUTPUTRETFIE;------------------------------------------------------------------------------------------------------OUTPUT ;輸出波形BCF STATUS,5FBODECFSZ TEMP0TIME,1 ;方波GOTO JBOCALL FANGBOJBODECFSZ TEMP1TIME,1 ;鋸齒波GOTO SJBOCALL JUCBOSJBODECFSZ TEMP2TIME,1 ;三角波RETURNCALL SJIAOBORETURN;------------------------------------------------------------------------------------------------------FANGBOBCF PORTS,1 ;為低BCF PORTC,0BCF PORTC,1 ;選擇輸出通道,0通道為方波INCF TEMP0DOT,1MOVF TEMP0CONST,0MOVWF TEMP0TIMEBTFSC TEMP0DOT,7GOTO GAOGOTO DIGAOMOVLW OFFHMOVWF PORTDBSF PORTE,1RETURNDI M0VLW 00HMOVWF PORTDBSF PORTE,1RETURN;------------------------------------------------------------------------------------------------------JUCBOBCF PORTE,1BCF PORTC,0 ;選擇輸出通道,1通道為鋸齒波MOVF TEMP1CONST,0MOVWF TEMP1TIMEINCFSZ TEMP1DOT,1GOTO JUBO1MOVF TEMP1OUT,0MOVWF PORTDINCF TEMP1OUT,1RETURNJUBO1MOVLW 00HMOVWF TEMPlOUTRETURN;------------------------------------------------------------------------------------------------------SJIAOBOBCF PORTE,1BCF PORTC,1 ;選擇輸出通道,2通道為三角波MOVF TEMP2CONST,0MOVWF TEMP2TIMEINCFSZ TEMP2DOT,1GOTO SJBO2CALL SJBO0SJB02MOVF TEMP2OUT,0MOVWF PORTDBSF PORTE,1MOVLW 02HBTFSS TEMP2DOT,7GOTO SJBO1ADDWF TEMP2OUT,1RETURNSJBO1SUBWF TEMP2OUT,1RETURNSJBO0CLRF TEMP2OUTRETURNEND(2)PWM信號(hào)發(fā)生模塊程序應(yīng)用#include<pic.h>/*CCP1模塊的PWM工作方式初始化子程序*/voidINIT_CCP1(){PR2=0XFF; /*設(shè)置PWM周期*/CCPR1L=0X7F; /*設(shè)置工作循環(huán)的高8bit為01111111*/CCP1CON=0X3C; /*設(shè)置CCP1為PWM工作方式,且工作循環(huán)的低bit2為11*/INTCON=0X00; /*禁止總中斷和外圍中斷*/TRISC=0XFB; /*設(shè)置RC2/CCP1為輸出*/}/*主程序*/main(){INIT_CCP1(); /*CCP1模塊的PWM工作方式初始化*/T2CON=0X03; /*前分頻比為16,打開TMR2,同時(shí)輸出PWM信號(hào)*/}(3)正弦信號(hào)發(fā)生模塊程序應(yīng)用#include<pic.h>//本程序?qū)⑼ㄟ^(guò)PIC16F877的I2C方式驅(qū)動(dòng)D/A轉(zhuǎn)換器MAX518,使其D/A0//一個(gè)連續(xù)的正弦波形constchartable[]={0X80,0X86,0X8D,0X93,0X99,0X9F,0XA5,0XAB,0XB1,0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,0XEA,0XEE,0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,0XE9,0XE5,0XE1,0XDD,0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,0XAE,0XA8,0XA2,0X9C,0X96,0X90,0X89,0X83,0X80,0X79,0X72,0X6C,0X66,0X60,0X5A,0X55,0X4E,0X48,0X43,0X3D,0X38,0X33,0X2E,0X29,0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,0X0B,0X09,0X07,0X05,0X03,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X02,0X04,0X06,0X08,0X0A,0X0D,0X10,0X13,0X16,0X1A,0X1E,0X22,0X27,0X2B,0X30,0X35,0X3A,0X40,0X45,0X4C,0X51,0X57,0X5D,0X63,0X69,0X6F,0X76,0X7C};//以上的數(shù)組用于存放正弦表,在定義數(shù)組時(shí),前面應(yīng)該加上const,//使數(shù)組存放于ROM中,而不至于占用太多的RAMunsignedchari;unsignedcharj;unsignedcharn;//I2C初始化子程序voidi2cint(){SSPCON=0X08; //初始化SSPCON寄存器TRISC3=1; //設(shè)置SCL為輸入口TRISC4=1; //設(shè)置SDA為輸入口TRISA4=0;SSPSTAT=0X80; //初始化SSPSTAT寄存器SSPADD=0X02; //設(shè)定I2C時(shí)鐘頻率SSPCON2=0X00; //初始化SSPCON2寄存器di(); //關(guān)閉總中斷SSPIF=0; //清SSP中斷標(biāo)志RA4=0; //關(guān)掉74HC165的移位時(shí)鐘使能,以免74HC165//移位數(shù)據(jù)輸出與I2C總線的數(shù)據(jù)線發(fā)生沖突SSPEN=1; //SSP模塊使能}//I2C總線輸出數(shù)據(jù)子程序voidi2cout(){SEN=1; //產(chǎn)生I2C啟動(dòng)信號(hào)for(n=0x02;--n;)continue; //給予一定的延時(shí),保證啟動(dòng)do{RSEN=1; //產(chǎn)生I2C啟動(dòng)信號(hào)}while(SSPIF==0); //如果沒(méi)能啟動(dòng),則反復(fù)啟動(dòng),直到啟動(dòng)為止SSPIF=0; //SSPIF標(biāo)志清0SSPBUF=0X58; //I2C總線發(fā)送地址字節(jié)do{;}while(SSPIF==0); //等待地址發(fā)送完畢SSPIF=0; //SSPIF標(biāo)志清0SSPBUF=0X01; //I2C總線發(fā)送命令字節(jié)do{;}while(SSPIF==0); //等待命令發(fā)送完畢SSPIF=0; //SSPIF標(biāo)志清0SSPBUF=j; //I2C總線發(fā)送數(shù)據(jù)字節(jié)do{;}while(SSPIF==0); //等待數(shù)據(jù)發(fā)送完畢SSPIF=0; //SSPIF標(biāo)志清0PEN=1; //產(chǎn)生停止條件do{;}while(SSPIF==0); //等待停止條件產(chǎn)生SSPIF=0; //SSPIF標(biāo)志清0}//主程序main(){i2cint(); //I2C初始化while(1){for(i=0x00;i<=127;++i){j=table[i]; //從數(shù)組中得到需要傳輸?shù)臄?shù)據(jù)量i2cout(); //利用I2C總線方式送出數(shù)據(jù)}}(4)簡(jiǎn)易頻率計(jì)模塊程序#include<pic.h>#include<stdio.h>#include<math.h>bank3intcp1z[11]; //定義一個(gè)數(shù)組,用于存放各次的捕捉值unioncp1{inty1;unsignedcharcp1e[2];}cp1u;//定義一個(gè)共用體unsignedcharCOUNTW,COUNT;//測(cè)量脈沖個(gè)數(shù)寄存器unsignedcharCOUNTER,data,k;unsignedchars1[4]; //定義4個(gè)顯示緩沖數(shù)組unsignedchars2[4];unsignedchars3[4];unsignedchars4[4];intT5,uo;doubleRE5;doublepuad5;//CCP模塊工作于捕捉方式初始化子程序voidccpint(){CCP1CON=0X05; //首先設(shè)置CCP1捕捉每個(gè)脈沖的上升沿T1CON=0X00; //關(guān)閉TMR1震蕩器PEIE=1; //外圍中斷允許(此時(shí)總中斷關(guān)閉)CCP1IE=1; //允許CCP1中斷TRISC2=1; //設(shè)置RC2為輸入}//系統(tǒng)其它部分初始化子程序voidinitial(){COUNT=0X0B; //為保證測(cè)試精度,測(cè)試5個(gè)脈沖的參數(shù)后//求平均值,每個(gè)脈沖都要捕捉其上升、下降沿,故需要有11次中斷}//中斷服務(wù)程序voidinterruptcp1int(void){CCP1IF=0; //清除中斷標(biāo)志cp1u.cp1e[0]=CCPR1L;cp1u.cp1e[1]=CCPR1H;cp1z[data]=cp1u.y1; //存儲(chǔ)1次捕捉值CCP1CON=CCP1CON^0X01;//把CCP1模塊改變成捕捉相反的脈沖沿data++;COUNT--;}//周期處理子程序voidPERIOD(){T5=cp1z[10]-cp1z[0]; //求得5個(gè)周期的值RE5=(double)T5; //強(qiáng)制轉(zhuǎn)換成雙精度數(shù)RE5=RE5/5; //求得平均周期,單位為μs}//頻率處理子程序voidFREQUENCY(){PERIOD(); //先求周期RE5=1000000/RE5; //周期值求倒數(shù),再乘以1000000,得頻率,單位為Hz}//脈寬處理子程序voidPULSE(){intpu;for(data=0,puad5=0;data<=9;data++){pu=cp1z[data+1]-cp1z[data];puad5=(double)pu+puad5;data=data+2;}//求得5個(gè)脈寬的和值RE5=puad5/5;//求得平均脈寬}//占空比處理子程序voidOCCUPATIONAL(){PULSE(); //先求脈寬puad5=RE5; //暫存脈寬值PERIOD(); //再求周期RE5=puad5/RE5; //求得占空比}precision(RE5) //為了保證小數(shù)點(diǎn)的精度,對(duì)RE5進(jìn)行處理{k=5;if(RE5<1){RE5=RE5*1000;//若RE5<1,則乘以1000,保證小數(shù)點(diǎn)的精度k=0x00;}elseif(RE5<10){RE5=RE5*1000;//若RE5<10,則乘以1000,保證小數(shù)點(diǎn)的精度k=0x00;}elseif(RE5<100){RE5=RE5*100;//若RE5<100,則乘以100,保證小數(shù)點(diǎn)的精度k=0x01;}elseif(RE5<1000){RE5=RE5*10;//若RE5<1000,則乘以10,保證小數(shù)點(diǎn)的精度k=0x02;}elseRE5=RE5;}//主程序main(){ccpint(); //CCP模塊工作于捕捉方式初始化initial(); //系統(tǒng)其它部分初始化data=0x00; //存儲(chǔ)數(shù)組指針賦初值TMR1H=0;TMR1L=0; //定時(shí)器1清0CCP1IF=0; //清除CCP1的中斷標(biāo)志,以免中斷一打開就進(jìn)入//中斷ei(); //中斷允許TMR1ON=1; //定時(shí)器1開while(1){if(COUNT==0)break;}//等待中斷次數(shù)結(jié)束di(); //禁止中斷TMR1ON=0; //關(guān)閉定時(shí)器//進(jìn)行下面的數(shù)值轉(zhuǎn)換和顯示工作PERIOD(); //進(jìn)行周期處理precision(RE5);uo=(int)RE5;sprintf(s1,"%4d",uo); //把周期數(shù)據(jù)轉(zhuǎn)換成4位ASII碼,且放入數(shù)組S1中FREQUENCY(); //進(jìn)行頻率處理precision(RE5);uo=(int)RE5;sprintf(s2,"%4d",uo); //把頻率數(shù)據(jù)轉(zhuǎn)換成4位ASII碼,且放入數(shù)組S2中OCCUPATIONAL(); //進(jìn)行占空比處理precision(RE5);uo=(int)RE5;sprintf(s2,"%4d",uo); //把占空比數(shù)據(jù)轉(zhuǎn)換成4位ASII碼,且放入數(shù)組S3中PULSE(); //進(jìn)行脈寬處理precision(RE5);uo=(int)RE5;sprintf(s2,"%4d",uo); //把脈寬數(shù)據(jù)轉(zhuǎn)換成4位ASII碼,且放入數(shù)組S4中}(5)交流電壓測(cè)量模塊程序#include<pic.h>#include<math.h>#include<stdio.h>
unionadres
{
inty1;
unsignedcharadre[2];
}adresult;//定義一個(gè)共用體
bank3intre[40]; //定義存放A/D轉(zhuǎn)換結(jié)果的數(shù)組,在bank3中
unsignedchark,data; //定義幾個(gè)通用寄存器
doublesqu,squad; //平方寄存器和平方和寄存器,squ又通用為存儲(chǔ)其它數(shù)值
intuo;
bank1unsignedchars[4]; //此數(shù)組用于存儲(chǔ)需要顯示的字符的ASII碼
//A/D轉(zhuǎn)換初始化子程序
voidadinitial()
{
ADCON0=0x41; //選擇A/D通道為RA0,且打開A/D轉(zhuǎn)換器
//在工作狀態(tài),使A/D轉(zhuǎn)換時(shí)鐘為8Tosc
ADCON1=0X8E; //轉(zhuǎn)換結(jié)果右移,及ADRESH寄存器的高6位為"0"
//把RA0口設(shè)置為模擬量輸入方式
ADIE=1; //A/D轉(zhuǎn)換中斷允許
PEIE=1; //外圍中斷允許
TRISA0=1; //設(shè)置RA0為輸入方式
}
//系統(tǒng)其它初始化子程序
voidinitial()
{
CCP2IE=0; //禁止CCP中斷
SSPIE=0; //禁止SSP中斷
CCP2CON=0X0B; //初始化CCP2CON,CCP2為特別事件觸發(fā)方式
CCPR2H=0X01;
CCPR2L=0XF4; //初始化CCPR2寄存器,設(shè)置采樣間隔500μs,
//一個(gè)周期內(nèi)電壓采40個(gè)點(diǎn)
}
//中斷服務(wù)程序
voidinterruptadint(void)
{
CCP2IF=0;
ADIF=0; //清除
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出口合同范本格式
- Unit 7 Be Wise with Money Period 3 Grammar 教學(xué)設(shè)計(jì) 2024-2025學(xué)年譯林版(2024)七年級(jí)英語(yǔ)上冊(cè)
- 勞務(wù)發(fā)包合同范本
- 動(dòng)物投放景區(qū)合同范本
- 農(nóng)村菜田出租合同范本
- 出租養(yǎng)殖雞場(chǎng)合同范本
- 加工定制窗簾合同范本
- 保潔商場(chǎng)合同范本
- 包地收款合同范本
- 勞務(wù)中介代理招聘合同范本
- 2025年個(gè)體戶合伙投資協(xié)議(三篇)
- 14磁極與方向(教學(xué)設(shè)計(jì))-二年級(jí)科學(xué)下冊(cè)(教科版)
- 2025年山西經(jīng)貿(mào)職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 廣東省佛山市禪城區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末考試語(yǔ)文試題(含答案)
- 第04課 輸入輸出與計(jì)算(說(shuō)課稿)2024-2025學(xué)年六年級(jí)上冊(cè)信息技術(shù)人教版
- 部編五下語(yǔ)文教學(xué)多元評(píng)價(jià)方案
- 2024年09月江蘇2024年蘇州金融租賃校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 《榜樣9》觀后感心得體會(huì)二
- 重慶市2024-205學(xué)年秋高二(上)期末考試歷史試卷(含答案)康德卷
- 廣西柳州市2025屆高三第二次模擬考試政治試題含答案
- 設(shè)備維修績(jī)效考核方案
評(píng)論
0/150
提交評(píng)論