PIC16F1938單片機(jī)編程樣例_第1頁
PIC16F1938單片機(jī)編程樣例_第2頁
PIC16F1938單片機(jī)編程樣例_第3頁
PIC16F1938單片機(jī)編程樣例_第4頁
PIC16F1938單片機(jī)編程樣例_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論