基于P89C668单片机的CAN总线接口设计

发布者:乐基儿vos最新更新时间:2012-02-24 来源: dzsc关键字:计算机系统  P89C668  SJA1000  CAN总线 手机看文章 扫描二维码
随时随地手机看文章
  CAN(Controller Area Network)总线,又称控制器局域网,属于现场总线的范畴,是一种有效支持分布式控制或实时控制的串行通信网络.与其它几种现场总线相比,CAN 总线是最容易实现、价格也最为低廉.由于其性能好,可靠性高、设计灵活,现已广泛应用于工业现场控制、智能大厦、小区防范、交通工具、医疗仪器、环境监控等众多领域.

  CAN总线规范已被国际标准化组织(ISO)定为国际标准,CAN协议也是建立在国际标准化组织的开放系统互连参考模型(OSI)基础上的.CAN总线主要工作在数据链路层和物理层,用户可在其基础上开发适合系统实际需要的应用层通信协议,由于CAN总线的可靠性高,使应用层通信协议得以大大简化.目前市场上有多种不同型号的CAN控制器,它们实现CAN协议部分电路的结构和功能大多相同,只是与单片机接口部分的结构和方式有一些差异.

  为了提高硬件电路的效率,简化电路设计上的复杂性,保证电路的电气兼容性,本文采用PHILIPS公司生产的P89C668单片机和CAN控制器SJA1000设计了CAN接口节点电路,并介绍了相关的软件设计.

1 CAN总线节点接口硬件电路设计

  CAN节点接口硬件电路原理如图1所示.采用PHILIPS公司生产的P89C668单片机、CAN控制器SJA1000和CAN总线收发器PCA82C250设计接口电路来实现CAN总线通信.

图1 CAN总线接点接口硬件电路原理

  P89C668单片机内带64kB Flash存储器,该存储器既可并行编程,在系统编程ISP中也可串行编程,在实际的成型产品中可通过ISP升级用户程序. 在Boot ROM程序中,可通过一个默认的串行下载器(UART)对Flash存储器作ISP编程,而在Flash代码区中并不需要调用下载器的代码,用户程序可通过调用在Boot ROM中的标准子程序对Flash存储器擦除和再编程(即IAP).

  P89C688在6个时钟周期内执行一条指令,一个OTP位让用户可选择传统的12个时钟周期.P89C688用先进CMOS工艺制造,是80C51单片机家族的衍生品,其指令集和80C51相同.该单片机有四个8位I/O口,三个16位定时器/事件计数器,多中断源,四个优先级,可嵌套中断结构,一个增强型UART和片内振荡器以及时序电路.P89C668新增特性使其成为一个功能强大的单片机,可为某些应用提供PWM、高速的I/O和加/减计数. [page]

  SJA1000 是PHILIPS 公司生产的独立CAN 通信控制器,它既支持CAN2.0A,又支持CAN2.0B,与PCA82C200 CAN 控制器兼容(BasicCAN),并可替代PCA82C200;增加了一种新的工作模式PeliCAN,使其支持具有很多新特性的CAN2.0B 协议;集成了CAN 协议的物理层和数据链路层功能,可完成对通信数据的成帧处理;具有多主结构、总线访问优先权、硬件滤波等特点.

  PC82C250为CAN总线收发器,是CAN 控制器和物理总线的接口,提供对总线的驱动发送能力、对CAN控制器的差动发送能力和对CAN控制器的差动接收能力.它具有很强的抗瞬间干扰和保护总线的能力,以及三种不同的工作方式即高速、斜率控制和待机,如表1所示.总线上的某一个节点掉电不会影响总线,在40米内应用的速度可达1M baud,最多可挂110个节点.


从图1 可看出,该硬件电路主要由单片机P89C668、CAN 独立控制器SJA1000 和CAN 收发器PCA82C250 组成.
单片机P89C668 负责对SJA1000 进行初始化,通过控制SJA1000实现数据的发送与接收等通信任务.
SJA1000 的AD0~AD7连接到P89C668 的P0口;
CS连接到P89C668的P1.1,P1.1 为0 时选中SJA1000,可控制SJA1000;
SJA1000 的RD/E、WR、ALE/AS 分别连接到P89C668 的RD(P3.7)、WR(P3.6)、P1.0;
SJA1000的(INT)连接到P89C668 的P3.2(INT0),这样,P89C668 可以通过中断方式访问SJA1000;
SJA1000的模式选择引脚MODE 接高电平时选择Intel 模式;
为了保证时钟同步,SJA1000 的CLKOUT 引脚使能,向P89C668 提供时钟源.

2 CAN 总线节点接口软件设计

  实现CAN 总线通信,要对CAN 总线节点接口设计相应的总线通信程序;在总线通信之前,必须进行SJA1000 控制器初始化.在上电或复位后,单片机通过运行其自身复位程序初始化SJA1000.CAN总线通信程序大致由SJA1000 初始化、发送和接收三部分组成.以下分别对他们进行简单的描述.

2.1  SJA1000 初始化
  在上电后,CAN 控制器的RST 脚获得一个复位脉冲,使之进入复位模式.在开始对SJA1000 各个配置寄存器进行设定之前,主控制器通过读复位/请求标识来检测SJA1000是否进入复位模式.为了避免微控制器的上电复位时间和SJA1000 的复位时间的偏差,微控制器要等待SJA1000 完成上电复位后才能对SJA1000 配置寄存器进行配置,存有配置信息的寄存器只能在复位模式下才可进行写入.SJA1000 初始化程序在复位模式下,主控制器要配置下面的寄存器:
  (1)模式寄存器(仅在PeliCAN 模式下选择应用操作模式)
接收过滤模式   
自检测模式   
侦听模式
  (2)时钟分频寄存器
使用BasicCAN 或PeliCAN 模式
CLKOUT 引脚是否可以使用
CAN 输入比较器是否被跳过
TX1 输出是否专门用于接收中断输出
  (3)总线定时寄存器
定义总线的位速率
定义位周期内的采样点位采样点
定义一个位周期的采样数量
  (4)接收代码和接收掩码寄存器
定义要接收消息的接收代码
定义与接收代码相关位进行比较的接收掩码
  (5)输出控制寄存器
定义CAN 总线输出引脚TX0 和TX1 的配置

  在将这些配置信息配置到SJA1000配置寄存器后,通过消除复位模式,请求使SJA1000进入操作模式.一定要确保复位标志真的被删除,并且在没有进行CAN 总线通信前进入操作模式,这可以通过读该标志来实现. 当硬件复位处于挂起状态,即CAN 控制器的RST 引脚为低电平时,复位模式/请求标志不能被清除.

  下面是SJA1000 的初始化程序.
CAN_INI: MOV DPTR, #MOD; 模式寄存器
MOV A, #01H
MOVX @DPTR, A
NOP
MOVX A, @DPTR
ANL A, #01H
JZ CAN_INI; 等待SJA1000 进入复位模式
MOV DPTR, #BTR0; 总线定时0
MOV A, #BandRate0
MOV DPTR, #BTR1; 总线定时1
MOV A, # BandRate1
MOV DPTR, #OCR; 输出控制寄存器
MOV A, #1AH
MOVX @DPTR, A
MOV DPTR, #CDR; 时钟分频器
MOV A, #0C0H
MOV DPTR, #ACR0; 接收代码寄存器ACR0
MOV A, #ModuleAddress; 设置为模块的地址
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOV @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
MOV DPTR, #AMF0; 接收掩码寄存器AMF0
MOV A, #0FFH; 接收代码设置为 [page]
0X0FFFFFFFF
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
MOV DPTR, #IER ; 中断使能寄存器IER
MOV A, #09H; 允许接收中断和数据溢出中断
MOV DPTR, #CMR; 命令寄存器
MOV A, #04H; 释放接收缓冲器
MOVX @DPTR, A
LOOP: MOV DPTR, #MOD
MOV A, #08H; 设置SJA1000 工作模式为普通模式,单滤波接收
MOVX @DPTR, A
MOV DPTR, #MOD
MOV A, @DPTR
ANL A, #01H
JNZ LOOP; 等待复位标识被清除
RET

2.2 CAN 总线发送程序
  对SJA1000控制器进行初始化建立CAN总线通信后,就可以通过CAN总线发送和接收报文.发送程序负责节点的报文发送.发送报文时,用户只需将需要发送的数据按一定的格式组合成一帧的报文,并送入SJA1000发送缓存区中,然后启动SJA1000发送即可.发送程序分发送数据帧和远程帧两种.通过设置RTR以决定是发送数据帧还是远程帧.

  SJA1000的报文主要有中断控制和查询两种发送方式.主动发送报文建议采用查询方式,一次发送不成功,可再次发送,这样发送程序的处理比较简单,可采用查询SJA1000控制部分状态标识符的方法.下面给出以查询方式发送报文的发送程序.
CAN_SEND: MOV DPTR, #SR; 状态寄存器SR
MOVX A, @DPTR;
ANL A, #04H
JZ CAN_SEND; 等待发送寄存器释放
MOV R7, #0AH
MOV R0, #TXB_Data; 待发送数据的首地址
MOV DPTR, #TXB_Addr; 发送寄存器的基地址
LOOP1: MOV A, @R0; 将数据写入发送寄存器
MOVX @DPTR, A
INC DPTR
INC R0
DJNZ R7, LOOP1
MOV DPTR, #CMR; 命令寄存器
MO A, #01H; 发送请求命令
MOVX @DPTR, A
RET

2.3 CAN总线接收程序
  SJA1000 根据规则自动接收消息,接收到的消息放入接收缓冲器,同时接收缓冲器状态标志位RBS 置为1,接收程序根据RBS 值来决定接收报文与否.SJA1000 报文的接收也有两种方式:中断和查询.对通信的实时性要求不高时,可采用查询方式,否则采用中断方式.以下给出中断接收方式程序.

CAN_INT: CLR EA; 关所有中断
MOV DPTR, #IER; 中断寄存器IER 使能
MOVX A, @DPTR
MOV R6, A; 保存SJA1000 中断允
MOV A, #00H ; 重设SJA1000 中断允许模式为不允许任何中断
MOVX @DPTR, A
LCALL RECEIVE; 接收信息
JZ ReceivOk; 接收到的信息正确则跳转,否则进行错误处理.. ..; 错误处理
ReceivOk: MOV DPTR, #IER
MOV A, R6; 恢复SJA1000 中断允许模式
MOVX @DPTR, A
SETB EA; 开放中断
RETI
RECEIVE: CLR A
MOV DPTR, #SR; 状态寄存器SR
JZ ERROR; 不是正常的消息接收中断则跳转
LOOP2: MOV DPTR, #RXB_Addr; 接收寄存器的基地址
MOV R1, #RXB_Data; 存放所接收数据的首地址
MOV R7, #0AH
LOOP3: MOVX A, @DPTR; 接收数据
MOV @R1, A; 保存数据
INC DPTR
INC R1
DJNZ R7, LOOP3
MOV DPTR, #CMR; 命令寄存器
MOV A, #0X04; 释放接收缓冲器
MOVX @DPTR, A
MOV DPTR, #SR
MOVX A, @DPTR
CJNE A, #01H, LOOP2; 等待接收队列为空
MOVD PTR, #IR; 中断寄存器IR
MOVX A, @DPTR; 清空SJA1000 的接收中断标识位
CLR A; 返回值ACC=0,表示接收消息正确
LJMP END_RECEIVE
ERROR: .. ..; 接收消息错误处理
MOVA, #01H; 返回值ACC=1,表示接收消息不正确
NED_RECEIVE: RET

3 结语

  以上介绍了P89C668单片机及其与CAN控制器SJA1000之间的接口方法,并给出了SJA1000在PeliCAN模式下的SJA1000初始化程序、发送程序和接收程序.可在此基础上实现更复杂的CAN总线通信处理,如报警处理、错误处理等. 
关键字:计算机系统  P89C668  SJA1000  CAN总线 引用地址:基于P89C668单片机的CAN总线接口设计

上一篇:用87C196NT单片机实现CAN总线通信
下一篇:基于CAN总线的87C196CA单片机串行通讯的应用

推荐阅读最新更新时间:2024-03-16 12:54

基于CAN总线智能节点的设计
    CAN总线最早是德国的BOSCH公司为解决汽车的监测,控制系统而设计的。现在,已由汽车行业扩展到过程工业,机械工业,机器人和楼宇自动化等领域。总结各个领域中的应用实例,CAN通信设计的关键在于各个通信模块的设计与实现。通信信号一般有模拟量输入/输出(电压电流采集模块),开关量输入\输出,数字量输入\输出(如计数器模块)等。本文重点就模拟量输入模块和开关量输入模块的设计,采用具有CAN接口的C8051F550单片机作为系统设计的从节点,用来采集模拟量和开关量,实现与上位机中央控制器的通信。 1 CAN总线通信网络系统     如图1所示,本设计中通过带有终端器(120欧电阻)的通信介质(双绞线)将上位机和底层模块连接
[嵌入式]
基于CAN总线的电力抄表系统设计
    CAN总线简介     CAN为多主方式工作,网络上任一节点均可以在任意时刻主动向网络上其他节点发送信息;CAN网络上的节点信息分成不同的优先级,可满足不同的实时要求; CAN采用非破坏性总线仲裁技术;CAN只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据;CAN的直接通信距离最远可达 10km(速率5kbit/s以下),通信速率最高可达1Mbit/s(此时通信距离最长为40m);CAN的每帧信息都有CRC校验及其他检错措施,保证了数据出错率极低;CAN的通信介质可为双绞线、同轴电缆或光缆,选择灵活。     系统方案设计     系统由以下部分组成:脉冲电度表、电量采集器、CAN转换
[嵌入式]
CAN总线在流光放电等离子体烟气脱硫监控系统中的应用
摘要:介绍了流光放电等离子体烟气脱硫的原理和工艺流程,设计了一套基于CAN总线的微机监控系统,并给出了系统的软硬件设计方案,在实验平台上取得了良好效果。   关键词:CAN总线 流光放电等离子体 烟气脱硫 监控系统 随着我国经济的发展,能源消费带来的环境污染也越来越严重。燃煤烟气中排放的二氧化硫和氮氧化物占全国总排放量的90% ,是造成大气污染、酸雨和温室效应的主要根源。目前世界上比较先进的烟气脱硫(Flue Gas Desulphurization,FGD)技术中比较典型的方法有湿式石灰-石膏/氨催化还原法、电子束/氨法、电晕放电/氨法,而流光放电等离子体烟气脱硫技术是电晕放电法中具有强大市场潜力和应用前景的烟气脱硫新工艺
[应用]
浅析CAN总线与USB的转接技术
USB总线就是一种新型、快速、双向、同步传输、并可以热插拔的数据传输总线,它满足了人们对总线易用性、扩展能力强和低成本的要求,因此,USB在PC外设领域的传输速率从1.5Mbps的低速和12 Mbps的全速提高到如今的480 Mbps的高速数据传输。目前,USB总线已经逐渐成为计算机领域中应用最广泛的外设总线连接规范。 与此同时CAN(Controller Area Network)总线技术也日趋成熟,其传输距离远,传输速率高,抗干扰能力强,易于组网,而且节约成本,已被公认为是最有前途的现场总线之一,并在国内外控制领域获得了普遍重视。目前,德国现代汽车公司和欧洲其他几个主要汽车公司的车内控制系统全部采用CAN总线,国内的很多工业
[嵌入式]
基于CAN总线的GaAs光电阴极制备测控系统
   引言   GaAs光电阴极是一种负电子亲和势光电阴极,具有量子效率高、发射电子能量和角度分布集中的优点。         因而在微光像增强器、半导体敏感器件、自旋极化电子源等众多领域得到了广泛的应用 ,但GaAs光电阴极的制备过程却极为复杂,对制备工艺和条件都有严格要求。目前GaAs光电阴极的制备都主要依赖熟练操作人员进行手工操作,这种操作方式不尽浪费大量人力物力,而且制备质量和效率得不到保证。而在制备过程中普遍采用的在线光谱响应测试仪 ,只能用于阴极制备后的光谱响应曲线测试,评估阴极的制备质量,它对阴极制备过程中的许多其它信息量,如真空度、铯源和氧源电流等,都没有实时采集功能,更没有对铯(氧)源电流的计算机控制和制
[嵌入式]
基于C8051F040的CAN总线智能节点设计
引言 “X型火控系统”根据实际需要采用了CAN总线方式来实现其内部单体间的通信。CAN总线是一种用于各种设备检测及控制的现场总线,它是一种多主总线,在高速网络和低成本的节点系统中应用都很广泛。CAN总线与一般的通信总线相比,它的数据通信具有突出的可靠性、实时性和灵活性。其特点如下: *可以多主方式工作。 *CAN节点只需对报文的标识符滤波即可实现点对点、一点对多点及全局广播方式发送和接收数据。 *CAN总线通信格式采用短帧格式。 *采用非破坏性总线仲裁技术。 *直接通信距离最大可达10km (速率5kb/s以下),最高通信速率可达1Mb/s (此时距离最长为40m),节点数可达110个,通信介质可以是双绞线、同轴电缆或光导纤维。
[工业控制]
基于S3C6410的CAN总线接口扩展方案
  本文介绍了一种基于S3C6410的CAN总线接口扩展方案,通过SPI接口对CAN接口进行扩展,并给出具体的硬件电路。重点研究了WINCE系统下独立CAN控制器MCP2515的驱动程序。结合CAN总线技术规范和MCP2515的特点设计了相关的软件代码,编写了CAN流接口驱动程序,实验结果表明,在WINCE系统下能够较好实现CAN总线的通信。   CAN是博世公司开发的一种串行通讯总线,主要是为解决现代汽车中不断增加的电子器件相互间的信息交换问题。CAN总线的数据通信在工业应用中相比其他总线在可靠性、实时性和灵活性等方面具有较大优势,凭借其优良的性能及独特的设计,在嵌入式开发中有着广泛的应用。随着现代汽车电子网络化的不断发展,车载
[单片机]
基于S3C6410的<font color='red'>CAN总线</font>接口扩展方案
BI Technologies的扼流圈能提高CAN总线信号完整性
TT electronics旗下BI Technologies公司推出HM67系列表面安装共模扼流圈。该产品适用于CAN总线应用中的信号滤波,已经过相关汽车制造商车辆总线和通信系统的认证。 四端子的HM67系列扼流圈共模电感值在5μH至4,700μH之间(100kHz、0.1V),漏感在0.08μH至2.802.80之间,额定电流范围在200mA至1,000mA间,直流阻抗范围在5.8mΩ至403mΩ间,绝缘强度为300Vdc。 HM67扼流圈工作温度范围在-40℃至125℃之间,最大温度上升率40℃,最高环境温度85℃。
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved