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

📄 selftest.lst

📁 用单片机实现的CAN总线通讯程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SELFTEST                                                              05/09/2005 09:55:25 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SELFTEST
OBJECT MODULE PLACED IN selftest.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE selftest.c BROWSE INCDIR(C:\Keil\C51\INC\) DEBUG OBJECTEXTEND

stmt level    source

   1          /**************************************************************/
   2          /******************浙江天煌科技实业有限公司********************/
   3          /***********************WWW.Teamkit.com.cn*********************/
   4          
   5          
   6          #include "REG52.H"
   7          #include "SJA_BCANCONF.H"
   8          #include "I2C_C51.h"
   9          #include "7279.h"
  10          #include "string.h"
  11          #include "intrins.h"
  12          
  13          #define DECODE0 0x80
  14          #define DECODE1 0xc8
  15          //#define CMD_RESET 0x15
  16          
  17          void Init_Cpu(void);
  18          void Init_T0(void);
  19          void Sja_1000_Init(void);
  20          void disp_ok(unsigned char *);
  21          void disp_err(void);
  22          void delay(unsigned int k);
  23          //void send(unsigned char a);
  24          void display(unsigned char display_buffer[5]);
  25          
  26          
  27          bit flag_sec;
  28          unsigned char data a[5];
  29          unsigned char data  send_data[10],rcv_data[10];
  30          unsigned char databuf,sec_data,second;
  31          unsigned char data  Tmod_data;
  32          unsigned char bdata flag_init;
  33          
  34          unsigned        char    data    display_bit;
  35          
  36          sbit rcv_flag=flag_init^0;
  37          sbit err_flag=flag_init^2;
  38          
  39          
  40          void main(void)
  41          {
  42   1          Sja_1000_Init();                                                            //initialize Sja1000
  43   1              Init_T0();                                                                              //initialize T0
  44   1              Init_Cpu();                                                                             //initialize mcu
  45   1              flag_init=0x00;
  46   1              while(1)
  47   1              {
  48   2                      if(rcv_flag)                                                            //if there is receive interrupt
  49   2                      {
  50   3                              rcv_flag=0;
  51   3                              BCAN_DATA_RECEIVE(rcv_data);
  52   3                              BCAN_CMD_PRG(0x04);                                             //释放缓冲区
  53   3                              disp_ok(rcv_data);
  54   3                      }
  55   2                      if(flag_sec)                                                            //
C51 COMPILER V7.06   SELFTEST                                                              05/09/2005 09:55:25 PAGE 2   

  56   2                      {
  57   3                              flag_sec=0;                                                             //send data if reach 1 s
  58   3                              //send_data[0]=0xaa;                                    //Basic can
  59   3                              send_data[0]=0x08;                                              //Pelican
  60   3                              send_data[1]=0xaa;
  61   3                              send_data[2]=second;
  62   3                              send_data[3]=second;
  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                              disp_err();
  70   3                              Sja_1000_Init();
  71   3                      }
  72   2                      display(a);
  73   2                      delay(200);
  74   2              }       
  75   1      }
  76          
  77          
  78          void ex0_int(void) interrupt 2 //using 1
  79          {
  80   1              SJA_BCANAdr=REG_INTERRUPT;
  81   1              flag_init=*SJA_BCANAdr;
  82   1      }
  83          
  84          void T0_int(void) interrupt 1 //using 2
  85          {
  86   1      static unsigned char ii=0;
  87   1              TR0=0;
  88   1                      TH0=0x80;
  89   1                      TL0=0x60;
  90   1                      ii++;
  91   1                      if(ii>40)
  92   1                      {
  93   2                              flag_sec=1;
  94   2                              ii=0;
  95   2                              second++;
  96   2                      }
  97   1              TR0=1;
  98   1      }
  99          
 100          void Init_Cpu(void)
 101          {
 102   1              PX1=1;
 103   1              IT1=1;
 104   1              EX1=1;
 105   1              ET0=1;
 106   1              EA=1;
 107   1              sec_data=0x10;
 108   1      }
 109          
 110          
 111          void Init_T0(void)
 112          {
 113   1        Tmod_data=TMOD; 
 114   1        Tmod_data&=0xf0;
 115   1        Tmod_data|=0x01;
 116   1        TMOD=Tmod_data;
 117   1        TH0=0x80;
C51 COMPILER V7.06   SELFTEST                                                              05/09/2005 09:55:25 PAGE 3   

 118   1        TL0=0x60;
 119   1        TR0=1;
 120   1        sec_data=0x20;
 121   1        second=0x00;
 122   1      }
 123          
 124          void Sja_1000_Init(void)
 125          {
 126   1              bit s;
 127   1              s=BCAN_CREATE_COMMUNATION();
 128   1              s=BCAN_ENTER_RETMODEL();
 129   1              s=BCAN_SET_OUTCLK(0xaa,0xc8);                           //Pelican
 130   1              s=BCAN_SET_BANDRATE(0x04);
 131   1              s=BCAN_SET_OBJECT(0xaa,0xff);
 132   1              //s=BCAN_SET_OUTCLK(0xaa,0x48);
 133   1              s=BCAN_SET_MOD();
 134   1              s=BCAN_QUIT_RETMODEL();
 135   1              SJA_BCANAdr=REG_IER;
 136   1              *SJA_BCANAdr=0x03;
 137   1              //*SJA_BCANAdr=0xff;
 138   1              //SJA_BCANAdr=REG_CONTROL;
 139   1              //*SJA_BCANAdr|=0x1e;
 140   1      }
 141          
 142          
 143          
 144          void disp_ok(unsigned char * rcv_data)
 145          {
 146   1              a[0]=rcv_data[0]%16;
 147   1              a[1]=rcv_data[0]/16;
 148   1              a[2]=0x1f;
 149   1              a[3]=rcv_data[3]%16;
 150   1              a[4]=rcv_data[3]/16;
 151   1      }
 152          
 153          
 154          void disp_err(void)
 155          {
 156   1              a[0]=0x18;
 157   1              a[1]=0x15;
 158   1              a[2]=0x18;
 159   1              a[3]=0x18;
 160   1              a[4]=0x0E;
 161   1      }
 162          
 163          
 164          
 165           bit   BCAN_CREATE_COMMUNATION(void)
 166           {  
 167   1          SJA_BCANAdr=REG_TEST;                     //访问测试寄存器            
 168   1          
 169   1          *SJA_BCANAdr   =0xaa;                     //写入测试值
 170   1          if(*SJA_BCANAdr == 0xaa)
 171   1          {
 172   2              return    0;                          //读测试正确
 173   2          }
 174   1          else
 175   1          {    
 176   2             return    1;
 177   2          } 
 178   1       }      
 179          
C51 COMPILER V7.06   SELFTEST                                                              05/09/2005 09:55:25 PAGE 4   

 180          
 181           bit   BCAN_ENTER_RETMODEL(void)
 182           {
 183   1          unsigned   char   TempData;
 184   1          SJA_BCANAdr  = REG_CONTROL;                   //访问地址指向控制寄存器 
 185   1          TempData=  *SJA_BCANAdr;                      //保存原始值
 186   1          *SJA_BCANAdr=(TempData|0x01);                 //置位复位请求
 187   1          if((*SJA_BCANAdr&0x01) == 1)
 188   1          {
 189   2             return   0;
 190   2          }
 191   1          else
 192   1          {
 193   2             return   1;
 194   2          }
 195   1          
 196   1       }
 197          
 198          
 199           bit   BCAN_QUIT_RETMODEL(void)
 200           {
 201   1          unsigned   char   TempData;
 202   1          SJA_BCANAdr = REG_CONTROL;                   //访问地址指向控制寄存器 
 203   1          TempData    = *SJA_BCANAdr;                  //保存原始值
 204   1          *SJA_BCANAdr=(TempData&0xfe);                        //清除复位请求
 205   1          if((*SJA_BCANAdr&0x01) == 0)
 206   1          {
 207   2             return   0;                               //
 208   2          }
 209   1          else
 210   1          {
 211   2             return   1;                              //退出成功
 212   2          }
 213   1      
 214   1       }
 215          
 216          
 217          unsigned  char  code    SJA_BTR_CODETAB[]={
 218              0x53,0x2F,                        //   ;20KBPS的预设值
 219              0x87,0xFF,                     //;40KBPS的预设值
 220              0x47,0x2F,                     //;50KBPS的预设值
 221              0x83,0xFF,                     //;80KBPS的预设值
 222              0x43,0x2f,                     //;100KBPS的预设值
 223              0x03,0x1c,                     //;125KBPS的预设值

⌨️ 快捷键说明

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