?? sja_bcanfunc.c
字號(hào):
/*
********************************************************************************************************************
**描述: 獨(dú)立的CAN 控制器SJA1000基本硬件頭文件定義(BasicCAN 工作方式)
**文件名: SJA_BcanFunc.H
**應(yīng)用語言: KEIL C51
**版本 : V1.0
**廣州周立功單片機(jī)發(fā)展有限公司 保留所有的版權(quán)
********************************************************************************************************************
*/
/*$page*/
#include <SJA_BCANCONF.H>
#include <string.h>
/************************************************************************
*以下為基本的函數(shù)說明(BasicCAN) *
************************************************************************/
/************************************************************************
*函數(shù)原型: bit BCAN_CREATE_COMMUNATION(void) *
*參數(shù)說明: 無 *
*返回值: *
* 0 ; 表示SJA1000接口正常 *
* 1 ; 表示SJA1000與處理器接口不正常 *
* *
*說明:該函數(shù)用于檢測(cè)CAN控制器的接口是否正常 *
************************************************************************/
bit BCAN_CREATE_COMMUNATION(void)
{
SJA_BCANAdr=REG_TEST; //訪問測(cè)試寄存器
*SJA_BCANAdr =0xaa; //寫入測(cè)試值
if(*SJA_BCANAdr == 0xaa)
{
return 0; //讀測(cè)試正確
}
else
{
return 1;
}
}
/************************************************************************
*函數(shù)原型: bit BCAN_ENTER_RETMODEL(void) *
*參數(shù)說明: 無 *
*返回值: *
* 0 ; 表示成功進(jìn)入復(fù)位工作模式 *
* 1 ; 表示不能進(jìn)入復(fù)位工作模式 *
* *
*說明: CAN控制器進(jìn)入復(fù)位工作模式 *
************************************************************************/
bit BCAN_ENTER_RETMODEL(void)
{
unsigned char TempData;
SJA_BCANAdr = REG_CONTROL; //訪問地址指向控制寄存器
TempData= *SJA_BCANAdr; //保存原始值
*SJA_BCANAdr=(TempData|0x01); //置位復(fù)位請(qǐng)求
if((*SJA_BCANAdr&0x01) == 1)
{
return 0;
}
else
{
return 1;
}
}
/************************************************************************
*函數(shù)原型: bit BCAN_QUIT_RETMODEL(void) *
*參數(shù)說明: 無 *
*返回值: *
* 0 ; 表示成功退出復(fù)位工作模式 *
* 1 ; 表示不能退出復(fù)位工作模式 *
* *
*說明: CAN控制器退出復(fù)位工作模式 *
************************************************************************/
bit BCAN_QUIT_RETMODEL(void)
{
unsigned char TempData;
SJA_BCANAdr = REG_CONTROL; //訪問地址指向控制寄存器
TempData = *SJA_BCANAdr; //保存原始值
*SJA_BCANAdr=(TempData&0xfe); //清除復(fù)位請(qǐng)求
if((*SJA_BCANAdr&0x01) == 0)
{
return 0; //
}
else
{
return 1; //退出成功
}
}
/************************************************************************
;*函數(shù)原型: bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) *
;*參數(shù)說明: 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 ;波特率設(shè)置成功 *
;* 1 ;波特率設(shè)置失敗 *
;* *
;*說明:設(shè)置CAN控制器SJA1000通訊波特率.SJA1000的晶振為必須為16MHZ, *
;* 其它晶體的頻率的值的波特率,需自己計(jì)算 。該子程序只能用于 *
;* 復(fù)位模式 *
;************************************************************************/
unsigned char code SJA_BTR_CODETAB[]={
0x53,0x2F, // ;20KBPS的預(yù)設(shè)值
0x87,0xFF, //;40KBPS的預(yù)設(shè)值
0x47,0x2F, //;50KBPS的預(yù)設(shè)值
0x83,0xFF, //;80KBPS的預(yù)設(shè)值
0x43,0x2f, //;100KBPS的預(yù)設(shè)值
0x03,0x1c, //;125KBPS的預(yù)設(shè)值
0x81,0xfa, //;200KBPS的預(yù)設(shè)值
0x01,0x1c, //;250KBPS的預(yù)設(shè)值
0x80,0xfa, //;400KBPS的預(yù)設(shè)值
0x00,0x1c, //;500KBPS的預(yù)設(shè)值
0x80,0xb6, //;666KBPS的預(yù)設(shè)值
0x00,0x16, //;800KBPS的預(yù)設(shè)值
0x00,0x14 //;1000KBPS的預(yù)設(shè)值
};
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];
//將波特率的的預(yù)設(shè)值裝入sja1000的總線定時(shí)器
SJA_BCANAdr=REG_BTR0; //訪問地址指向總線定時(shí)寄存器0
*SJA_BCANAdr=BTR0_num; //寫入?yún)?shù)
if(*SJA_BCANAdr != BTR0_num) //校驗(yàn)寫入值
{
return 1;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -