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

📄 rs232_basiccan.lst

📁 这是一个基于51单片机的can总线转串口的程序
💻 LST
字号:
C51 COMPILER V7.06   RS232_BASICCAN                                                        03/17/2008 09:43:17 PAGE 1   


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

stmt level    source

   1          #include<REG52.H>
   2          #include<SJA_BCANCONF.H>
   3          #include<SJA_BCANFUNC.C>
   4          //************************函数声明*****************************//
   5          void T1_int(void);
   6          void Sja_1000_Init(void);
   7          //************************变量定义*****************************//
   8          unsigned char data  send_data[10],rcv_data[10];     //发送和接收数组定义
   9          unsigned char bdata flag_init;
  10          unsigned char j,k=2;
  11          sbit rcv_flag=flag_init^0;                          //接收中断标志
  12          sbit err_flag=flag_init^2;                          //错误中断标志
  13          bit  send_flag=0;
  14          sbit CAN_RESET=P2^0;
  15          sbit LED1=P3^4;
  16          sbit LED0=P3^5;
  17          void open_close_led(void)
  18          {
  19   1              if(rcv_data[4]==0X02)
  20   1                               {LED0=0;}                              //OPEN THE LIGHT
  21   1          else if(rcv_data[4]==0X03)
  22   1                               {LED0=1;}                           //close the light
  23   1      
  24   1          if(rcv_data[5]==0X02)
  25   1                               {LED1=0;}                              //OPEN THE LIGHT
  26   1          else if(rcv_data[5]==0X03)
  27   1                               {LED1=1;}                           //close the light
  28   1      }
  29          //***********************主函数*******************************//
  30          void main(void)
  31          {   
  32   1          CAN_RESET=0;                                         //SJA1000退出硬件复位模式
  33   1          Sja_1000_Init();                                                            //initialize Sja100
  34   1              T1_int();                                                                               //initialize T1
  35   1              PX0=1;                                          //外部中断0高优先级
  36   1              EX0=1;                                          //外部中断0开放
  37   1              ES=1;                                           //串口中断开放
  38   1              EA=1;                                           //开放全局中断
  39   1              flag_init=0x00;
  40   1              while(1)
  41   1              {
  42   2                      if(rcv_flag)                                                    
  43   2                        {   
  44   3                              rcv_flag=0;
  45   3                              BCAN_DATA_RECEIVE(rcv_data);            //接收数据
  46   3                              BCAN_CMD_PRG(0x04);                     //释放接收缓冲区
  47   3                          ES=0;                                   //串口中断禁止
  48   3                          for(j=2;j<10;j++)                       //发送8组数据到串口
  49   3                               {
  50   4                                SBUF=rcv_data[j];
  51   4                                while(TI==0)
  52   4                                 {}
  53   4                                TI=0;
  54   4                                }
  55   3                   ES=1;                                   //串口中断开放
C51 COMPILER V7.06   RS232_BASICCAN                                                        03/17/2008 09:43:17 PAGE 2   

  56   3                               open_close_led();
  57   3                         }
  58   2                      if(send_flag)                                                   
  59   2                       {
  60   3                              send_flag=0;                                                    
  61   3                              send_data[0]=0xA8;                                          
  62   3                              send_data[1]=0x08;                      //报文ID:540
  63   3                              BCAN_DATA_WRITE(send_data);             //写入数据到缓冲区函数
  64   3                              BCAN_CMD_PRG(0x01);                     //调用发送请求
  65   3                   }
  66   2                      if(err_flag)                               //总线错误处理
  67   2                       {   
  68   3                          err_flag=0;
  69   3                              Sja_1000_Init();
  70   3                       }
  71   2              }
  72   1      }
  73          //******************************外部中断0*******************//
  74          void ex0_int(void) interrupt 0 using 1
  75          {
  76   1              SJA_BCANAdr=REG_INTERRUPT;
  77   1              flag_init=*SJA_BCANAdr;
  78   1      }
  79          //******************************T1初始化********************//
  80          void T1_int(void) 
  81          {
  82   1              TMOD=0x20;             //定时器1设为方式2
  83   1              TL1=0xFD;              //定时器初值
  84   1              TH1=0xFD;
  85   1              SCON=0x50;             //串口设为方式1,REN=1允许接收
  86   1          TR1=1;                 //启动定时器1
  87   1      }
  88          void UART_int(void) interrupt 4 using 3/*串口中断接受数据*/
  89          {    
  90   1       send_data[k]=SBUF;  //写串口数据到发送数组
  91   1       RI=0;               //接收中断清零
  92   1       k++;                //
  93   1       if(k==10)           //接收到8组数据
  94   1        {k=2;              //
  95   2         send_flag=1;      //置位发送标志
  96   2        }
  97   1      
  98   1      
  99   1      }
 100          
 101          //******************************SJA1000初始化********************//
 102          void Sja_1000_Init(void)
 103          {   BCAN_ENTER_RETMODEL();        //进入复位
 104   1              BCAN_SET_BANDRATE(0x0b);      //设置波特率800K/S
 105   1              BCAN_SET_OBJECT(0xaa,0x00);   //设置地址ID:550
 106   1              BCAN_SET_OUTCLK(0xaa,0x48);   //设置输出方式,禁止COLOCKOUT输出
 107   1              BCAN_QUIT_RETMODEL();         //退出复位模式
 108   1              SJA_BCANAdr=REG_CONTROL;      //地址指针指向控制寄存器
 109   1              *SJA_BCANAdr|=0x1e;           //开放错误\接收\发送中断
 110   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    691    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.06   RS232_BASICCAN                                                        03/17/2008 09:43:17 PAGE 3   

   DATA SIZE        =     25       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 + -