打印
[CAN-bus/DeviceNet]

SJA1000初始化标准程序

[复制链接]
6940|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxj1952|  楼主 | 2007-5-4 09:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很多CAN初学者,对SJA1000的初始化感到没有头绪,这里给出一个BASIC模式初始化实验程序。
实际上,对一个通信控制器初始化应该是很简单的几条语句。而且像CDR、OCR等等这样的寄存器一般实验中都是标准设置。不必人人都去化时间研究它的设置原理。
应该像操作系统一样,有人做过了,只管调用就行。节省下时间,多做些有创意的工作。
还有波特率设置参数,有人算过了,我们就不必重复再去计算,只要会调用就行。



#pragma SMALL
#include<reg51.h>
#include<sjaregb1.h>
#define uchar unsigned char

uchar xdata *SJA_Adr=0x7f00;
#define can_read(RegAdr)  SJA_Adr[RegAdr]
#define can_write(RegAdr,Val) SJA_Adr[RegAdr]=Val


//BASIC模式初始化程序,调用时直接输入标识符ID、屏蔽码、波特率3个参数.
//例如:initial(0x78,0,500k);


void initial(uchar B_ACR,uchar B_AMR,uchar Fbps)  
{
   uchar c, B_CDR=0x40, B_OCR=0xfa;
 
  can_write(CDR,B_CDR);   //时钟分频寄存器,默认0x40
  IE=0;
  c=can_read(IR);

  can_write(CR,0x61);   //进入复位模式
 
can_write(OCR,B_OCR);   //输出控制寄存器,默认0xfa

can_write(BTR0,BTR_TAB[Fbps]);    //波特率设置  
can_write(BTR1,BTR_TAB[Fbps+1]);    
can_write(ACR,B_ACR);             //验收代码寄存器
can_write(AMR,B_AMR);             //验收屏蔽寄存器

can_write(CR,0x06);  //进入工作模式
 
}


void main(void)
{
uchar c;
initial(0x54,0,250k);   //SJA1000初始化

     .
    .
    .
    .
    .
    .
}



其他在sjaregb1.h里,实际程序initial( )也应在sjaregb1.h里。

相关帖子

沙发
hq_y| | 2007-5-4 10:31 | 只看该作者

up

使用特权

评论回复
板凳
桂电飞天鼠| | 2007-5-4 13:38 | 只看该作者

rt

呵呵,终于又见到wxj1952前辈的大作了~!
支持~~!

使用特权

评论回复
地板
wxj1952|  楼主 | 2007-5-4 18:26 | 只看该作者

一个问题.

关键的内容隐藏在sjaregb1.h里。暂不公开。

即:“为什么initial( )参数中可以直接输入波特率值?例如 5k/10k /20k/100k/400k/1M/......,它是怎么简单实现的?”

“不是我们做不到,而是我们想不到。”

使用特权

评论回复
5
wxj1952|  楼主 | 2007-5-4 21:09 | 只看该作者

看看与所有人不一样的答案。

没错,所有人都是那么做的。偏偏我懒得打字。又喜欢简约。宏定义太繁了/烦了。加上不喜欢与别人一样。所以,不是宏定义。也许从软件的角度不一定好。但是自己觉得简单,自己得意。再说,只有一个人想到的事情,即使很笨,也可以欣赏。

网站上的资料,输入的参数不是直接波特率值吧,好像还要查一个代换表。

使用特权

评论回复
6
wxj1952|  楼主 | 2007-5-6 21:56 | 只看该作者

愿意的话,把答案发给你。

愿意的话,把sjaregb1.h发给你!

使用特权

评论回复
7
桂电飞天鼠| | 2007-5-6 22:03 | 只看该作者

太感谢了~!

如果前辈愿意,那当然是非常高兴的事~!
我的C语言功底还很差,需要大量的练习才能提高;
觉得你的帖子所提到的观念都很特别,真正是与众不同的,自己思考的东西!

使用特权

评论回复
8
coolhu| | 2007-5-7 13:59 | 只看该作者

rt

不错

使用特权

评论回复
9
wxj1952|  楼主 | 2007-5-7 14:35 | 只看该作者

已发至信箱

助你毕设得优秀-- 一臂之力。

使用特权

评论回复
10
桂电飞天鼠| | 2007-5-7 17:25 | 只看该作者

感激不尽~!

信已收到,十分感谢前辈的支持~~!!

使用特权

评论回复
11
xhtxzxw| | 2007-5-10 12:22 | 只看该作者

不用宏定义行吗?

不用宏定义行吗?
用?代表整数值,?k --> 0,1,2,...,255,  似乎要用宏定义吧???

使用特权

评论回复
12
wxj1952|  楼主 | 2007-5-16 08:54 | 只看该作者

行吗?

    不用宏定义行吗?除了写255条 #define XX YY,没别的方法?是C语言功能太少?有些好书现在好像买不到了,例如《C语言详解》。

使用特权

评论回复
13
tang219| | 2007-5-30 22:14 | 只看该作者

你好 前辈

看了您的大作  还不是太懂  对于CAN刚上手 能把你的sjaregb1.h发给我么 
谢谢   
我的邮箱:applelee1106@eyou.com

使用特权

评论回复
14
iamxzg| | 2007-7-17 22:05 | 只看该作者

晚生来晚了

 wxj1952前辈:
    您好,我刚接触CAN,很多概念性的东西还不懂,最初的感觉是一头雾水分不清方向.现在回贴,不知前辈还能百忙抽空前来看看?迫切希望前辈得到指教,不胜感激.同时恳请您把sjaregb1.h发给我,晚生在此谢了.我会尽一切所能,把它学好~!

使用特权

评论回复
15
泥巴| | 2007-7-18 16:49 | 只看该作者

给我也发一个,谢谢

使用特权

评论回复
16
sfxboy| | 2007-7-19 00:17 | 只看该作者

大大也发份给我吧.谢谢

请大大也发一份给我,初学者.fxshi@163.com.万分感谢

使用特权

评论回复
17
iamxzg| | 2007-7-19 20:52 | 只看该作者

感谢前辈

无以表达此时心情,我会尽我最大所能去学好CAN~!
谢谢前辈!

使用特权

评论回复
18
whs310| | 2007-8-18 23:16 | 只看该作者

你好,能否给我一份

我是一个新手,现在想can的开发能否给我一份

使用特权

评论回复
19
sn54| | 2008-9-26 11:33 | 只看该作者

找peliCAN的例子

大侠们,有没有peliCAN的例子,
sn54sn54@qq.com

使用特权

评论回复
20
ryanchia| | 2012-10-23 17:53 | 只看该作者
楼主 您好!
最近 一直在摸索CANBUS,用的是SJA1000,想做个简单的自收自发,但是参考一些例称 ,还是不能完成,希望可以得到你的帮助。
    能否将你的sjaregb1.h 发我一份  jiaruiqiang@126.com  谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

757

帖子

1

粉丝