久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1649|回復: 3
打印 上一主題 下一主題
收起左側

PIC單片機:為什么寫的程序光跑飛啊,新手一枚

[復制鏈接]
跳轉到指定樓層
樓主
ID:1013883 發表于 2022-4-15 12:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序通電我設置一個燈亮A,進入主函數后,CAN發送成功或者失敗對應的燈會亮,但是我只通電不進行任何操作,A燈一直在那里閃,那不就是跑飛了嗎?我禁止看門狗了呀!好困惑

  1. #include  "p18f458.h"
  2. unsigned int i;
  3. unsigned char j;

  4. int  CAN_FLAG;   //定義標志寄存器、


  5. //************初始化子程序***********//


  6. void initcan()
  7. {
  8.         
  9.         TRISA=0x20;/*RA5設置為輸入,RA0-RA3端口設置為輸出(1入,0出)*/
  10.         TRISC=0xFF;/*RC0-RC3端口設置為輸入,全為輸入*/
  11.     TRISB=0x08;//把CANRX/RB3設置為輸入,CANTX/RB2設置為輸出
  12.     CANCON=0x80;            //請求進入CAN配置模式REQOP=100
  13.     while(CANSTAT&0x80==0){;}//等待進入CAN配置模式OPMODE=100,CANSTA&1000 0000,只有第八位為1才不為0,該寄存器只有100配置方式為1,
  14.                            //所以程序進入其他值時一直在循環空語句等待配置方式進入
  15. //以下為波特率的設定
  16.     BRGCON1=0x01;                       
  17.     BRGCON2=0x90;
  18.     BRGCON3=0x42;
  19. //設置發送郵箱0標識符號和發送數據
  20.     CIOCON=0x00; //CAN輸入輸出控制寄存器
  21.     TXERRCNT=0x00;//初始化發送錯誤計數寄存器
  22.     TXB0CON=0x03;//發送優先級為最高優先級,TXPRI=11
  23.     TXB0SIDH=0xFF;//設置“發送"緩沖器0的標準標識符,設置標準標識符高字節寄存器 ,擴展標識符位EID28:EID21   
  24.     TXB0SIDL=0xE0;//設置標準標識符低字節寄存器,擴展標識符位EID20:EID18  
  25.     TXB0DLC=0x08;//設置數據長度為8個字節
  26.     TXB0D0=0x00;
  27.     TXB0D1=0x01;
  28.     TXB0D2=0x02;     
  29.     TXB0D3=0x03;
  30.     TXB0D4=0x04;
  31.     TXB0D5=0x05;
  32.     TXB0D6=0x06;
  33.     TXB0D7=0x07;
  34. //設置接收郵箱0的標識符和初始化數據
  35.     RXB0SIDH=0xFF;//設置"接收"緩沖器0的標準標識符,擴展標識符位EID28:EID21
  36.     RXB0SIDL=0xE0;//擴展標識符位EID20:EID18  
  37.     RXB0CON=0x20;//僅接收標準標識符有效的信息,bit=0表示RXBO采用過濾器0
  38.     RXB0DLC=0x08;//設置數據長度為8個字節
  39.     RXB0D0=0x00;
  40.     RXB0D1=0x00;
  41.     RXB0D2=0x00;
  42.     RXB0D3=0x00;
  43.     RXB0D4=0x00;
  44.     RXB0D5=0x00;
  45.     RXB0D6=0x00;
  46.     RXB0D7=0x00;
  47. //初始化接收過濾器0和接收屏蔽
  48.     RXF0SIDH=0xFF;//設置"接收"過濾器0的標準標識符,擴展標識符"過濾位"EID28:EID21  
  49.     RXF0SIDL=0xE0;//擴展標識符“過濾位”EID20:EID18  
  50.     RXM0SIDH=0x00;//設置"接收"屏蔽器0的標準標識符
  51.     RXM0SIDL=0x00;
  52. //CAN進入相應的工作模式
  53.     CANCON=0x00;//=0x40為進入自測試模式;0x00為進入正常操作模式。
  54.     while(CANSTAT&0xE0){;}//等待進入CAN正常模式OPMODE=000,CANSTA&1110 0000,
  55.                           //只有第6.7.8位為0(000為CAN正常模式)才能不滿足括號內條件,
  56.                           //從而跳出循環,反之則等待。
  57. //初始化CAN中斷
  58.     PIR3=0x00;//清除所有中斷
  59.     PIE3=0x01;//使能接收緩沖器0的接收中斷
  60.     IPR3=0x01;//接收緩沖器0的接收中斷為最高優先級。   
  61. }


  62. //************接收緩沖器0接收中斷服務程序**************

  63. #pragma interrupt can_isr
  64. #pragma code low_ISR=0x18
  65. void low_ISR()
  66. {
  67.      _asm
  68.      goto can_isr
  69.      _endasm
  70. }
  71. #pragma code
  72. void can_isr()
  73. {
  74.         if(PIR3bits.RXB0IF==1) CAN_FLAG=1;
  75.         PIR3bits.RXB0IF=0;//清除接收中斷標志
  76.         RXB0CONbits.RXFUL=0;//打開接收緩沖器來接收信息
  77. }

  78. //********延時程序********
  79. void DELAY()
  80. {
  81.         for(i=65000;i>1;i--);
  82.       {  
  83.         for(j=650;j>1;j--);
  84.        }
  85. }


  86.      //********主程序********

  87. void main (void)
  88. {
  89.         INTCON=0x00;//禁止所有中斷
  90.         initcan();//初始化
  91.         WDTCON=0;//=1看門狗使能,=0禁止看門狗
  92.         INTCON=0xc0;//使能中斷
  93.         PORTA=0xF4;//點亮第一個LED//
  94.         DELAY();
  95.         PORTA=0xFF;//關閉LED //
  96.       
  97.         while(1)
  98.         {
  99.             //*********CAN發送********//        
  100.                 TXB0CONbits.TXREQ=1;  //請求發送,TXREQ=1,發送終止位/發送丟失仲裁狀態位/發送錯誤檢測狀態位都清除
  101.                 while(PIR3bits.TXB0IF!=1)//等待發送完成,TXB0IF緩沖器0完成中斷標志位,只有當該位為1時才完成了信息的發送,可重新裝載
  102.                 {
  103.                      if(COMSTATbits.TXBO)//發送錯誤計數大于255則該位為1
  104.                         {
  105.                                 PORTA=0xF0;/*向PORTA發送數據,點亮兩個LED,說明發送失敗*/
  106.                                 TXB0CONbits.TXABT=1;//中止發送
  107.                                 TXB0CONbits.TXREQ=0;//TXREQ發送請求位置0,因為發送成功后它自動清零,他沒有發送成功,所以要手動清零
  108.                                 TXERRCNT= 0x00;//清除發送錯誤計數器
  109.                                 break;
  110.                         }        
  111.                 }
  112.                      if(PIR3bits.TXB0IF=1)//說明緩沖器0完成了信息的發送//
  113.                      {
  114.                           PORTA=0xF4;/*向PORTA發送數據,點亮RA3控制的第一個LED,說明CAN發送成功*/   
  115.                      }
  116.               //********CAN接收********//
  117.                 while(CAN_FLAG==0)//等待接收數據
  118.                         {
  119.                                 if(COMSTATbits.RXBP)//接收器總線錯誤過半位=1則為(接收錯誤計數>127)
  120.                                 {
  121.                                         PORTA=0xF4;//點亮第一個LED//
  122.                                         DELAY();
  123.                                         PORTA=0xFF;//關閉LED //
  124.                                         PORTA=0xF8;//點亮第二個LED //
  125.                                         DELAY();
  126.                                         PORTA=0xFF;//關閉LED //
  127.                                         PORTA=0xF0;//點亮兩個LED,說明接收失敗 //
  128.                                         TXERRCNT= 0x00;//清除發送錯誤計數器
  129.                                         break;        
  130.                                 }        
  131.                         }
  132.                 if(PIR3bits.TXB0IF=1)//說明緩沖器0完成了信息的發送//
  133.                      {
  134.                           PORTA=0xF8;/*點亮RA3控制的第2個LED,說明CAN接收成功*/
  135.                          }     
  136.                 CAN_FLAG=0;                 //清除接收到的標志
  137.                 TXB0CONbits.TXREQ=0;        //禁止發送
  138.                 TXB0D0=RXB0D0+1;
  139.                 TXB0D1=RXB0D1+1;
  140.                 TXB0D2=RXB0D2+1;
  141.                 TXB0D3=RXB0D3+1;
  142.                 TXB0D4=RXB0D4+1;
  143.                 TXB0D5=RXB0D5+1;
  144.                 TXB0D6=RXB0D6+1;
  145.                 TXB0D7=RXB0D7+1;
  146.                
  147.         }
  148.         
  149.         
  150.         
  151.         
  152.         
  153. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:301191 發表于 2022-4-16 04:50 | 只看該作者
頂一下
回復

使用道具 舉報

板凳
ID:401564 發表于 2022-4-16 15:23 | 只看該作者
1,在這用PIC單片機的人少
2,會PIC又會CAN的就更少了
回復

使用道具 舉報

地板
ID:1013883 發表于 2022-4-18 16:36 | 只看該作者
Y_G_G 發表于 2022-4-16 15:23
1,在這用PIC單片機的人少
2,會PIC又會CAN的就更少了

哎呀呀,困擾好久了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本二区在线观看 | 91资源在线观看 | 久久中文免费视频 | 性视频网| av片在线播放 | 国产一区二区黑人欧美xxxx | 99re视频在线免费观看 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 一区在线播放 | 夜夜精品视频 | 国产成人久久久 | 自拍视频精品 | 99爱国产| 国产电影精品久久 | 亚洲视频在线播放 | 日韩中文字幕av | 精品一区国产 | 中文字幕在线免费 | 老外黄色一级片 | 一区二区三区视频在线观看 | 国产免费a | 成人av一区 | 日本视频在线播放 | 成人精品视频免费 | 国产精品一区一区 | 欧美日韩在线综合 | 国产精品久久久久久久久久 | 一区二区三区中文 | 久久亚洲欧美日韩精品专区 | 久久精品欧美电影 | 久热久热 | 欧美精品乱码久久久久久按摩 | 成人高清在线视频 | 亚洲成人午夜电影 | 瑞克和莫蒂第五季在线观看 | 国产精品福利在线 | 国产成人精品网站 | 欧美free性| 国产性生活一级片 | 激情免费视频 | 大学生a级毛片免费视频 |