簡(jiǎn)單使用代碼_第1頁
簡(jiǎn)單使用代碼_第2頁
簡(jiǎn)單使用代碼_第3頁
簡(jiǎn)單使用代碼_第4頁
簡(jiǎn)單使用代碼_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論