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

📄 sja_bcanfunc.c

📁 学习51单片机得一些例程原码,学习交流,欢迎大家和我探讨,jjzhang166@163.com
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
********************************************************************************************************************
**描述:    独立的CAN 控制器SJA1000基本硬件头文件定义(BasicCAN 工作方式)
**文件名:   SJA_BcanFunc.H
**应用语言: KEIL C51
**版本 :    V1.0
**广州周立功单片机发展有限公司 保留所有的版权
********************************************************************************************************************
*/

 /*$page*/


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




/************************************************************************
 *以下为基本的函数说明(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)       *
;*参数说明:  R7            波特率(Kbit/s) BTR0     BTR1               *
;*           0	            20              053H,    02FH                *
;*           1	            40              087H,    0FFH               *  
;*           2	            50              047H,    02FH               *
;*           3	            80              083H,    0FFH                *
;*           4	            100             043H,    02fH                *
;*           5	            125             03H,     01cH                 *
;*           6              200             081H,    0faH               *
;*           7	            250             01H,     01cH            *
;*           8	            400             080H,    0faH                *
;*           9	            500             00H,     01cH               *
;*           10	            666             080H,    0b6H                 *
;*           11	            800             00H,     016H             *
;*           12	            1000            00H,     014H                  *
;*返回值:                                                               *
;*           0 ;波特率设置成功                                          *
;*           1 ;波特率设置失败                                          *
;*                                                                      * 
;*说明:设置CAN控制器SJA1000通讯波特率.SJA1000的晶振为必须为16MHZ,       *
;*     其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于        *
;*     复位模式                                                         *  
;************************************************************************/
unsigned  char	code	SJA_BTR_CODETAB[]={
    0x53,0x2F,		              //   ;20KBPS的预设值
    0x87,0xFF,                     //;40KBPS的预设值
    0x47,0x2F,                     //;50KBPS的预设值
    0x83,0xFF,                     //;80KBPS的预设值
    0x43,0x2f,                     //;100KBPS的预设值
    0x03,0x1c,                     //;125KBPS的预设值
    0x81,0xfa,                     //;200KBPS的预设值
    0x01,0x1c,                     //;250KBPS的预设值
    0x80,0xfa,                     //;400KBPS的预设值
    0x00,0x1c,                     //;500KBPS的预设值
    0x80,0xb6,                     //;666KBPS的预设值
    0x00,0x16,                     //;800KBPS的预设值
    0x00,0x14                     //;1000KBPS的预设值
   
};

bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
{
  unsigned  char  BTR0_num,BTR1_num;
  BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
  BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
  //将波特率的的预设值装入sja1000的总线定时器
  SJA_BCANAdr=REG_BTR0;          		//访问地址指向总线定时寄存器0
  *SJA_BCANAdr=BTR0_num;      			//写入参数
  if(*SJA_BCANAdr != BTR0_num)			//校验写入值
  {
    return  1; 

⌨️ 快捷键说明

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