亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.lst

?? 微芯公司PIC16F87X單片機(jī)在CAN通信中的應(yīng)用.
?? LST
字號(hào):
     1: // ========CAN通信程序======= 

     2: #include        <pic.h>

     3: #include        <pic1687x.h>

     4: #include        <mcp2510.h>                     // MCP2510寄存器定義 

     5: // =========常數(shù)和變量定義=========  

     6: #define READ    0x03                            // 讀MCP2510指令代碼 

     7: #define WRITE   0x02                    // 寫MCP2510指令代碼 

     8: #define RESET   0xC0                    // 復(fù)位MCP2510指令代碼 

     9: #define RTS     0x80                            // MCP2510請(qǐng)求發(fā)送指令代碼 

    10: #define STA2510 0xA0                    // 讀MCP2510狀態(tài)指令代碼 

    11: #define BITMOD  0x05                    // MCP2510位修改指令代碼 

    12: int     a[12];                                  // SPI發(fā)送或接收數(shù)據(jù)寄存器

    13: int     b[8];                                   // 發(fā)送或接收的數(shù)據(jù)

    14: int     c[8];                                   // 發(fā)送或接收的數(shù)據(jù)

    15: int     i;                                              // 臨時(shí)變量

    16: int     count;                                  // 發(fā)送接收計(jì)數(shù)器

    17: int     count1=0;                               // for test

    18: int     RecID_H=0;

    19: int     RecID_L=0;

    20: int     DLC=8;

    21: void SPIINT();

    22: void TMR1INT();

    23: void CCP1INT();

    24: void SPIEXCHANGE(int count);

    25: void WAIT_SPI();

    26: void RESET2510();

    27: int  RD2510(int adress,int n);

    28: void WR2510(int adress,int n);

    29: void RTS2510(int RTSn);

    30: int  GETS2510();

    31: void BM2510(int adress,int mask,int data);

    32: void SETNORMAL();

    33: void TXCOMPLETE(int adress);

    34: void TXMSG(int DLC);

    35: int  RXMSG();

    36: void INIT2510();

    37: void INIT877();

    38: void INITSPI();

    39: void ACK();

    40: void wait();

    41: // ========主程序======= 

    42: main(void)

    43: {

    44:         int l,detect=0;

    45:         SSPIE=1;

    46:         TMR1IE=1;

    47:         CCP1IE=1;

    48:         CCP2IE=1;

    49:         PEIE=1;

    50:         ei();                                   // 開中斷 

    51:         INIT877();                              // 初始化PIC16F877芯片 

    52:         INITSPI();                              // 初始化SPI接口 

    53:         INIT2510();                             // 初始化MCP2510芯片 

    54:         flag1=0;

    55:         flag2=0;

    56:         CCP1CON=0x05;

    57:         CCP2CON=0x04;

    58:         while(1)        {

    59:                 RXMSG();

    60:                 TXMSG(8);

    61:         }

    62: }

    63: // ========中斷服務(wù)程序======= 

    64: // SPI中斷服務(wù)子程序 

    65: void SPIINT()

    66: {

    67:         SSPIF=0;

    68:         a[i++]=SSPBUF;                  // 數(shù)據(jù)暫存a[]中 

    69:         count-=1;

    70:         if(count>0)  SSPBUF=a[i];// 未發(fā)送完,繼續(xù) 

    71:         else  RE2=1;                            // 否則,片選信號(hào)置高電平 

    72:         return;

    73: }

    74: // TMR1中斷服務(wù)子程序 

    75: void TMR1INT()

    76: {

    77:         TMR1IF=0;

    78:         T1CON=0;

    79:         if(!flag1){

    80:                 TMR1H=0xfe;                             // 512 μs 脈沖寬度

    81:                 TMR1L=0x00;

    82:                 T1CON=0x01;

    83:                 PORTD=0xff;                             // 輸出所有通道

    84:                 flag1=1;

    85:         }

    86:         else    {

    87:                 flag1=0;

    88:                 PORTD=0;

    89:                 T1CON=0;

    90:         }

    91:         return;

    92: }

    93: // CCP1中斷服務(wù)子程序 

    94: void CCP1INT()

    95: {

    96:         CCP1IF=0;

    97:         T1CON=0x01;

    98:         return;

    99: }

   100: // CCP2中斷服務(wù)子程序 

   101:  void CCP2INT()

   102: {

   103:         CCP2IF=0;

   104:         T1CON=0x01;

   105:         return;

   106: }

   107: // 中斷入口,保護(hù)現(xiàn)場(chǎng),判中斷類型 

   108: void interrupt INTS()

   109: {

   110:         di();

   111:         if(TMR1IF)  TMR1INT();          // 定時(shí)器TMR1中斷 

   112:         else if(CCP1IF)  CCP1INT();     // 電壓過零捕捉中斷1 

   113:         else if(CCP2IF)  CCP2INT();     // 電壓過零捕捉中斷2 

   114:         else if(SSPIF)  SPIINT();               // SPI接口中斷 

   115:         ei();

   116: }

   117: // ========子程序======= 

   118: // 啟動(dòng)SPI傳送 

   119:  void SPIEXCHANGE(count)

   120:  int count;

   121: {

   122:         if(count>0) {                           // 有數(shù)據(jù)可送? 

   123:           i=0;

   124:           RE2=0;                                                // 片選位置低電平 

   125:           SSPBUF=a[i];                          // 送數(shù) 

   126:         }

   127:         else

   128:           ;                                                     // 否則,空操作,并返回 

   129:         return;

   130: }

   131: // 等待SPI傳送完成 

   132:  void WAIT_SPI()

   133: {

   134:         do{

   135:           ;

   136:         }while(count>0);                                // 當(dāng)count!=0時(shí),等待 to add "CLRWDT" 

   137:         return;

   138: }

   139: // 對(duì)MCP2510芯片進(jìn)行復(fù)位 

   140: void RESET2510()

   141: {

   142:         a[0]=RESET;

   143:         count=1;

   144:         SPIEXCHANGE(count);                     // 送復(fù)位指令 

   145:         WAIT_SPI();

   146:         return;

   147: }

   148: // 讀取從地址"adress"開始的寄存器中的數(shù)據(jù),共n個(gè),存放在數(shù)組b[n]中 

   149:  int RD2510(adress,n)

   150:  int    adress;

   151:  int            n;

   152: {

   153:         int j;

   154:         a[0]=READ;

   155:         a[1]=adress;

   156:         for(j=0;j<n;j++)  a[j+2]=0;

   157:         count=n+2;                                      // 指令、地址和要得到的數(shù)據(jù)量n 

   158:         SPIEXCHANGE(count);

   159:         WAIT_SPI();

   160:         for(j=0;j<n;j++)  b[j]=a[j+2];// 數(shù)據(jù)存到數(shù)組b[]中 

   161:         return;

   162: }

   163: // 向從地址"adress"開始的寄存器寫入數(shù)據(jù),共n個(gè),數(shù)據(jù)存放數(shù)組b[n]中 

   164:  void WR2510(adress,n)

   165:  int            adress;

   166:  int            n;

   167: {

   168:         int j;

   169:         a[0]=WRITE;

   170:         a[1]=adress;

   171:         for(j=0;j<n;j++) a[j+2]=b[j];

   172:         count=n+2;                                      // 指令、地址和要寫入的數(shù)據(jù)量n 

   173:         SPIEXCHANGE(count);

   174:         WAIT_SPI();

   175:         return;

   176: }

   177: // MCP2510芯片請(qǐng)求發(fā)送程序 

   178:  void RTS2510(RTSn)

   179:  int RTSn;

   180: {

   181:         a[0]=RTS^RTSn;

   182:         count=1;

   183:         SPIEXCHANGE(count);                     // 發(fā)送MCP2510芯片,請(qǐng)求發(fā)送指令 

   184:         WAIT_SPI();

   185:         return;

   186: }

   187: // 讀取MCP2510芯片的狀態(tài) 

   188:  int GETS2510()

   189: {

   190:         a[0]=STA2510;

   191:         a[1]=0;

   192:         count=2;

   193:         SPIEXCHANGE(count);                     // 讀取MCP2510芯片狀態(tài) 

   194:         WAIT_SPI();

   195:         b[0]=a[1];                                      // 狀態(tài)存到數(shù)組b[]中 

   196:         return;

   197: }

   198: // 對(duì)MCP2510芯片進(jìn)行位修改子程序 

   199:  void BM2510(adress,mask,data)

   200:  int  adress;

   201:  int  mask;

   202:  int  data;

   203: {

   204:         a[0]=BITMOD;                                    // 位修改指令 

   205:         a[1]=adress;                                    // 位修改寄存器地址 

   206:         a[2]=mask;                                      // 位修改屏蔽位 

   207:         a[3]=data;                                      // 位修改數(shù)據(jù) 

   208:         count=4;

   209:         SPIEXCHANGE(count);

   210:         WAIT_SPI();

   211:         return;

   212: }

   213: // 設(shè)置MCP2510芯片為正常操作模式 

   214: void  SETNORMAL()

   215: {

   216:         int  k=1;

   217:         BM2510(CANCTRL,0xe0,0x00);      // 設(shè)置為正常操作模式 

   218:         do      {

   219:           RD2510(CANSTAT,1);

   220:           k=b[0]&0xe0;

   221:         }while(k);                                      // 確認(rèn)已進(jìn)入正常操作模式 

   222:         return;

   223: }

   224: // 對(duì)MCP2510進(jìn)行初始化 

   225: void INIT2510()

   226: {

   227:         RESET2510();                                    // 使芯片復(fù)位 

   228:         b[0]=0x02;

   229:         b[1]=0x90;

   230:         b[2]=0x07;

   231:         WR2510(CNF3,3);                         // 波特率為 125 kbps 

   232:         b[0]=0x00;

   233:         b[1]=0x00;

   234:         WR2510(RXM0SIDH,2);

   235:         b[0]=0x00;

   236:         b[1]=0x00;

   237:         WR2510(RXF0SIDH,2);                     // RX0接收,屏蔽位為0,過濾器為0 

   238:         b[0]=0x00;

   239:         WR2510(CANINTE,1);                      // CAN中斷不使能 

   240:         SETNORMAL();                                    // 設(shè)置為正常操作模式 

   241:         return;

   242: }

   243: // MCP2510芯片發(fā)送完成與否判斷,郵箱號(hào)為adress 

   244: void TXCOMPLETE(adress)

   245: int adress;

   246: {

   247:         int k=1;

   248:         do      {

   249:           RD2510(adress,1);

   250:           k=b[0]&0x08;

   251:         }while(k);                                      // 確認(rèn)是否已發(fā)送完畢 to add CLRWDT 

   252:         return;

   253: }

   254: // 初始化PIC16F877芯片 

   255: void INIT877()

   256: {

   257:         PORTA=0;

   258:         PORTB=0;

   259:         PORTC=0;

   260:         PORTD=0;

   261:         PORTE=0;

   262:         TRISA=0xff;

   263:         TRISB=0xfd;

   264:         TRISC=0xd7;                                     // SCK, SDO:輸出,SDI:輸入  

   265:         TRISD=0;

   266:         TRISE=0x03;                                     // 片選CS信號(hào)輸出

   267:         PORTA=0xff;

   268:         PORTB=0x03;                                     // RST=1 

   269:         PORTC=0;

   270:         PORTD=0xff;

   271:         PORTE=0x04;

   272:         return;

   273: }

   274: // 初始化SPI接口 

   275:  void INITSPI()

   276: {

   277:         SSPCON=0x11;

   278:         SSPEN=1;                                                        // SSP使能 

   279:         SSPSTAT=0;

   280:         return;

   281: }

   282: // 發(fā)送數(shù)據(jù)子程序 

   283:  void  TXMSG(int DLC)

   284: {

   285:         for(i=0;i<DLC;i++)  b[i]=c[i];

   286:         WR2510(TXB0D0,DLC);     

   287:         b[0]=DLC;

   288:         WR2510(TXB0DLC,1);

   289:         b[0]=0x03;

   290:         b[1]=RecID_H;

   291:         b[2]=RecID_L;

   292:         WR2510(TXB0CTRL,3);

   293:         RTS2510(0x01);                                  // 請(qǐng)求發(fā)送 

   294:         TXCOMPLETE(TXB0CTRL);                           //等待發(fā)送完畢 

   295:         return;

   296: }

   297: // 接收數(shù)據(jù)子程序 

   298:  int RXMSG()

   299: {

   300:         int k;

   301:         RD2510(CANINTF,1);

   302:         k=b[0]&0x01;

   303:         if(k==1)        { 

   304:         BM2510(CANINTF,0x01,0x00);

   305:                 RD2510(RXB0SIDH,2);

   306:                 RecID_H=b[0];

   307:         RecID_L=b[1]&0xe0;

   308:         RD2510(RXB0DLC,1);

   309:         DLC=b[0]&0x0f;

   310:         RD2510(RXB0D0,DLC);

   311:                 for(i=0;i<DLC;i++) c[i]=b[i];

   312:                 return 1;

   313:         }

   314:         return 0;

   315: }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人欧美一区二区三区1314| 欧美日韩你懂得| 久久一区二区三区四区| 裸体健美xxxx欧美裸体表演| 制服丝袜日韩国产| 捆绑调教一区二区三区| 26uuu久久天堂性欧美| 国产乱人伦精品一区二区在线观看| 日韩精品一区二区三区视频播放| 久久精品免费看| 久久精品男人天堂av| 成人中文字幕在线| 亚洲欧美日韩一区二区 | 日本亚洲欧美天堂免费| 91麻豆精品国产91久久久久| 日韩国产精品久久久久久亚洲| 日韩欧美一级在线播放| 国产剧情一区在线| 综合久久久久综合| 欧美三级中文字| 久久精品国产999大香线蕉| 久久久久久久久久久久久女国产乱| 国产高清亚洲一区| 一区二区三区四区中文字幕| 欧美丰满少妇xxxxx高潮对白 | 久久精品水蜜桃av综合天堂| 国产99久久久久| 亚洲主播在线观看| 精品福利一区二区三区 | 久久久国产一区二区三区四区小说 | 成人美女在线视频| 一区二区三区电影在线播| 欧美日韩另类国产亚洲欧美一级| 久久99精品国产麻豆婷婷| 亚洲欧美另类久久久精品2019| 韩国三级中文字幕hd久久精品| av不卡免费在线观看| 亚洲成人自拍一区| 国产校园另类小说区| 色999日韩国产欧美一区二区| 青青草97国产精品免费观看| 国产日韩精品一区二区三区| 欧美亚州韩日在线看免费版国语版| 蜜桃av一区二区在线观看| 国产精品久久久久影院亚瑟| 欧美一区二区视频在线观看| 成人久久久精品乱码一区二区三区 | 精一区二区三区| 日韩一区在线看| 精品久久久久一区| 欧美亚洲免费在线一区| 欧美日本乱大交xxxxx| 国产成人综合亚洲网站| 日韩电影一区二区三区四区| 国产精品电影院| 精品999久久久| 在线精品观看国产| 成人亚洲一区二区一| 日本亚洲电影天堂| 亚洲一区二区三区小说| 欧美国产日产图区| 久久影视一区二区| 欧美精品日韩精品| 91久久精品一区二区三| 成人精品gif动图一区| 激情小说欧美图片| 蜜桃免费网站一区二区三区 | 亚洲人成人一区二区在线观看| 精品久久久久久久久久久久包黑料| 欧美中文字幕亚洲一区二区va在线| 国产精品一线二线三线精华| 老司机精品视频一区二区三区| 亚洲第一会所有码转帖| 一级做a爱片久久| 亚洲人成7777| 亚洲女爱视频在线| 一区二区中文字幕在线| 欧美国产一区视频在线观看| 久久网站热最新地址| 26uuu久久综合| 久久久久久**毛片大全| 精品免费一区二区三区| 日韩欧美国产电影| 精品精品国产高清a毛片牛牛| 欧美久久高跟鞋激| 欧美日韩三级一区| 中文字幕视频一区二区三区久| 国产偷国产偷精品高清尤物| 久久精品欧美日韩| 国产日韩成人精品| 国产精品色在线观看| 国产精品免费看片| 日韩美女视频19| 亚洲人午夜精品天堂一二香蕉| 中文字幕一区免费在线观看| 成人免费一区二区三区在线观看| 亚洲欧美在线观看| 一区二区不卡在线播放| 天天射综合影视| 看电影不卡的网站| 国产成人免费9x9x人网站视频| 成人精品在线视频观看| 一本一道波多野结衣一区二区| 91极品视觉盛宴| 欧美精品久久99| 精品福利一二区| 国产精品免费视频网站| 亚洲欧美日韩在线| 亚洲电影欧美电影有声小说| 美女视频一区二区三区| 国产成人综合网站| 在线亚洲+欧美+日本专区| 欧美日韩一二三区| 精品国产亚洲在线| 亚洲国产精品成人久久综合一区| 亚洲男人电影天堂| 蜜臀a∨国产成人精品| 国产高清在线精品| 欧美视频日韩视频在线观看| 欧美mv日韩mv亚洲| 亚洲激情自拍偷拍| 免费久久99精品国产| eeuss鲁片一区二区三区在线看| 欧美性受极品xxxx喷水| 久久综合色综合88| 亚洲人成在线观看一区二区| 蜜桃一区二区三区在线| 97se狠狠狠综合亚洲狠狠| 在线成人av网站| 亚洲欧洲日产国码二区| 日本一不卡视频| 一本一本大道香蕉久在线精品| 欧美一区二区精品久久911| 国产精品不卡一区二区三区| 天天av天天翘天天综合网色鬼国产 | 国产一区二区美女| 欧美在线观看你懂的| 久久亚洲一级片| 日韩有码一区二区三区| 成人av影视在线观看| 欧美一区二区福利视频| 亚洲三级在线播放| 国产精品香蕉一区二区三区| 欧美日韩亚洲国产综合| 国产拍欧美日韩视频二区| 日韩在线观看一区二区| 色猫猫国产区一区二在线视频| 久久久噜噜噜久久人人看| 香蕉乱码成人久久天堂爱免费| 成人性生交大片| 久久网这里都是精品| 免费高清在线视频一区·| 91在线精品一区二区| 国产日韩欧美综合一区| 蜜臀va亚洲va欧美va天堂| 欧美日韩一区不卡| 亚洲免费在线电影| 99视频热这里只有精品免费| 欧美精品一区二区三| 强制捆绑调教一区二区| 欧美高清视频在线高清观看mv色露露十八 | 欧美性感一区二区三区| 国产精品久久久久永久免费观看 | 6080国产精品一区二区| 亚洲一区二区欧美激情| 色悠悠久久综合| 1区2区3区欧美| 成人h动漫精品| 国产欧美一区二区精品性色超碰 | 亚洲视频免费在线| 成人亚洲一区二区一| 中文字幕欧美激情| 国产成人午夜精品5599| 久久精品亚洲一区二区三区浴池| 久久国产人妖系列| 日韩欧美亚洲国产精品字幕久久久| 日韩国产精品久久久久久亚洲| 欧美色大人视频| 亚洲va欧美va人人爽| 欧美午夜片在线观看| 亚洲免费在线播放| 国产精品电影院| av电影在线观看完整版一区二区| 欧美激情在线看| 91免费观看视频在线| 亚洲精品综合在线| 欧美在线观看18| 三级精品在线观看| 日韩精品一区二| 风间由美性色一区二区三区| 亚洲欧洲三级电影| 在线观看视频一区二区| 午夜欧美视频在线观看| 日韩一级黄色大片| 国产精品77777| 亚洲麻豆国产自偷在线| 91精品国产全国免费观看| 激情深爱一区二区| 国产精品的网站| 欧美日韩高清在线播放|