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

📄 can

📁 can通信源码
💻
字号:
C51 COMPILER V8.02   CAN_SHOW                                                              04/21/2009 13:52:57 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          #include <reg52.h>
   3          #include <intrins.h>
   4          #include <can_showdef.h>
   5          
   6          void CAN_RXD( void ) interrupt 2
   7          {//接收数据函数,在中断服务程序中调用
   8   1      
   9   1          uchar data Judge;
  10   1          EA = 0;//关CPU中断
  11   1          IE0 = 0;
  12   1      
  13   1          Judge = IR;
  14   1          if( Judge & 0x01)
  15   1          {//IR.0 = 1 接收中断
  16   2              RX_buffer[0] =  RBSR;
  17   2              RX_buffer[1] =  RBSR1;
  18   2              RX_buffer[2] =  RBSR2;
  19   2              RX_buffer[3] =  RBSR3;
  20   2              RX_buffer[4] =  RBSR4;
  21   2              RX_buffer[5] =  RBSR5;
  22   2              RX_buffer[6] =  RBSR6;
  23   2              RX_buffer[7] =  RBSR7;
  24   2              RX_buffer[8] =  RBSR8;
  25   2              RX_buffer[9] =  RBSR9;
  26   2              RX_buffer[10] =  RBSR10;
  27   2              RX_buffer[11] =  RBSR11;
  28   2              RX_buffer[12] =  RBSR12;
  29   2              RXD_flag = 1;//置有接收标志
  30   2              CMR = 0X04;
  31   2              Judge = ALC;//释放仲裁随时捕捉寄存器
  32   2              Judge = ECC;//释放错误代码捕捉寄存器
  33   2          }
  34   1          IER = 0x01;// .0=1--接收中断使能;
  35   1          EA = 1;//打开CPU中断
  36   1      }
  37          
  38          //////// 接收处理程序//////////////
  39          void Rxd_deal(void)
  40          {
  41   1          if( RXD_flag )
  42   1          {
  43   2              EA = 0;//关闭CPU中断
  44   2              RXD_flag = 0;
  45   2                      if(RX_buffer[0]==0xc8)
  46   2                      Txd = 4;
  47   2                      CAN_TXD();
  48   2              EA = 1;
  49   2           }
  50   1      }
  51          
  52          
  53          //发送处理函数,主要是准备数据,并且调用发送函数
  54          void Txd_deal(void)
  55          {
C51 COMPILER V8.02   CAN_SHOW                                                              04/21/2009 13:52:57 PAGE 2   

  56   1              CAN_TXD();
  57   1              _nop_();
  58   1              _nop_();
  59   1      }
  60          
  61          
  62          
  63          void CAN_TXD( void )
  64          {
  65   1          uchar data Judge;
  66   1          uchar data TX_buffer[ N_can ] ;
  67   1      
  68   1      //初始化标示码头信息
  69   1          TX_buffer[0] = 0x88;//.7=0扩展帧;.6=0数据帧; .3=1数据长度
  70   1          TX_buffer[1] = 0x01;//本节点地址
  71   1          TX_buffer[2] = 0x02;//
  72   1          TX_buffer[3] = 0x03;//
  73   1          TX_buffer[4] = 0x00;//
  74   1      //初始化标示码头信息
  75   1      
  76   1      //初始化发送数据单元
  77   1          TX_buffer[5]  = Txd;
  78   1          TX_buffer[6]  = 0x22;
  79   1          TX_buffer[7]  = 0x33;
  80   1          TX_buffer[8]  = 0x44;//
  81   1          TX_buffer[9]  = 0x55;//
  82   1          TX_buffer[10] = 0x66;//
  83   1          TX_buffer[11] = 0x77;//
  84   1          TX_buffer[12] = 0x88;//
  85   1      
  86   1      
  87   1      //初始化数据信息
  88   1          EA = 0; //关中断
  89   1          do
  90   1          {
  91   2              Judge = SR;
  92   2              LED_RED = 0;//
  93   2          }
  94   1          while( Judge & 0x10 );  //SR.4=1 正在接收,等待
  95   1          
  96   1          do
  97   1          {
  98   2              Judge = SR;
  99   2              LED_RED = 0;//
 100   2          }
 101   1          while(!(Judge & 0x08)); //SR.3=0,发送请求未处理完,等待
 102   1          
 103   1          do
 104   1          {
 105   2              Judge = SR;
 106   2              LED_RED = 0;//
 107   2          }
 108   1          while(!(Judge & 0x04)); //SR.2=0,发送缓冲器被锁。等待
 109   1      
 110   1          LED_RED = !LED_RED;
 111   1          LED_GRE = !LED_GRE;//灯闪烁
 112   1      
 113   1          TBSR   = TX_buffer[0];
 114   1          TBSR1  = TX_buffer[1];
 115   1          TBSR2  = TX_buffer[2];
 116   1          TBSR3  = TX_buffer[3];
 117   1          TBSR4  = TX_buffer[4];
C51 COMPILER V8.02   CAN_SHOW                                                              04/21/2009 13:52:57 PAGE 3   

 118   1          TBSR5  = TX_buffer[5];
 119   1          TBSR6  = TX_buffer[6];
 120   1          TBSR7  = TX_buffer[7];
 121   1          TBSR8  = TX_buffer[8];
 122   1          TBSR9  = TX_buffer[9];
 123   1          TBSR10 = TX_buffer[10];
 124   1          TBSR11 = TX_buffer[11];
 125   1          TBSR12  = TX_buffer[12];
 126   1      
 127   1          CMR = 0x01;//置位发送请求
 128   1          EA  = 1;
 129   1      
 130   1      }
 131          
 132          void main(void)
 133          {
 134   1      //CPU初始化
 135   1          SJA_RST = 1;//CAN总线复位管脚
 136   1          SJA_CS = 0;//CAN总线片选有效
 137   1          EX1 = 1;
 138   1          IT1 = 0;//CAN总线接收中断
 139   1          IT0 = 1;//外部中断0负边沿触发
 140   1          EX0 = 1;//打开外部中断0
 141   1          EA = 1; //打开总中断
 142   1          SJA_CS = 1;//CAN总线片选无效,保证数据线上的变化不会影响SJA1000
 143   1      //CPU初始化
 144   1      
 145   1          CAN_init(  ); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制

⌨️ 快捷键说明

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