版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
.7/7PIC單片機(jī)編程樣例MCU:PIC16F1938;開發(fā)語言:C語言 開發(fā)工具: 編譯環(huán)境:MPLABIED; C編譯器:HI-TECHPICCCcompiler 編輯軟件:sourceinsight 燒錄工具:MPLABICD2 仿真軟件:Protues 說明:程序已經(jīng)通過編譯并在仿真軟件和硬件平臺上成功跑起來; 目的:對用到PIC16F系列單片機(jī)開發(fā)軟件的群眾提供樣例支持,希望有幫助。Protues仿真圖:1、一些定義typedefvoidVOID;typedefbitBIT;typedefunsignedcharUINT8;typedefintINT16;typedefunsignedintUINT16;typedeflongINT32;typedefunsignedlongUINT32;VOIDdelay<VOID>{ inti=100; while<i-->;}2、EEPROM讀寫/******************************************************************************功 能:從EEPROM中讀取一個(gè)字節(jié)的數(shù)據(jù)原 型:UINT8EEPROM_read<UINT8addr>參數(shù)說明: 輸入?yún)?shù):addr輸入地址 輸出參數(shù):無返 回:讀取的字節(jié)注 意:******************************************************************************/UINT8EEPROM_read<UINT8addr>{ UINT8EE_data; EEADRL=addr; EEPGD=0; CFGS=0; GIE=0;//禁止所有中斷 RD=1; asm<"nop">; EE_data=EEDATL; RD=0; GIE=1;//恢復(fù)所有中斷 returnEE_data;}/******************************************************************************功 能:向EEPROM中寫入一個(gè)字節(jié)的數(shù)據(jù)原 型:VOIDEEPROM_write<UINT8addr,UINT8ee_data>參數(shù)說明: 輸入?yún)?shù):addr輸入地址,ee_data需要寫入的數(shù)據(jù) 輸出參數(shù):無返 回:無注 意:******************************************************************************/VOIDEEPROM_write<UINT8addr,UINT8ee_data>{ EEADRL=addr; EEDATL=ee_data; EEPGD=0; CFGS=0; GIE=0;//禁止所有中斷 WREN=1;//運(yùn)行執(zhí)行編程/擦除操作 EECON2=0x55;//必須按這樣的時(shí)序 EECON2=0xAA; WR=1; while<WR==1>;//等待寫操作完成 GIE=1; WREN=0;//禁止執(zhí)行編程/擦除操作}3、ADC模塊/**ADC模塊的初始化*/staticVOIDADC_init<VOID>{ ADCON0=0b00110001;//選擇AN12通道、ADC使能位 ADCON1=0b11100000;//AD轉(zhuǎn)換結(jié)果右對齊,64分頻作為轉(zhuǎn)換時(shí)鐘,選擇VSS,VDD作為參考電壓 ADIF=0;//清楚AD轉(zhuǎn)換標(biāo)志}staticUINT16throttle=0;staticVOIDAD_Function<VOID>{ UINT8i; UINT16AD_result; UINT16AD_max=0; UINT16AD_min=2000; throttle=0; for<i=0;i<AD_NUM;i++> { ADIF=0; ADRESH=0; ADRESL=0; delay<>; ADCON0|=0x02; while<0==ADIF>;//等待轉(zhuǎn)換完成 ADIF=0; AD_result=ADRESH; AD_result=AD_result<<8; AD_result=AD_result|ADRESL; throttle+=AD_result; AD_max=AD_max>AD_result?AD_max:AD_result; AD_min=AD_min<AD_result?AD_min:AD_result; } throttle=<throttle-AD_max-AD_min>/<AD_NUM-2>;//去掉最大值和最小值,均值濾波}4、定時(shí)器0/**定時(shí)器0初始化*/staticVOIDTimer0_init<VOID>{ OPTION_REG=0b10000100;//禁止所有弱上拉、內(nèi)部指令周期時(shí)鐘32分頻 TMR0=TIMER0_1MS;//定時(shí)器0的中斷間隔為1ms TMR0IE=1;//定時(shí)器0開中斷//總的中斷開關(guān)記得在所有模塊初始化完成后打開}staticUINT8timecount=0;staticBITtime10msflg;staticBITtime1msflg;VOIDinterruptISR<VOID>{ uart_handler<>;//串口通訊接收 /**定時(shí)器0的處理*/ if<1==TMR0IF> { TMR0IF=0;//清零標(biāo)志位 TMR0=TIMER0_1MS;//重新賦值 timecount++; if<timecount>=10> { timecount=0; time10msflg=1; } time1msflg=1; //根據(jù)實(shí)際情況添加自己的代碼 }}5、IO初始化/**IO初始化*/staticVOIDIO_init<VOID>{ /**PORTA*/ ANSELA=0x00;//所有IO為數(shù)字IO TRISA=0x00;//所有IO為output PORTA=0x00;//初始化所有IO輸出電平為低電平 /**PORTB*/ ANSELB=0x03;//RB0和RB1都綁定為同一模擬AD輸入 TRISB=0X03;//RB0和RB1為輸入,其他端口為輸出 PORTB=0x00; /**POTRC*/ PORTC=0xff; LATC=0xff; TRISC=0xC4;//TX和RX引腳都要設(shè)置為1,禁止CCP1引腳輸出驅(qū)動器}6、PWM模塊/**PWM模塊的初始化*/staticVOIDPWMCCP_init<VOID>{ CCP1CON=0b00001100;//單輸出,PWM模式 CCPTMRS0&=0b11111100;//CCP1選擇Timer2作為定時(shí)器 PR2=249;//PWM周期計(jì)算:<PR2+1>*0.0625*4<16Mhz晶振四分頻,即指令周期>*預(yù)分頻值,當(dāng)PR2為249時(shí),PWM頻率為16K T2CON=0x00;//預(yù)分頻為1:1; TMR2ON=1;//使能定時(shí)器Timer2 TRISC2=0;//打開CCP1引腳輸出驅(qū)動器 CCPR1L=0x00;//PWM占空比為0 CCP1CON&=0b11001111;}/******************************************************************************功 能:PWM占空比設(shè)置原 型:VOIDPWM_WidthSet<UINT8width>參數(shù)說明: 輸入?yún)?shù):width占空比的百分比分子,設(shè)置值從0至100,例如width=50時(shí),設(shè)置的占空比為50% 輸出參數(shù):無返 回:無注 意:******************************************************************************/staticVOIDPWM_WidthSet<UINT8width>{ UINT16PWM_width; UINT16tmp; PWM_width=width*10; if<100==width> { //經(jīng)過Protues仿真,100時(shí)至少比1000大于4才可以達(dá)到完全的100 PWM_width+=4; } /**高八位賦值*/ CCPR1L=PWM_width>>2; /**低兩位賦值*/ tmp=PWM_width&0x0003; tmp=tmp<<4; CCP1CON&=0b11001111; CCP1CON|=tmp;}7、串口通訊模塊voiduart_init<void>{ UINT8ii; for<ii=0;ii<_SUB_NUM_;ii++> get_uart_sub[ii]=0xff;RCSTA=0xb0; TXSTA=0x20;//addbylihffortest //TXSTA=0x20; BAUDCONbits.BRG16=0; SPBRGH=0;//8位定時(shí)器BaudRateGenerator SPBRG=_FOSC_/64/_BAUD_-1;//23; TXIE=0;//發(fā)送不需要中斷處理 RCIE=1; PEIE=1;//沒有開全局中斷 }//發(fā)送數(shù)據(jù)staticVOIDUART_sent<UINT8byte>{ //while<0==TXIF> //continue; TXREG=byte; while<0==TRMT> { asm<"nop">; }}//接收在中斷里面調(diào)用uart_handler<>函數(shù)#define_SUB_NUM_50UINT8get_uart_sub[_SUB_NUM_];voiduart_handler<void>{ UINT8i; if<1==RCIF> { RCIF=0; for<i=0;i<_SUB_NUM_-1;i++> get_uart_sub[i]=get_uart_sub[i+1]; get_ua
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度特許經(jīng)營授權(quán)協(xié)議(加盟連鎖)3篇
- 2024年高效節(jié)能電機(jī)產(chǎn)品購銷合同
- 人體工程學(xué)產(chǎn)品研發(fā)投資合同
- 二零二五年度公共綠地景觀綠化改造與養(yǎng)護(hù)管理合同范本3篇
- 2024獼猴桃樹苗新品種研發(fā)與推廣種植合作合同3篇
- 二零二五年度辦公租賃合同樣本:含企業(yè)圖書閱覽室3篇
- 2025年度專利轉(zhuǎn)讓居間服務(wù)合同規(guī)范3篇
- 二零二五年度兒童劇編劇合同范本3篇
- 二零二五年度創(chuàng)新型科技企業(yè)創(chuàng)始股東深度合作協(xié)議書3篇
- 2025年度消防工程維保與消防安全培訓(xùn)及演練合同3篇
- 江西省景德鎮(zhèn)市2023-2024學(xué)年高二上學(xué)期1月期末質(zhì)量檢測數(shù)學(xué)試題 附答案
- 2024年辦公樓衛(wèi)生管理制度模版(3篇)
- 船舶防火與滅火(課件)
- 保險(xiǎn)公司2024年工作總結(jié)(34篇)
- 七、監(jiān)理工作重點(diǎn)、難點(diǎn)分析及對策
- 2024年01月22503學(xué)前兒童健康教育活動指導(dǎo)期末試題答案
- 面膜中藍(lán)銅肽經(jīng)皮滲透性和改善皮膚衰老作用研究
- 湖北省荊州市八縣市2023-2024學(xué)年高一上學(xué)期1月期末考試 化學(xué) 含解析
- 2024年世界職業(yè)院校技能大賽中職組“嬰幼兒保育組”賽項(xiàng)考試題庫-上(單選題)
- 《水文化概論》全套教學(xué)課件
- 期末測評(基礎(chǔ)卷二)-2024-2025學(xué)年一年級上冊數(shù)學(xué)人教版
評論
0/150
提交評論