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

📄 testcan.lst

📁 单片机C51环境下的CAN通讯程序
💻 LST
字号:
C51 COMPILER V7.06   TESTCAN                                                               01/17/2006 20:32:17 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE TESTCAN
OBJECT MODULE PLACED IN testcan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE testcan.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<AT89X52.H>                            //加载头文件
   2          #include<SJA_BCANCONF.H>                       //加载变量定义模块
   3          #include"SJA_BCANFUNC.C"                       //加载子程序模块文件
   4          void Init_Cpu(void);
   5          //void Init_T0(void);
   6          void Sja_1000_Init(void);
   7          unsigned char data send_data[10],rcv_data[10]; //定义变量
   8          unsigned char databuf;
   9          unsigned char data  Tmod_data;
  10          unsigned char bdata flag_init=0;
  11          bit  flag_sec;
  12          sbit rcv_flag=flag_init^0;
  13          sbit err_flag=flag_init^2;
  14          void main(void)
  15              {
  16   1           Sja_1000_Init();                          //初始化CAN控制器SJA1000
  17   1      //     Init_T0();                                //初始化定时器0
  18   1           Init_Cpu();                               //初始化单片机
  19   1           while(1)
  20   1            {  
  21   2             if(rcv_flag)
  22   2            {
  23   3             rcv_flag=0;                             //有接收中断,则单片机进行处理
  24   3             BCAN_DATA_RECEIVE(rcv_data);
  25   3             BCAN_CMD_PRG(0x04);                     //清空缓冲区
  26   3             }
  27   2             if(rcv_data[2]==0x11)
  28   2                 {
  29   3                  P1_7=1;
  30   3                      }
  31   2                 else if(rcv_data[2]==0xff)
  32   2                 {
  33   3                  P1_7=0;
  34   3                      }
  35   2                 if(err_flag)                            //有总线错误
  36   2            {
  37   3             err_flag=0;                             //处理
  38   3             Sja_1000_Init();
  39   3             }
  40   2             }                    
  41   1           }
  42           
  43          void ex0_int(void) interrupt 0 using 1         //外部中断0服务子程序
  44               {
  45   1            SJA_BCANAdr=REG_INTERRUPT;
  46   1            flag_init=*SJA_BCANAdr;                  //查看保存中断源
  47   1            }
  48          
  49          /*void T0_int(void) interrupt 1 using 2          //定时器0中断服务程序
  50               {
  51                TR0=0;                                   //0.1ms时间到则停止计数
  52                if(P1_7==1)                              //红外传感器接通则发送“11”
  53                {
  54                 send_data[0]=0xaa;                              
  55                 send_data[1]=0x01;
C51 COMPILER V7.06   TESTCAN                                                               01/17/2006 20:32:17 PAGE 2   

  56                 send_data[2]=0x11;
  57                 BCAN_DATA_WRITE(send_data);
  58                 BCAN_CMD_PRG(0x01);                     //调发送请求
  59                 }
  60                else                                     //红外传感器被遮断则发送“ff”
  61                {
  62                 send_data[0]=0xaa;                              
  63                 send_data[1]=0x01;
  64                 send_data[2]=0xff;
  65                 BCAN_DATA_WRITE(send_data);
  66                 BCAN_CMD_PRG(0x01);                     //调发送请求
  67                 }
  68                TH0=0xa4;
  69                TL0=0xa4;
  70                TR0=1;
  71               }                                */                             
  72          
  73          void Init_Cpu(void)                            //CPU初始化程序
  74               {
  75   1            PX0=1;                                   //设置中断优先级并开中断
  76   1            IT0=1;
  77   1            IT1=1;
  78   1            EX0=1;
  79   1            ET0=1;
  80   1            ET1=1;
  81   1            EA=1;
  82   1            }
  83          
  84          /*void Init_T0(void)                             //初始化定时器0
  85               {
  86                Tmod_data=TMOD;
  87                Tmod_data&=0xf0;
  88                Tmod_data|=0x02;
  89                TMOD=Tmod_data;
  90                TH0=0xa4;
  91                TL0=0xa4;
  92                TR0=1;
  93                }                 */
  94          
  95          void Sja_1000_Init(void)                       //CAN控制器初始化子程序
  96               {
  97   1            BCAN_ENTER_RETMODEL();                   //申请进入复位状态
  98   1            BCAN_SET_BANDRATE(0x0e);                 //设置波特率为100Kb/s
  99   1            BCAN_SET_OBJECT(0xaa,0xff);              //设置ACR AMR
 100   1            BCAN_SET_OUTCLK(0xaa,0x48);              //设置输出方式禁止clkout
 101   1            BCAN_QUIT_RETMODEL();
 102   1            SJA_BCANAdr=REG_CONTROL;                 //开放错误中断、接收和发送中断
 103   1            *SJA_BCANAdr|=0x1e;
 104   1            }
 105          
 106          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    577    ----
   CONSTANT SIZE    =     30    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.

C51 COMPILER V7.06   TESTCAN                                                               01/17/2006 20:32:17 PAGE 3   


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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