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

📄 selftest.lst

📁 CAN自发自收例程 外中断1;独立的CAN 控制器SJA1000基本硬件头文件定义(BasicCAN 工作方式)
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE SELFTEST
OBJECT MODULE PLACED IN selftest.OBJ
COMPILER INVOKED BY: C:\PROGRAM FILES\KEIL701\C51\BIN\C51.EXE selftest.c BROWSE INTVECTOR(0X8000) INCDIR(C:\Keil\C51\INC
                    -\) DEBUG OBJECTEXTEND

stmt level    source

   1          #include "REG52.H"
   2          #include "SJA_BCANCONF.H"
   3          #include "VIIC_C51.h"
   4          #include "ZLG7290.h"
   5          #include "string.h"
   6          #include "intrins.h"
   7          
   8          void Init_Cpu(void);
   9          void Init_T0(void);
  10          void Sja_1000_Init(void);
  11          void disp_ok(void);
  12          void disp_err(void);
  13          void delay(unsigned int k);
  14          //void send(unsigned char a);
  15          void display(unsigned char display_buffer[5]);
  16          
  17          
  18          bit flag_sec;
  19          unsigned char data a[5];
  20          unsigned char data  send_data[10],rcv_data[10];
  21          unsigned char databuf,sec_data,second;
  22          unsigned char data  Tmod_data;
  23          unsigned char bdata flag_init;
  24          sbit    SDA=P1^0;
  25          sbit    CLK=P1^1;
  26          unsigned        char    code    led[20]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8
             -e,0xbf,0x89,0x8C}; 
  27          
  28          
  29          unsigned        char    data    display_bit;
  30          
  31          sbit rcv_flag=flag_init^0;
  32          sbit err_flag=flag_init^2;
  33          
  34          
  35          void main(void)
  36          {
  37   1              Sja_1000_Init();                                                                //initialize Sja1000
  38   1              Init_T0();                                                                              //initialize T0
  39   1              Init_Cpu();                                                                             //initialize mcu
  40   1              flag_init=0x00;
  41   1      
  42   1              while(1)
  43   1              {
  44   2                      if(rcv_flag)                                                            //if there is receive interrupt
  45   2                      {
  46   3                              rcv_flag=0;
  47   3                              BCAN_DATA_RECEIVE(rcv_data);
  48   3                              BCAN_CMD_PRG(0x04);
  49   3                              disp_ok();
  50   3                      }
  51   2                      if(flag_sec)                                                            //
  52   2                      {
  53   3                              flag_sec=0;                                                             //send data if reach 1 s
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 2   

  54   3                              //send_data[0]=0xaa;                                    //Basic can
  55   3                              send_data[0]=0x08;                                              //Pelican
  56   3                              send_data[1]=0xaa;
  57   3                              send_data[2]=second;
  58   3                              send_data[3]=second;
  59   3                              BCAN_DATA_WRITE(send_data);
  60   3                              BCAN_CMD_PRG(0x12);
  61   3                      }
  62   2                      if (err_flag)
  63   2                      {
  64   3                              err_flag=0;
  65   3                              disp_err();
  66   3                              Sja_1000_Init();
  67   3                      }
  68   2              
  69   2      
  70   2                      display(a);
  71   2                      delay(200);
  72   2              }       
  73   1      }
  74          
  75          
  76          void ex0_int(void) interrupt 2 //using 1
  77          {
  78   1              SJA_BCANAdr=REG_INTERRUPT;
  79   1              flag_init=*SJA_BCANAdr;
  80   1      }
  81          
  82          void T0_int(void) interrupt 1 //using 2
  83          {
  84   1      static unsigned char ii=0;
  85   1              TR0=0;
  86   1                      TH0=0x80;
  87   1                      TL0=0x60;
  88   1                      ii++;
  89   1                      if(ii>40)
  90   1                      {
  91   2                              flag_sec=1;
  92   2                              ii=0;
  93   2                      }
  94   1              TR0=1;
  95   1      }
  96          
  97          void Init_Cpu(void)
  98          {
  99   1              PX1=1;
 100   1              IT1=1;
 101   1              EX1=1;
 102   1              ET0=1;
 103   1              EA=1;
 104   1              sec_data=0x10;
 105   1      }
 106          
 107          
 108          void Init_T0(void)
 109          {
 110   1      Tmod_data=TMOD;
 111   1      Tmod_data&=0xf0;
 112   1      Tmod_data|=0x01;
 113   1      TMOD=Tmod_data;
 114   1      TH0=0x80;
 115   1      TL0=0x60;
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 3   

 116   1      TR0=1;
 117   1      sec_data=0x20;
 118   1      second=0x00;
 119   1      }
 120          
 121          
 122          void Sja_1000_Init(void)
 123          {
 124   1              bit s;
 125   1              s=BCAN_CREATE_COMMUNATION();
 126   1              s=BCAN_ENTER_RETMODEL();
 127   1              s=BCAN_SET_OUTCLK(0xaa,0xc8);                           //Pelican
 128   1              s=BCAN_SET_BANDRATE(0x04);
 129   1              s=BCAN_SET_OBJECT(0xaa,0xff);
 130   1              s=BCAN_SET_MOD();
 131   1              s=BCAN_QUIT_RETMODEL();
 132   1              SJA_BCANAdr=REG_IER;
 133   1              *SJA_BCANAdr=0x03;
 134   1      
 135   1      }
 136          
 137          
 138          
 139          void disp_ok(void)
 140          {
 141   1              a[0]=0x01;
 142   1              a[1]=0x0D;
 143   1              a[2]=0x15;
 144   1              a[3]=0X15;
 145   1              a[4]=0X10;
 146   1      }
 147          
 148          
 149          void disp_err(void)
 150          {
 151   1              a[0]=0x18;
 152   1              a[1]=0x15;
 153   1              a[2]=0x18;
 154   1              a[3]=0x18;
 155   1              a[4]=0x0E;
 156   1      }
 157          
 158          
 159          
 160           bit   BCAN_CREATE_COMMUNATION(void)
 161           {  
 162   1          SJA_BCANAdr=REG_TEST;                     //访问测试寄存器            
 163   1          
 164   1          *SJA_BCANAdr   =0xaa;                     //写入测试值
 165   1          if(*SJA_BCANAdr == 0xaa)
 166   1          {
 167   2              return    0;                          //读测试正确
 168   2          }
 169   1          else
 170   1          {    
 171   2             return    1;
 172   2          } 
 173   1       }      
 174          
 175          
 176           bit   BCAN_ENTER_RETMODEL(void)
 177           {
C51 COMPILER V7.01  SELFTEST                                                               08/07/2003 10:58:02 PAGE 4   

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

⌨️ 快捷键说明

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