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

📄 canceshi.lst

📁 这是我前一段开发CAN总线通讯时编写的CAN测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 139          **                              Value           写入寄存器的值                                             
 140          ** 返回值:      1                       写入正确
 141          **                              0                       写入不正确
 142          /*------------------------------------------------------------------------------------------------------*/
 143           bit WriteSJAReg(unsigned char RegAdr,unsigned char Value)
 144          {
 145   1          
 146   1          SJA_CS_Point  = CAN_SJA_BaseAdr+RegAdr;                   //
 147   1          *SJA_CS_Point =(*SJA_CS_Point|Value);
 148   1               _nop_();
 149   1               _nop_();
 150   1           if(*SJA_CS_Point ==(*SJA_CS_Point|Value))
 151   1          {
 152   2             return   0;
 153   2          }
 154   1          else
 155   1          {
 156   2             return   1;
 157   2          }
 158   1         
 159   1       }
 160            /*------------------------------------------------------------------------------------------------------
             ---
 161          ** 函数原型:       WriteSJAReg(unsigned char RegAdr,unsigned char  Value)
 162          ** 功能描述:    该函数用于将指定的数值写入sja1000的指定的寄存器
 163          ** 参数说明:    RegAdr          要读的sja1000的内部寄存器地址 
 164          **                              Value           写入寄存器的值                                             
 165          ** 返回值:      1                       写入正确
 166          **                              0                       写入不正确
 167          适合于向内部寄存器中某存储单元写数据。写入的是一个字节
 168          /*------------------------------------------------------------------------------------------------------*/
 169           bit WriteSJARegByte(unsigned char RegAdr,unsigned char Value)
 170          {
 171   1          
 172   1          SJA_CS_Point  = CAN_SJA_BaseAdr+RegAdr;                   //
 173   1          *SJA_CS_Point =Value;
 174   1               _nop_();
C51 COMPILER V7.06   CANCESHI                                                              01/07/2008 08:46:41 PAGE 4   

 175   1               _nop_();
 176   1           if(*SJA_CS_Point ==Value)
 177   1          {
 178   2             return   0;
 179   2          }
 180   1          else
 181   1          {
 182   2             return   1;
 183   2          }
 184   1         
 185   1       }
 186              /*----------------------------------------------------------------------------------------------------
             ----- 
 187          ** 函数原型:    void    SJA1000_Config_Normal(void)                                                
 188          ** 功能描述:    对SJA1000的正常模式的初始化配置                                               
 189          ** 参数说明:    无                                                                               
 190          ** 返回值:      无                                                                                 
 191          /*------------------------------------------------------------------------------------------------------*/
             - 
 192          void SJA1000_Config_Normal(void)                                                                                                        //正常模式的初始化
 193            { bit SJAReg_bz=1;
 194   1              BTR0=0x01;
 195   1          BTR1=0x1c;                                                          //设置为250kb波特率通信
 196   1                                                                                                                                                      
 197   1              while(SJAReg_bz)
 198   1                   {SJAReg_bz=WriteSJARegByte(REG_CAN_TEST,0xaa);}                   //测试接口
 199   1              SJAReg_bz=1;
 200   1              while(SJAReg_bz)
 201   1                   {SJAReg_bz=WriteSJARegByte(REG_CAN_TEST,0x55);} 
 202   1          SJAReg_bz=1;
 203   1              while(SJAReg_bz)
 204   1                   {SJAReg_bz=SJAEntryResetMode();}                                //进入复位模式                        
             -                           
 205   1              WriteSJARegByte(REG_CAN_CDR,0xc8);                                                              //配置时钟分频寄存器,选择PeliCAN模式   
 206   1              SJAReg_bz=1;
 207   1              while(SJAReg_bz)
 208   1                   {SJAReg_bz=WriteSJAReg(REG_CAN_MOD,0x01);}                                         //配置模式寄存器,选择双滤波、正常模式 
 209   1              WriteSJARegBlock(16,Send_CAN_Filter,8);                                                         //配置验收代码/屏蔽寄存器                        
 210   1              SJAReg_bz=1;
 211   1              while(SJAReg_bz)
 212   1                   {SJAReg_bz=WriteSJARegByte(REG_CAN_BTR0,BTR0);}                                    //配置总线定时器0                           
 213   1              SJAReg_bz=1;
 214   1              while(SJAReg_bz)
 215   1                   {SJAReg_bz=WriteSJARegByte(REG_CAN_BTR1,BTR1);}                                    //配置总线定时器1                            
 216   1              WriteSJARegByte(REG_CAN_OCR,0x1a);                                                                              //配置输出管脚                             
 217   1              SJAReg_bz=1;
 218   1              while(SJAReg_bz)
 219   1                   {SJAReg_bz=SJAQuitResetMode();}                                                       //退出复位模式,进入工作模式                              
 220   1        }
 221          /*------------------------------------------------------------------------------------------------------*/
 222          
 223          
 224          
 225          main()
 226           {      //IP=1;
 227   1              //IPH=1;
 228   1              //TMOD=0x21;
 229   1       //     TH0=0x00;
 230   1       //     TL0=0x00;         //定时器0设置,暂时先开开,可能用不上
 231   1      //      TR0=1;
 232   1              //ET0=1;
 233   1              //RCLK=1;
C51 COMPILER V7.06   CANCESHI                                                              01/07/2008 08:46:41 PAGE 5   

 234   1              //TCLK=1;        //定时器2用作波特率发生器   T2CON中的值
 235   1              //RCAP2H=0xff;
 236   1              //RCAP2L=0xB8;   //初步设定波特率为9600
 237   1              //SCON=0x50;     //串口方式为模式1,无校验,定时器2产生波特率 
 238   1              //TR2=1;        //开定时器2
 239   1              //ES=1;          //使能串口 
 240   1       
 241   1        while (1)
 242   1         { 
 243   2          CS_SJA1000=0;//开片选信号
 244   2              _nop_();
 245   2               _nop_();
 246   2               _nop_();
 247   2               _nop_();
 248   2               _nop_();
 249   2               _nop_();       
 250   2              SJA_CS_Point=&CAN_SJA_BaseAdr;          //确定基址指针的值
 251   2              SJA1000_HardwareRst();
 252   2              SJA1000_Config_Normal();                        //调用SJA1000初始化配置函数
 253   2      
 254   2              SJA_CS_Point  = CAN_SJA_BaseAdr+REG_CAN_SR;
 255   2              while((*SJA_CS_Point&0x01) == RBS_BIT)
 256   2                  {  unsigned   char   TempData,j;
 257   3                                    TempData=*SJA_CS_Point&0x0F;               //取数据字节数目   
 258   3                                        TempData=TempData+0x04;             //ID29位加上数据的字节数   ,不用要信息帧。       
 259   3                                    for(j=0;j<TempData;j++)                             //开始将接收到的TempData个字节的数据存到CPU的
             -数据缓冲区里
 260   3                                           {
 261   4                                                 SJA_CS_Point  = CAN_SJA_BaseAdr+REG_CAN_TXBUF1+j;    
 262   4                             Rev_CAN_data[j] = *SJA_CS_Point; 
 263   4                                            }
 264   3                                        SJA_CS_Point  = CAN_SJA_BaseAdr+REG_CAN_CMR;      //释放接收缓冲区,可以直接接收了
 265   3                                *SJA_CS_Point = RRB_BIT;
 266   3                        }
 267   2          }
 268   1        }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    481    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     28    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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