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

📄 rate3.lst

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


C51 COMPILER V7.06, COMPILATION OF MODULE RATE3
OBJECT MODULE PLACED IN RATE3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RATE3.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 bdata flag_init;
   9          unsigned int  data m=0,n=0,i=0,countnum=0,k1=0,k2=0;
  10          unsigned int  sec_data;
  11          unsigned long subn=0;
  12          unsigned long rate=0;
  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();                                //初始化定时器2
  19   1           Init_Cpu();                               //初始化单片机
  20   1           flag_init=0x00;
  21   1           while(1)
  22   1            {
  23   2             if(rcv_flag)
  24   2             {
  25   3              rcv_flag=0;                            //有接收中断,则单片机进行处理
  26   3              BCAN_DATA_RECEIVE(rcv_data);
  27   3              BCAN_CMD_PRG(0X04);                    //清空缓冲区
  28   3              }
  29   2             if(err_flag)                            //err-flag=1表示错误中断
  30   2             {
  31   3              err_flag=0;
  32   3              Sja_1000_Init();
  33   3              }
  34   2             }
  35   1           }
  36          
  37          void ex0_int(void) interrupt 0 using 1         //外部中断0服务子程序
  38               {
  39   1            SJA_BCANAdr=REG_INTERRUPT;
  40   1            flag_init=*SJA_BCANAdr;                  //查看保存中断源
  41   1            }
  42          
  43          void Int_T0(void) interrupt 1 using 2          //定时器0中断服务子程序
  44               {
  45   1            countnum++;
  46   1      //      sec_data--;
  47   1            if(countnum==70)                         //1s到了吗?
  48   1            {
  49   2      //       sec_data=70;                           //是,则发送处理
  50   2             send_data[0]=0xaa;
  51   2             send_data[1]=0x02;
  52   2             send_data[2]=0x00;
  53   2             send_data[3]=0x00;
  54   2             BCAN_DATA_WRITE(send_data);
  55   2             BCAN_CMD_PRG(0x01);                     //调发送请求
C51 COMPILER V7.06   RATE3                                                                 01/18/2006 10:41:17 PAGE 2   

  56   2             countnum=0;
  57   2                 }
  58   1                TH0=0x00;                                //计数初值为0
  59   1            TL0=0x00;
  60   1            TR0=1;
  61   1            }
  62                
  63          void Int1(void) interrupt 2 using 3            //外部中断1服务子程序
  64               {
  65   1            i++;
  66   1            if(i==1) TR0=1;
  67   1            if(i==11)
  68   1             {
  69   2              TR0=0;
  70   2              m=TH0;
  71   2              n=TL0;
  72   2              subn=countnum*65536+m*256+n;
  73   2              rate=552960000/subn;
  74   2              k1=rate/256;
  75   2              k2=rate%256;
  76   2              send_data[0]=0xaa;
  77   2              send_data[1]=0x02;
  78   2              send_data[2]=k1;
  79   2              send_data[3]=k2;
  80   2              BCAN_DATA_WRITE(send_data);
  81   2              BCAN_CMD_PRG(0x01);                    //调发送请求
  82   2              countnum=0;
  83   2              TH0=0x00;
  84   2              TL0=0x00;
  85   2              i=0;
  86   2              }
  87   1            }                         
  88          
  89          void Init_Cpu(void)                            //开中断
  90               {
  91   1            EA=1;
  92   1            EX0=1;
  93   1            ET0=1;
  94   1            EX1=1;
  95   1            IT1=1;
  96   1            }
  97          
  98          void Init_T0(void)                             //初始化定时器0
  99               {   
 100   1            TMOD=0x01;                               //定时器0,方式1
 101   1            TH0=0x00;                                //计数初值为0
 102   1            TL0=0x00;
 103   1                sec_data=70;
 104   1            }
 105          
 106          void Sja_1000_Init(void)                       //CAN控制器初始化子程序
 107               {
 108   1            BCAN_ENTER_RETMODEL();                   //申请进入复位状态
 109   1            BCAN_SET_BANDRATE(0x0e);                 //设置波特率为1000Kb/s
 110   1            BCAN_SET_OBJECT(0xaa,0xff);              //设置ACR AMR
 111   1            BCAN_SET_OUTCLK(0xaa,0x48);              //设置输出方式禁止clkout
 112   1            BCAN_QUIT_RETMODEL();                    //退出复位状态
 113   1            SJA_BCANAdr=REG_CONTROL;                 //送控制寄存器地址
 114   1            *SJA_BCANAdr|=0x1e;                      //开放错误中断和接收中断
 115   1            }
 116          

C51 COMPILER V7.06   RATE3                                                                 01/18/2006 10:41:17 PAGE 3   


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


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

⌨️ 快捷键说明

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