rs232_basiccan.lst

来自「可以实现在PC与CAN总线的连接。采用的89C51和SJA1000芯片的接法。里」· LST 代码 · 共 126 行

LST
126
字号
C51 COMPILER V6.12  RS232_BASICCAN                                                         12/11/2007 21:38:45 PAGE 1   


C51 COMPILER V6.12, 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 P2_0=P2^0;
  15          sbit P3_4=P3^4;
  16          sbit LED=P3^5;
  17          //***********************主函数*******************************//
  18          void main(void)
  19          {   
  20   1          P2_0=0;                                         //SJA1000退出硬件复位模式
  21   1          Sja_1000_Init();								//initialize Sja100
  22   1      	T1_int();										//initialize T1
  23   1      	PX0=1;                                          //外部中断0高优先级
  24   1      	EX0=1;                                          //外部中断0开放
  25   1      	ES=1;                                           //串口中断开放
  26   1      	EA=1;                                           //开放全局中断
  27   1      	flag_init=0x00;
  28   1          P3_4=0;                                         //点亮指示灯
  29   1      	while(1)
  30   1      	{
  31   2      		if(rcv_flag)							
  32   2      		{   
  33   3      			rcv_flag=0;
  34   3      			BCAN_DATA_RECEIVE(rcv_data);            //接收数据
  35   3      			BCAN_CMD_PRG(0x04);                     //释放接收缓冲区
  36   3      		    ES=0;                                   //串口中断禁止
  37   3      		    for(j=2;j<10;j++)                       //发送8组数据到串口
  38   3      			 {
  39   4      			  SBUF=rcv_data[j];
  40   4      			  while(TI==0)
  41   4      			   {}
  42   4      			  TI=0;
  43   4      			  }
  44   3                   ES=1;                                   //串口中断开放
  45   3      			 LED=~LED;                               //指示灯
  46   3      		}
  47   2      		if(send_flag)							
  48   2      		{
  49   3      			send_flag=0;							
  50   3      			send_data[0]=0xA8;					    
  51   3      			send_data[1]=0x08;                      //报文ID:540
  52   3      			BCAN_DATA_WRITE(send_data);             //写入数据到缓冲区函数
  53   3      			BCAN_CMD_PRG(0x01);                     //调用发送请求
  54   3      	        LED=~LED;                               //指示灯
  55   3      	}
C51 COMPILER V6.12  RS232_BASICCAN                                                         12/11/2007 21:38:45 PAGE 2   

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    659    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   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 + =
减小字号Ctrl + -
显示快捷键?