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

📄 testcan.lst

📁 单片机C51环境下的CAN通讯程序
💻 LST
字号:
C51 COMPILER V7.06   TESTCAN                                                               01/18/2006 10:07:05 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          unsigned int sec_data;
  12          bit  flag_sec;
  13          sbit rcv_flag=flag_init^0;
  14          sbit err_flag=flag_init^2;
  15          void main(void)
  16              {
  17   1           Sja_1000_Init();                          //初始化CAN控制器SJA1000
  18   1           Init_T0();                                //初始化定时器0
  19   1           Init_Cpu();                               //初始化单片机
  20   1           while(1)
  21   1            {  
  22   2             if(rcv_flag)
  23   2            {
  24   3             rcv_flag=0;                             //有接收中断,则单片机进行处理
  25   3             BCAN_DATA_RECEIVE(rcv_data);
  26   3             BCAN_CMD_PRG(0X04);                     //清空缓冲区
  27   3             }
  28   2             if(err_flag)                            //有总线错误
  29   2            {
  30   3             err_flag=0;                             //处理
  31   3             Sja_1000_Init();
  32   3             }
  33   2             }                    
  34   1           }
  35           
  36          void ex0_int(void) interrupt 0 using 1         //外部中断0服务子程序
  37               {
  38   1            SJA_BCANAdr=REG_INTERRUPT;
  39   1            flag_init=*SJA_BCANAdr;                  //查看保存中断源
  40   1            }
  41          
  42          void T0_int(void) interrupt 1 using 2          //定时器0中断服务程序
  43               {
  44   1            sec_data--;
  45   1                TR0=0;                                   //50ms时间到则停止计数
  46   1            if(sec_data==0&&P1_7==1)                 //红外传感器接通则发送“11”
  47   1            {
  48   2             send_data[0]=0xaa;                              
  49   2             send_data[1]=0x01;
  50   2             send_data[2]=0x11;
  51   2             BCAN_DATA_WRITE(send_data);
  52   2             BCAN_CMD_PRG(0x01);                     //调发送请求
  53   2             sec_data=10;
  54   2                 }
  55   1            else if(sec_data==0&&P1_7==0)            //红外传感器被遮断则发送“ff”
C51 COMPILER V7.06   TESTCAN                                                               01/18/2006 10:07:05 PAGE 2   

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


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


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

⌨️ 快捷键说明

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