⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can

📁 can通信源码
💻
字号:
C51 COMPILER V8.02   CAN_SHOW                                                              04/21/2009 14:16:07 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CAN_SHOW
OBJECT MODULE PLACED IN can_show.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE can_show.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   3          //描述:
   4          //      INT0按键程序+显示程序+CAN收发程序                                      &
   5          //      数码管1-2(从右至左)显示本节点计数结果,数码管3-4显示接收到的数据     &
   6          //      十进制显示                                                             &
   7          //      CAN主要参数:       PeliCAN模式,扩展帧EFF模式                          &
   8          //      29位标示码结构:                                                       &
   9          //      发送数据结构:计数结果,0x02,0x03,0x04,0x05,0x06,0x07,0x08              &
  10          //      接收数据结构: 待显示数据+其它7个字节的数据                             &
  11          //      本节点的地址: 0x11,0x22,0x33,0x00;可以接收全部节点的数据               &
  12          //      目的节点地址:0x01,0x02,0x03,0x00;可以被能接收全部节点数据的节点接收   &
  13          
  14          //提示:如果CAN通讯不正常,会进入一个死循环,显示也不正常
  15          
  16          //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  17          //【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                   &
  18          //【声明】 作者: PIAE小组                                                      &
  19          
  20          #include <reg52.h>
  21          #include <intrins.h>
  22          #include <can_showdef.h>
  23          
  24          void INT0_Counter( void ) interrupt 0 using 1
  25          {//INT0按键为计数按键
  26   1          EA = 0;
  27   1          Txd_data++; //存储计数结果,并为待发送的数据
  28   1              if(Txd_data == 5)
  29   1              TXD_flag = 1;//要发送数据标志位
  30   1          EA = 1;
  31   1      }
  32          
  33          void CAN_RXD( void ) interrupt 2
  34          {//接收数据函数,在中断服务程序中调用
  35   1      
  36   1          uchar data Judge;
  37   1          EA = 0;//关CPU中断
  38   1          IE0 = 0;
  39   1      
  40   1          Judge = IR;
  41   1          if( Judge & 0x01)
  42   1          {//IR.0 = 1 接收中断
  43   2              RX_buffer[0] =  RBSR;
  44   2              RX_buffer[1] =  RBSR1;
  45   2              RX_buffer[2] =  RBSR2;
  46   2              RX_buffer[3] =  RBSR3;
  47   2              RX_buffer[4] =  RBSR4;
  48   2              RX_buffer[5] =  RBSR5;
  49   2              RX_buffer[6] =  RBSR6;
  50   2              RX_buffer[7] =  RBSR7;
  51   2              RX_buffer[8] =  RBSR8;
  52   2              RX_buffer[9] =  RBSR9;
  53   2              RX_buffer[10] =  RBSR10;
  54   2              RX_buffer[11] =  RBSR11;
  55   2              RX_buffer[12] =  RBSR12;
C51 COMPILER V8.02   CAN_SHOW                                                              04/21/2009 14:16:07 PAGE 2   

  56   2              RXD_flag = 1;//置有接收标志
  57   2              CMR = 0X04;
  58   2              Judge = ALC;//释放仲裁随时捕捉寄存器
  59   2              Judge = ECC;//释放错误代码捕捉寄存器
  60   2          }
  61   1          IER = 0x01;// .0=1--接收中断使能;
  62   1          EA = 1;//打开CPU中断
  63   1      }
  64          
  65          void main(void)
  66          {
  67   1      //CPU初始化
  68   1          SJA_RST = 1;//CAN总线复位管脚
  69   1          SJA_CS = 0;//CAN总线片选有效
  70   1          EX1 = 1;
  71   1          IT1 = 0;//CAN总线接收中断
  72   1          IT0 = 1;//外部中断0负边沿触发
  73   1          EX0 = 1;//打开外部中断0
  74   1          EA = 1; //打开总中断
  75   1          SJA_CS = 1;//CAN总线片选无效,保证数据线上的变化不会影响SJA1000
  76   1      //CPU初始化
  77   1      
  78   1          CAN_init(  ); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -