版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、12f683簡(jiǎn)單使用代碼嵌入式設(shè)計(jì) 2009-02-25 15:32 閱讀124 評(píng)論0 字號(hào): 大大 中中 小小 /12f683#include<pic.h> _CONFIG(0x3004);#define AD_A_ID 0#define ZERO_ID 1#define
2、HZ_ID 2#define TEMP_ID 3#define IO_O_K GPIO4#define IO_O_LED GPIO5void START_IO(); /I/O口設(shè)置函數(shù)void START_RAM(); /申
3、明RAM口設(shè)置函數(shù)void START_TMR(); /申明定時(shí)器設(shè)置函數(shù)void AD(unsigned char i); /AD轉(zhuǎn)換void JM(); /解碼unsigned char EEPROM_read(unsigned char Address);/讀取指定地址上的數(shù)據(jù)void EEPROM_write(unsigned char Address,unsigned char Data);/寫指定地址上的數(shù)據(jù)&
4、#160;/bank0bit KEY_10MS_IF; /10MS的鍵盤的掃描的溢出標(biāo)記bit KEY_500MS_IF; /500
5、MS的鍵盤的掃描的溢出標(biāo)記bit KEY_XS_IF; /XS的鍵盤的掃描的溢出標(biāo)記bit d1ms_IF;
6、 /bit d10ms_IF; /bit d100ms_IF;
7、; /bit d500ms_IF; /bit d1s_IF;
8、; /bit d100ms_SW_IF; /檢測(cè)電機(jī)的時(shí)間到了bit K_NO_OFF_IF;bit SS_LED_IF; /LED的閃爍開關(guān) bit SS_LED2_100ms_IF; /因?yàn)槭?/p>
9、閃爍標(biāo)記所以是要取反的bit SS_LED1_500ms_IF; /MOVLW B'00000100' XORWF RAM_SS_IF,F bit SS_LED2_500ms_IF; /MOVLW B'00001000' XORWF RAM_SS_IF,F bit SS_LED1_1s_IF; /MOVLW B'00010000'
10、 XORWF RAM_SS_IF,F bit SS_LED2_Speed_IF; /LED的閃爍的速度是否開啟 bit T2_CCP1_IF; /bit T2_CCP1_IE; / unsigned char d1ms; /1msunsigned char d10ms;
11、 /10msunsigned char d100ms; /100msunsigned char d500ms; /500msunsigned char d1s; /1sunsigned char d_LED1; /數(shù)碼管閃爍unsigned char d_LED2; /LED閃爍unsigned char d_key;unsigned
12、 char d_Heat; /加熱時(shí)間unsigned char d_SW_S; /電機(jī)轉(zhuǎn)了的時(shí)間(超過15秒:說明電機(jī)運(yùn)行異常)unsigned char d_SW; /產(chǎn)生PWM波形unsigned char d_SW_Turn; /電機(jī)堵轉(zhuǎn)時(shí)間unsigned char d_Heat_PID; /PID是比例,積分,微分的縮寫. unsigned char key
13、_temp_xs; /xS后的端口的異或保存unsigned char key_temp_10ms; /10MS后的端口的保存,用來判斷端口是否被改變unsigned char key_temp; /鍵盤的臨時(shí)存放unsigned char LED_I; /LED兩數(shù)碼管的位unsigned char LED_D3; /兩數(shù)碼管的數(shù)據(jù)unsigned char LED_temp;unsigned cha
14、r DATA_I;unsigned char DATA_D8; unsigned char AD_D; unsigned char CCP1_I;unsigned char CCP1_t;unsigned char CCP1_tH;unsigned char CCP1_tL;unsigned char CSR; /保存了幾個(gè)低電平脈沖;從而判斷有沒有碰到障礙物unsigned char FM_S; /蜂鳴器警報(bào)次數(shù) unsigned ch
15、ar EEPROM_A;unsigned char EEPROM_D;unsigned char PIC_IP;unsigned char temp; /臨時(shí)變量unsigned char j; /臨時(shí)變量unsigned int t;const unsigned char TAB_LED=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0x40,0x79,0x24,0
16、x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e; /定義常數(shù)0-F的數(shù)據(jù)表格const unsigned char TAB_TEMP=69,71,73,75,78,80,82,84,86,89,91,93,95,98,100,102,104,107,109,111,114,116,118,121,123,125,127,130,132,134,136,138; /溫度表
17、160; /40攝氏度-70攝氏度/-/主程序void main() /看門狗是一個(gè)自己擁有獨(dú)立的RC時(shí)鐘信號(hào)的,計(jì)時(shí)周期約為18ms的,自由運(yùn)行的計(jì)時(shí)器. /OPTION=0X0F; /1:128->2304ms /OPTION=0X0E
18、; /1:64->1152ms /OPTION=0X0D; /1:32->576ms /OPTION=0X0C; /1:16->228ms OPTION=0X0B; /1:8->144ms /OPTION=0
19、X0A; /1:4->72ms /OPTION=0X09; /1:2->36ms /OPTION=0X08; /1:1->18ms/3s延時(shí) asm("CLRWDT");
20、60; /wdt清0(喂狗) START_IO(); /調(diào)用I/O口設(shè)置函數(shù) START_RAM();
21、160; /調(diào)用RAM清0 START_TMR(); /調(diào)用定時(shí)器設(shè)置函數(shù) asm("CLRWDT");
22、 /wdt清0(喂狗) PIC_IP=1; while(1) /1ms if(!d1ms_IF)continue; /返回到while(); d1m
23、s_IF=0; /10ms if(!d10ms_IF)continue; /返回到while(); d10ms_IF=0; asm("CLRWDT"); /
24、wdt清0(喂狗) /100ms if(!d100ms_IF)continue; /返回到while(); d100ms_IF=0; if(SS_LED_IF) /溫度過高時(shí)閃爍 IO_O_LED=!IO_O_LED; /1s if(!d1s_
25、IF)continue; /返回到while(); d1s_IF=0; AD(0); /散熱片前后溫度差8度 /if(AD_D>215|AD_D<10)/(>85度,<-25度)+8 /if(AD_D>160|AD_D<10)
26、/(>53度,<-25度)+8 if(AD_D>193|AD_D<10)/(>70度,<-25度)+8 K_NO_OFF_IF=0; SS_LED_IF=1; IO_O_K=K_NO_OFF_IF; /-/解碼v
27、oid JM() unsigned char i; for(i=0;i<4;i+) /數(shù)據(jù)校對(duì) temp=DATA_Di+4; if(DATA_Di!=temp)return; if(PIC_IP!=DATA_D0)return;/目標(biāo)IP temp=DATA_D1; switch(temp) case 'S': PIC_IP=DATA_D2; break
28、; case 'O': IO_O_LED=0; K_NO_OFF_IF=1; break; case 'C': IO_O_LED=1; K_NO_OFF_IF=0; break; default: break; /-/AD轉(zhuǎn)換void AD(unsigned char i)/系統(tǒng)時(shí)鐘Fosc/32/*
29、160;switch(i) case 0: temp=0B10000001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; case 1:
30、0; temp=0B10001001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; case 2: temp=0B10010001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON
31、; break; case 3: temp=0B10011001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; case 4:
32、0; temp=0B10100001;/ADCS1,ADCS0,CHS2,CHS1, CHS0,GO,-,ADON break; default: return;
33、60; /返回 */ /12F683 switch(i) case 0: temp=0B00000001;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break; case 1: &
34、#160; temp=0B00000101;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break; case 2: temp=0B00001001;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break;
35、; case 3: temp=0B00001101;/ADFM VCFG CHS1 CHS0 GO/DONE ADON break; case 4: temp=0B00010001;/ADFM VCFG CHS1 CHS0 GO
36、/DONE ADON break; default: return; /返回 t=0; for(j=0;j<8;j+)
37、 /AD轉(zhuǎn)換取8次 ADCON0=temp; for(i=0;i<40;i+); /為AD轉(zhuǎn)換采樣滿足足夠的時(shí)間(50攝氏度,19.72us) /ADGO=0X1;
38、 /開啟AD轉(zhuǎn)換過程(注意:開啟轉(zhuǎn)換不能與啟用轉(zhuǎn)換同時(shí)打開) /while(ADGO); /等待轉(zhuǎn)換完成 ADCON0=ADCON0|0x2; /開啟AD轉(zhuǎn)換過程(注意:開啟轉(zhuǎn)換不能與啟用轉(zhuǎn)換同時(shí)打開) while(ADC
39、ON0&2); /等待轉(zhuǎn)換完成 t+=ADRESH; AD_D=t>>3; /-/中斷處理void interrupt INT1(void) / if(CCP1IF) CCP1IF=0; /CCP1_tH=TMR1H;
40、; /CCP1_tL=TMR1L; CCP1_tH=CCPR1H; CCP1_tL=CCPR1L; TMR1H=0; TMR1L=0; /GPIO5=!GPIO5; if(T2_CCP1_IF) if(CCP1_tH>0x13)/>2.5ms錯(cuò)誤數(shù)據(jù) T2_CCP1_IF=0;
41、160; T2_CCP1_IE=0; if(CCP1_tH<0x03)/<0.5ms錯(cuò)誤數(shù)據(jù) T2_CCP1_IF=0; T2_CCP1_IE=0; CCP1_I+; LED_temp=LED_temp<<1; if(CCP1_t
42、H>0x0B)/1.5ms-2.5ms數(shù)據(jù)1 LED_temp+; /要保存每一個(gè)脈沖,以免數(shù)據(jù)不正常(如:數(shù)據(jù)只能正確接收第一個(gè)) if(CCP1_I>7) CCP1_I=0; DATA_DDATA_I=LED_temp; LED_temp=0; DA
43、TA_I+; if(DATA_I>7) T2_CCP1_IF=0; T2_CCP1_IE=0; JM(); else if(T2_CCP1
44、_IE) if(CCP1_tH>0x1B&&CCP1_tH<0x32)/3.5ms-6.5ms開始標(biāo)記 T2_CCP1_IF=1; CCP1_I=0; LED_temp=0; DATA_I=0;
45、160; else T2_CCP1_IE=0; else T2_CCP1_IE=1; if(TMR2IE&&TMR2IF) PIR1=0;
46、 /清標(biāo)記 TMR2IF=0; /1ms處理區(qū) d1ms+; d_Heat+;
47、60; /加熱時(shí)間 d1ms_IF=1; if(d1ms<10)return; /返回 /10ms處理區(qū)
48、 d1ms=0; d10ms+; d10ms_IF=1; if(d10ms<10)return; /返回 /100ms處理區(qū)
49、 d10ms=0; d100ms+; d100ms_IF=1; / SS_LED2_100ms_I
50、F=!SS_LED2_100ms_IF; if(d100ms<5)return; /返回 /500ms d100ms=0; d500ms+; d500ms_IF=1;
51、 / SS_LED1_500ms_IF=!SS_LED1_500ms_IF; SS_LED2_500ms_IF=!SS_LED2_500ms_IF; if(d500ms<2)return; /返回
52、0; /1s處理區(qū) d500ms=0; d1s+;
53、60; d_key+; d1s_IF=1; if(d1s<60)return; /返回 /1min處理區(qū) d1s=0;
54、160;/-/初始化/-/I/O口設(shè)置函數(shù)void START_IO() TRISIO=0X05; GPIO=0x00; ANSEL=0B01110001; /OSFIE=1;/開啟振蕩器故障中斷 IRCF0=1;/從默認(rèn)的4MHZ到8MHZ /-/申明RAM口設(shè)置函數(shù)void START_RAM() #asm CLRF _STATUS /體0 MOVLW 0X20
55、0; MOVWF _FSRSTART_RAM_NEXT CLRF 0 INCF _FSR,F MOVLW 0X7F XORWF _FSR,W BTFSS _STATUS,2 GOTO START_RAM_NEXT #endasm /-/申明定時(shí)器設(shè)置函數(shù)void START_TMR()/ SPBRG=0XC;
56、60; /4MHZ設(shè)置波特率為19200BPS/ SPBRG=71; /11.0592MHZ設(shè)置波特率為96
57、00BPS / SPBRG=35; /11.0592MHZ設(shè)置波特率為19200BPS / SPBRG=11;
58、; /11.0592MHZ設(shè)置波特率為57600BPS / SPBRG=5; /11
59、.0592MHZ設(shè)置波特率為115200BPS/ TXSTA=0X24; /使能串口發(fā)送,選擇高速波特率/ RCSTA=0X90; &
60、#160; /使能串口工作,連續(xù)接收/ RCIE=0X1; /使能接收中斷 CCP1IE=1; /開啟CCP1中斷 CCP1CON=0B00000100; /-,-
61、,CCP1X,CCP1Y,CCP1M3,CCP1M2,CCP1M1,CCP1M0 TMR1ON=1; /啟用TMR1(關(guān)閉TMR1,使TMR2退出活動(dòng)狀態(tài))/* TMR2=0; /T=(fosc/4)xN1x(PR2+1)xN2 PR2=124; /設(shè)置TMR2的定時(shí)時(shí)間(專用的定時(shí)器) T2CON=0B010
62、01001; /-,TOUTPS3,TOUTPS2,TOUTPS1,TOUTPS0,TMR2ON,T2CKPS1,T2CKPS0*/8MHZ-1000us TMR2=0; /T=(fosc/4)xN1x(PR2+1)xN2 PR2=124; /設(shè)置TMR2的定時(shí)時(shí)間(專用的定時(shí)器) T2CON=0B011110000; /-
63、,TOUTPS3,TOUTPS2,TOUTPS1,TOUTPS0,TMR2ON,T2CKPS1,T2CKPS0 /bit 7 未實(shí)現(xiàn):讀為0 /bit 6-3 TOUTPS<3:0>:Timer2 輸出后分頻比選擇位 /0000 = 1:1 后分頻比
64、0; /0001 = 1:2 后分頻比 /0010 = 1:3 后分頻比 /0011 = 1:4 后分頻比 /0100 = 1:5 后分頻比
65、 /0101 = 1:6 后分頻比 /0110 = 1:7 后分頻比 /0111 = 1:8 后分頻比 /1000 = 1:9
66、后分頻比 /1001 = 1:10 后分頻比 /1010 = 1:11 后分頻比 /1011 = 1:12 后分頻比 /1100
67、 = 1:13 后分頻比 /1101 = 1:14 后分頻比 /1110 = 1:15 后分頻比 /1111 = 1:16 后分頻比 /bi
68、t 2 TMR2ON:Timer2 使能位 /1 = 使能Timer2 /0 = 禁止Timer2 /bit 1-0 T2CKPS<1:0>:Timer2 時(shí)鐘預(yù)分頻比選擇位
69、 /00 = 預(yù)分頻值為1 /01 = 預(yù)分頻值為4 /1x = 預(yù)分頻值為16 TMR2ON=1; /啟用TMR2(關(guān)閉TMR2,降低功耗) TMR2IE=1;
70、60;/開啟TMR2中斷 GIE=0X1; /開放全局中斷 PEIE=0X1; /使能外部中斷/*/- /讀取EEPROM指定地址上
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)建筑施工安全生產(chǎn)管理制度匯編
- 中國(guó)石化安全風(fēng)險(xiǎn)評(píng)估指導(dǎo)意見
- 部編版八年級(jí)《道德與法治》上冊(cè)同步練習(xí)(全冊(cè),含答案)
- 2024年稅務(wù)師題庫(kù)附完整答案【典優(yōu)】
- 農(nóng)村水田合同(2篇)
- 2024年度天津市公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師全真模擬考試試卷A卷含答案
- 2024年度天津市公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師押題練習(xí)試題B卷含答案
- 2024年度四川省公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師通關(guān)題庫(kù)(附答案)
- 2024年度四川省公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師能力測(cè)試試卷A卷附答案
- 中國(guó)環(huán)保膠袋行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2024年加油站的年度工作總結(jié)范文(2篇)
- 甲醇制氫生產(chǎn)裝置計(jì)算書
- T-JSREA 32-2024 電化學(xué)儲(chǔ)能電站消防驗(yàn)收規(guī)范
- 2025年上半年江蘇省常州市文廣旅局下屬事業(yè)單位招聘4人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- 2023-2024學(xué)年福建省泉州市石獅市三年級(jí)(上)期末數(shù)學(xué)試卷
- 新時(shí)代高校馬克思主義學(xué)院內(nèi)涵式發(fā)展的現(xiàn)狀和現(xiàn)實(shí)進(jìn)路
- 銅工崗位安全操作規(guī)程(2篇)
- 擦玻璃安全責(zé)任合同協(xié)議書范本
- 【MOOC】隧道工程-中南大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 紅色經(jīng)典影片與近現(xiàn)代中國(guó)發(fā)展學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 劇作策劃與管理智慧樹知到期末考試答案2024年
評(píng)論
0/150
提交評(píng)論