📄 sja_bcanfunc.h
字号:
/************************************************************************
* 广州周立功单片机发展有限公司 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 + -