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

📄 sja_bcanfunc.h

📁 can-汇编测试程序
💻 H
📖 第 1 页 / 共 2 页
字号:
/************************************************************************
 *   广州周立功单片机发展有限公司    http://www.zlgmcu.com              *
 ***********************************************************************/
/************************************************************************
 *                                                                      *
 *  CAN 控制器SJA1000基本的函数定义(BasicCAN 工作方式)                 *
 *                                                                      *
 ***********************************************************************/
/************************************************************************
 *                                                                      *
 *  目的:       用户在应用SJA1000组成CAN网络中通过简单的参数设置和调用  *
 *              本文件提供函数便能使自己的CAN系统进行基本的调试和运行   *                              
 *                                                                      *
 *  文件名:     SJA_BCANFUNC.H                                          *
 *                                                                      *
 *  模块名:     --                                                      *
 *                                                                      *
 *  目标系统:   任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN    *
 *              系统                                                    *
 *                                                                      *
 *  应用语言:   Keil C51                                                *
 *                                                                      *
 ************************************************************************
 *  版本 :V1.0                                                          *
 *                                                                      *
 ************************************************************************
 *  广州周立功单片机发展有限公司 保留所有的版权                         *
 ************************************************************************/


#include    "SJA_BCANCONF.H"
#include    <string.h>

#ifndef         BasicCAN 
#define         BasicCAN
#endif


/************************************************************************
 *以下为基本的函数说明(BasicCAN)                                       *
 ************************************************************************/

/************************************************************************
 *函数原型:  bit   BCAN_CREATE_COMMUNATION(void)                        * 
 *参数说明:  无                                                         *
 *返回值:                                                               *
 *           0 ; 表示SJA1000接口正常                                    *
 *           1 ; 表示SJA1000与处理器接口不正常                          *
 *                                                                      * 
 *说明:该函数用于检测CAN控制器的接口是否正常                            *
 ************************************************************************/
 bit   BCAN_CREATE_COMMUNATION(void)
 {  
    SJA_BCANAdr=REG_TEST;                     //访问测试寄存器            
    
    *SJA_BCANAdr   =0xaa;                     //写入测试值
    if(*SJA_BCANAdr == 0xaa)
    {
        return    0;                          //读测试正确
    }
    else
    {    
       return    1;
    } 
 }       

/************************************************************************
 *函数原型:      bit   BCAN_ENTER_RETMODEL(void)                        *
 *参数说明:  无                                                         *
 *返回值:                                                               *
 *           0 ; 表示成功进入复位工作模式                               *
 *           1 ; 表示不能进入复位工作模式                               *
 *                                                                      * 
 *说明:      CAN控制器进入复位工作模式                                  *
 ************************************************************************/ 
 bit   BCAN_ENTER_RETMODEL(void)
 {
    unsigned   char   TempData;
    SJA_BCANAdr  = REG_CONTROL;                   //访问地址指向控制寄存器 
    TempData=  *SJA_BCANAdr;                      //保存原始值
    *SJA_BCANAdr=(TempData|0x01);                 //置位复位请求
    if((*SJA_BCANAdr&0x01) == 1)
    {
       return   0;
    }
    else
    {
       return   1;
    }
    
 }

/************************************************************************
 *函数原型:      bit   BCAN_QUIT_RETMODEL(void)                         *
 *参数说明:  无                                                         *
 *返回值:                                                               *
 *           0 ; 表示成功退出复位工作模式                               *
 *           1 ; 表示不能退出复位工作模式                               *
 *                                                                      * 
 *说明:      CAN控制器退出复位工作模式                                  *
 ************************************************************************/ 
 bit   BCAN_QUIT_RETMODEL(void)
 {
    unsigned   char   TempData;
    SJA_BCANAdr = REG_CONTROL;                   //访问地址指向控制寄存器 
    TempData    = *SJA_BCANAdr;                  //保存原始值
    *SJA_BCANAdr=(TempData&0xfe);       		 //清除复位请求
    if((*SJA_BCANAdr&0x01) == 0)
    {
       return   0;                               //
    }
    else
    {
       return   1;                              //退出成功
    }

 }

/************************************************************************
;*函数原型:   bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)       *
;*参数说明:  CAN_ByteRate    波特率(Kbit/s) BTR0     BTR1             *
;*           0	            5               0bFH     0FFH             *
;*           1	            10              01fH     0fFH             *  
;*           2	            20              00fH     0fFH             *
;*           3	            40              007H     0FFH             *
;*           4	            50              0C9H     0c9H             *
;*           5	            80              003H     0FFH             *
;*           6              100             087H     0A5H             *
             7              160             001h     0ffh
;*           8	            250             081H     049H             *
;*           9	            320             000H     0ffH             *
;*           10	            500             080H     049H             *
;*           11	            800             00H      02aH             *
;*           12	            1000            40H      014H             *
;*返回值:                                                               *
;*           0 ;波特率设置成功                                          *
;*           1 ;波特率设置失败                                          *
;*                                                                      * 
;*说明:设置CAN控制器SJA1000通讯波特率.SJA1000的晶振为必须为16MHZ,       *
;*     其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于        *
;*     复位模式                                                         *  
;************************************************************************/
bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
{
  unsigned  char  BR_Num=CAN_ByteRate,BTR0_num,BTR1_num;
  switch(BR_Num)
  {
   case  ByteRate_5k:                      //5KBPS的预设值
         BTR0_num=0xbF; 
 	   BTR1_num=0xFF;
 	   break;
   case  ByteRate_10k:			    	  //10KBPS的预设值
         BTR0_num=0x67;
 	    BTR1_num=0x2F;
 	   break;				    	 	 //20KBPS的预设值
   case  ByteRate_20k:
         BTR0_num=0x0f;
 	   BTR1_num=0xFF; 
 	   break;
   case  ByteRate_40k:			     	 //40KBPS的预设值
         BTR0_num=0x07;
 	   BTR1_num=0xFF;
 	   break;				      
  case  ByteRate_50k:                   //50KBPS的预设值
         BTR0_num=0xC9;
 	   BTR1_num=0xc9;
 	   break;
   case  ByteRate_80k:			      	//80KBPS的预设值
         BTR0_num=0x03;
 	   BTR1_num=0xFF;
 	   break;
   case  ByteRate_100k:		            //100KBPS的预设值
         BTR0_num=0x87;
 	   BTR1_num=0xA5; 
 	   break;
   case  ByteRate_160k:			      	//200KBPS的预设值
         BTR0_num=0x01;
 	   BTR1_num=0xff;
 	   break;
   case  ByteRate_250k:			      	//250KBPS的预设值

⌨️ 快捷键说明

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