can总线通信说明书大学毕业论文

上传人:痛*** 文档编号:203458238 上传时间:2023-04-24 格式:DOC 页数:20 大小:228.50KB
返回 下载 相关 举报
can总线通信说明书大学毕业论文_第1页
第1页 / 共20页
can总线通信说明书大学毕业论文_第2页
第2页 / 共20页
can总线通信说明书大学毕业论文_第3页
第3页 / 共20页
点击查看更多>>
资源描述
机电工程学院毕业设计说明书设计题目: CAN总线通信接口及程序设计 2012 年 5 月 21 日目 次1 CAN总线介绍1.1 CAN总线的发展背景随着汽车产业的发展,需要一种更利于信息数据传输交换的通信协议。汽车中的各种电子控制系统需要较高的技术支持,而随着汽车的发展,汽车是否安全、是否便利、成本是否低、是否舒适都已成为人们首要考虑的事情。但是传统的汽车控制技术已不足以满足人们越来越高的要求,也已不适以汽车的发展方向。20世纪80年代,德国Bosch公司着手研究用于汽车产业的新的通信协议及控制方法,并首先提出了CAN总线控制系统。这一崭新的网络协议使得汽车产业得到了飞速的发展。CAN总线最明显的特点是最大程度地减少了汽车控制系统中的线束的数量及长度,另外还大大提高了系统控制的可靠性和稳定性。在没有CAN总线协议之前,一辆汽车中用于各种控制通信的线束的总长度达3公里之长,严重影响了汽车的通信速度和通信精度。并且还使汽车的整体结构繁冗复杂,可靠性低,成本高,难以维护。因此CAN总线的出现无疑具有重大的意义和作用。作为一种新的网络通信协议,CAN总线不仅减少了汽车中线束的长度,还提高了汽车的整体性能,极大的促进了汽车产业的发展。CAN总线刚被提出的时候,仅仅应用于汽车产业上,但CAN总线通信协议的性能和可靠性经过多年的检验,已被应用于越来越多的产业,比如航空、船舶、机床等产业设备方面。仅仅二十多年的发展,CAN总线便已成为自动化领域技术的潮流。CAN总线是串行通信网络。传统运用的是基于R线构建分布式控制系统,这种传统的控制系统是基于通信节点的地址编码的,因此其结构复杂,直接导致系统的通信效率不高,并且控制的可靠性能低。CAN总线通过每个网络节点进行数据通信,每个节点可以互相收发数据,CAN总线协议对通信数据编码,不对节点地址编码,使各个节点可以同时接收到相同的数据,大大增强了数据通信的实时控制及传输性能。另一方面CAN总线使用起来非常方便。CAN总线的结构十分简单,仅有2根线(CANH和CANL)和外部设备相连,但CAN总线的内部却有非常复杂和智能的通信模块,可以方便快捷准确无误的进行数据的自由通信。1.2 CAN总线的通信层介绍CAN总线是串行通信协议,可以实现各个节点在数据传输时的自由通信及互不影响,因此CAN总线应具有标准的通信协议,这样可以使CAN总线更加方便的应用于控制系统中。为了实现这样的设计理念,根据ISO/OSI参考模型,CAN总线包含ISO/OSI参考模型中的数据链路层(Data Link Layer)和物理层(Physical Layer)。(1)数据链路层数据链路层连接硬件和软件的结合层,主要作用是通过各种数据协议而实现数据的传输。CAN总线中的数据链路层又可以分为两个子层:逻辑链路控制子层(LLC)和介质方向控制子层(MAC)。逻辑链路控制子层是数据链路层的核心层,它为远程数据的传输提供服务,控制数据的逻辑传输。()物理层物理层是OSI参考模型中的最底层,主要作用是规定节点电气方面的特征。为了实现数据的自由收发,在同一网络中的物理层应该是处处一样的。1.3 CAN总线报文帧格式CAN总线上的数据信息都是以报文的形式发送的。报文的格式并不唯一,而是有几种不同的格式,但是报文的长度却受到电气及内部控制的限制。CAN总线的报文传输也就是帧的传输,帧是CAN总线传送数据单位。帧也有不同的格式,主要区别在于标识符长度不同。在CAN2.0A协议下帧具有11位标识符,叫作标准帧;而在最新的CAN2.0B协议下具有29位标识符的帧叫作扩展帧。为了实现数据的传输和控制,CAN总线报文传输具有4种不同类型的帧结构:数据帧、远程帧、错误帧、过载帧。其中数据帧的结构图如图1-1所示。数据帧帧起始仲裁域控制域数据域CRC域应答域帧结尾帧间空间帧间空间图1-1 数据帧的结构详细的CAN总线报文帧结构可以参阅参考资料61.4 CAN总线的优势CAN总线已经成为现在控制领域最流行的控制方案,只所以从CAN总线诞生以来仅仅二十年间便已成为公认的最好的工业生产控制方案,是因为CAN总线相比其他控制总线在通信能力和速度方面具有明显的优势。虽然现在还有很多基于R线组建的工业控制系统,但它不具备CAN总线的诸多优点。相比于其他的控制系统,CAN的优势在于:(1)CAN总线是多主工作方式,CAN总线舍弃了传统控制系统中站地址编码方法,而是对通信的数据进行编码,也就是说,CAN总线的节点是根据传输数据信息确定是否接收数据。这样可以简化控制系统。从面增强了CAN总线网络的数据通信能力,也提高了系统的可靠性。(2)CAN总线的多个节点同时向总线上发送数据时,不会致使总线出现短路现象。因为CAN总线是通过CAN收发器芯片的两个输出端CANH和CANL和物理总线连在一起的,但CANH端只能是高电平或者悬空状态,CANL只能是低电平或者悬空状态。这样就使CAN节点同时向总线发送数据时,不会短路。另外,CAN总线还有节点出现严重错误时自动关闭节点功能,以免其他节点受到影响。32 CAN总线通信芯片简述2.1 CAN总线控制器SJA1000简介CAN总线只有OSI参考模式中的数据链路层和物理层,但要实现这两层的功能,必须制定相应的协议和控制规则。通过CAN总线控制器可以实现对CAN总线的控制及数据通信。CAN总线控制器是一块可编程的芯片,它与微处理器相接。通过对CAN总线控制器的编程,实现数据的通信。现在有许多类型的CAN控制器芯片,但工业上的控制系统最常用的还是SJA1000 CAN控制器,下面简要介绍SJA1000 CAN控制器。SJA1000是Philips半导体公司研发的一种新型的CAN控制器,也是该公司PCA82C200 CAN控制器的替代产品。SJA1000中还加入了一种新的操作模式,PeliCAN模式,相比于此前的BasicCAN模式,这种模式支持最新的CAN2.0B协议。为了使SJA1000兼容于PCA82C200芯片,SJA1000和PCA82C200相兼容,即SJA1000 CAN控制器既有BasicCAN模式也有PeliCAN模式。SJA1000的基本特性有:扩展的64字节接收缓冲器、同时支持CAN2.0A和CAN2.0B协议、同时支持11位和29位标识码、通信速率可以达到1Mbps。另外,PeliCAN模式下还有一些新的功能,如扩展到8个字节的验收滤波器、自检测等功能。对于SJA1000工作在BasicCAN模式还是工作在PeliCAN模式,即工作方式的选择是由时钟分频寄存器(CDR)中的CAN模式位控制的。通电默认的工作方式是BAsicCAN模式。验收滤波器(Acceptance Filter)是SJA1000中的核心寄存器,利用它,可以接收到预定中的数据。验收滤波器又分为验收代码寄存器(ACR)和验收屏蔽寄存器(AMR)。SJA1000中有个ACR(ACR0、ACR1、ACR2、ACR3)和个AMR(AMR0、AMR1、AMR2、AMR3)。标识符也由原来的11位扩展到29位,而滤波方式也有两种,单滤波模式和双滤波模式(由模式寄存器中的AFM位决定)。需要接收的报文的标识符存于验收代码寄存器中,相应的屏蔽位存放在验收屏蔽寄存器中。只有在发送的报文的标识符与节点的标识符和AMR的相应位一致的情况下,节点才会接收报文。下面主要介绍双滤波模式下扩展帧格式的验收滤波器的设置。双滤波模式,顾名思义,就是有两个滤波器,滤波器1由ACR0、ACR1和AMR0、AMR1组成;滤波器2由ACR2、ACR3和AMR2、AMR3组成。接收报文时报文中的标识符信息要与两个滤波器中的值比较,但并不是两个滤波器都必须通过才接收报文,而是只要有一个滤波器通过验收就可以接收报文了。2.3 PCA82C250 CAN收发器介绍CAN总线收发器是CAN控制器与物理总线之间的接口器件,它对总线提供差动发送和接收数据功能。CAN总线收发器也决定着系统的安全性、可靠性和兼容性的优劣。PCA82C250具有许多优越的性能。在本次设计中PCA82C250仅仅用到了短路保护功能。PCA82C250通过对引脚Rs的不同接法可以得到3种不同的工作模式:高速模式、斜率控制模式和待机模式。高速模式时VRs0.3Vcc,VRs与地之间接1个0-1.8K的电阻可以使PCA82C250工作在高速模式;斜率控制模式时与地之间接1个16.5K-140K的电阻;待机模式时Rs保持高电平,VRs要大于0.75Vcc。53 CAN总线的通信设计及方案3.1 CAN总线通信的技术要求及目标本次设计主要是利用51单片机和CAN芯片SJA1000实现点对点的相互通信。SJA1000是CAN控制器,主要用于一般的区域网络控制。51单片机与SJA1000相连,SJA1000内的数据存储地址相当于51单片机的片外存储器,利用51单片机的片外寻址,对SJA1000内的各个寄存器进行读写,进而控制SJA1000实现CAN总线的点对点的通信。另外,还需要接入CAN收发器82C250来实现CAN总线的发送和接收功能。本次设计的目标是将51单片机、CAN控制器SJA1000和CAN收发器82C250连在一起,编写程序,实现点对点通信的收发。3.2 CAN总线通信接口方案CAN总线的硬件电路的节口非常简单,只需要微处理器和CAN控制器及CAN收发器便可构成。CAN总线通信接口通常情况下有2种实现方式:一种是由微处理器、独立的CAN控制器和CAN收发器组成的硬件电路;另一种是集成CAN控制器的单片机和CAN收发器构成的硬件电路。CAN总线在经过二十多年的发展,已经产生了许多类型的CAN总线协议的芯片,其中有独立的CAN控制器芯片,也有集成CAN控制器的微处理器芯片。独立的CAN控制器有Philips公司的PCA82C200、SJA1000,Intel公司的82526、82527等。集成CAN控制器的微处理器也有很多,比如Philips公司的P8XC592/598等。常用的CAN收发器有Philips公司的PCA82C250等。方案1:由51单片机、SJA1000 CAN控制器和PCA82C250 CAN收发器组成的CAN通信节点采用AT89C51、SJA1000 CAN控制器和 PCA82C250 CAN收发器设计CAN通信节点。这种方案的设计思路很简单,控制过程也比较方便。通过AT89C51单片机编程控制SJA1000的初始化及收发数据。SJA1000负责CAN总线上的数据的处理,PCA82C250收发器负责传递数据。方案2:由P8xC591芯片控制的CAN节点通信Philips公司的P8xC591是集成CAN控制器的单片机,这个方案中的节点只需要P8xC591和82C250 CAN收发器,CAN控制器内置于P8xC591芯片中。虽然CAN控制器内置于P8xC591中,但P8xC591还保留SJA1000的一切功能,甚至比SJA1000的功能更加强大,这种方案还大大简化了硬件系统电路。方案比较:方案2中,集成CAN控制器的单片机P8xC591因为其内部已经内置了CAN控制器,所以不需要再进行电路设计,这样难以深入理解CAN总线的原理。P8xC591芯片是一种高性能通信芯片,价格比较高。在一般的系统控制中,实现简单的控制就可满足需要,常采用单片机和独立的CAN控制器作为CAN节点进行通信,这样成本低,也可以更好的了解CAN总线的通信协议。另外,市场上有大量的单片机,使用独立的CAN控制器SJA1000可以根据控制要求选择适用的单片机,从而更好的达到控制要求。因此,本设计采用方案1。3.3 CAN通信节点硬件电路设计节点是网络上信息的接收和发送站。我们平常所用的节点都是由微处理器、CAN控制器和CAN收发器组成的。本设计中的硬件电路原理图如图3-1所示。图3-1 CAN总线电路原理图由图3-1可以看出,电路主要由AT89C51单片机、SJA1000 CAN控制器、PCA82C250 CAN收发器组成。由AT89C51控制SJA1000,实现SJA1000的初始化、接收和发送数据。SJA1000的AD0AD7分别接到AT89C51的P0口,CS接到AT89C51的P2.0。当CS为低电平时(P2.0为),CPU的片外存储器地址可选中SJA1000,这样CPU就可以通过这些地址对SJA1000相应的寄存器进行读写操作。SJA1000的WR、RD、ALE分别与AT89C51的对应引脚相连接,INT接AT89C51的INT0引脚。对于一些较长距离通信的场合,要保证通信的可靠性和准确性,一般不直接将SJA1000的TX0和RX0和82C250的TXD和RXD相接。而是通过高速光耦6N137后再与82C250相接。这样的好处是大大增强了CAN总线节点的抗干扰能力。但在本次设计中并没有采用6N137进行电气隔离,而是直接将SJA1000与82C250相接,因为本次设计不是远距离输送数据,相应的节点的抗干扰能力都可以满足设计要求,所以不需要再接入6N137,这样可以在满足控制要求的情况下简化系统的设计。对于82C250与CAN总线的接口也要进行一些必要的防护措施。82C250的CANH和CANL引脚是通过一个5的电阻与CAN总线相接的,这个5的电阻可以起到一定的限流作用,从而保护82C250免以受到过大电流。84 CAN总线通信的软件设计CAN总线节点的软件设计一般包括三部分,即SJA1000的初始化、报文发送和报文接收。这三部分是保证CAN总线通信的基础,总程序见附录1。下面章节将对这三部分的通信设计进行详细的说明。4.1 SJA1000的初始化过程SJA1000的初始化只能在复位模式下进行。初始化过程主要是对一些寄存器设定初值,其中包括SJA1000工作方式的设置、AF的设置、波特率的设置和中断允许寄存器的设置。在CAN总线通信中,只有先进行SJA1000的初始化才能保证CAN总线通信的顺利进行。完成SJA1000的初始化后,SJA1000还要返回到工作模式,然后开始进行通信。4.2 SJA1000的发送子程序SJA1000初始化之后,就可以进行通信的收发程序设计了。发送子程序控制节点报文的发送。将要发送的报文放在发送缓存区,然后通过中断程序判断是否向总线发送数据。但是在将报文送入SJA1000的发送缓存区之前,先要对一些寄存器进行判断,然后才能开启发送。本次设计中当SJA1000接收到报文后,应将接收到的报文放于发送缓存区中,然后再将此报文发送出去并在相应的界面上收到这组报文。4.3 SJA1000的接收子程序接收子程序负责节点报文的接收。在处理接收报文的同时,会出现各种情况。要根据状态寄存器(SR)和命令寄存器(CMR)进行读写操作,然后判断需要接收的数据,完成接收过程。本次设计中从串口工具界面上输入一组数据,然后发送到总线上,经过验收滤波器验收过滤之后,在相应的节点上接收到这组数据,并存入接收缓冲区。9图4-2 SJA1000发送子程序流程图设计总结在设计之前,我没有听说过CAN总线通信协议。自从看到CAN总线通信设计这个设计后,经过多方查阅相关资料和文献,我初步了解了CAN总线通信的有关协议和通信原理。CAN总线的通信是借助单片机对CAN控制器进行相应的编程,以此实现数据的通信。通常情况下,CAN总线通信可以达到很高的通信速率,满足大多数工业控制的要求,特别是虽着CAN控制器的发展,以及CAN通信协议的标准化,使CAN总线越来越多地运用于各行各业的控制系统中。本次设计用AT89C51微处理器、SJA1000 CAN控制器、PCA82C250 CAN收发器组成CAN通信节点来进行CAN通信节点数据的收发。经过仔细编程和调试,终于实现了CAN节点之间数据的收发通信。但本次设计也有不足之处,我所设计的硬件电路图是极其简单的系统,其中没有包含抗干扰能力措施和防护措施,只能进行短距离的数据通信,若进行长距离的数据通信,可能受到各种电磁信号的干扰和辐射。若要进行长距离的通信,在本次设计的基础上还需要增加一些防护措施,比如在CANH和CANL与地之间各接一个小电容,可以有效的防止电磁辐射。总之,通过本次设计我还是学到了很多新的知识。以前根本没有接触过CAN总线,现在我已经能够看懂简单的CAN总线通信程序和进行一些简单的CAN通信设计。另外我还要感谢张老师在本次毕业设计中对我的指点和帮助,同时也要感谢同学们对我的帮助。参考文献1 倪志莲.单片机应用技术(第2版).北京理工大学出版社.2011.2 邬宽明.CAN总线原理和应用系统设计北京:北京航空航天大学出版社,1996.3 邬宽明.现场总线技术应用选编2M.北京:北京航空航天大学出版社,2004.4 李正军.现场总线及其应用技术M.北京:机械工业出版社,2005. 5 张培人,王洪波.独立CAN总线控制器SJA1000.国外电子元器件,2001.6 邹继军.现场总线CAN原理与应用技术.北京:北京航空航天大学出版社,2007.7 阳宪惠.现场总线技术及其应用M. 北京:清华大学出版社,1999.8 万福君,潘松峰.单片微机原理系统设计与应用.中国科学技术大学出版社,2001.9 冯博琴,吴宁.微型计算机原理及应用.清华大学出版社.2011.附录1(源程序)硬件连接 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 P10 P11 P12 P13 P14 P15 P16 P17 CSCCAN P32 INTCAN INT1 P33 RS P00 RSTCAN P34 ALE P07 WR P36 RD P37#include #include #include #include #include void main()unsigned char i;WDT_CONTR= 0x00; /关闭看门狗P2 = 0x21; /关显示R 接收UartInital();delayms(200);TestCan();void TestCan();sbit CANCSC = P32;sbit RSTCAN =P34; /=1 resetsbit CANALE = P07;sbit CANWR = P36;sbit CANRD = P37;#define REG_CAN_CDR 31#define REG_CAN_MOD 0#define REG_CAN_BTR0 6#define REG_CAN_BTR1 7#define REG_CAN_OCR 8#define REG_CAN_IER 4#define REG_CAN_CMR 1#define REG_CAN_SR 2#define REG_CAN_IR 3#define RBSR 16#define RBSR1 17#define RBSR2 18#define RBSR3 19#define RBSR4 20#define RBSR5 21#define RBSR6 22#define RBSR7 23#define RBSR8 24#define RBSR9 25#define RBSR10 26#define RBSR11 27#define RBSR12 28#define ALC 11 /11 / 仲裁丢失捕捉寄存器#define ECC 12 /12 / 误码捕捉寄存器typedef struct CANPeremeter unsigned char CanAddr;struct CANPeremeter CANPeremeter1;unsigned char RXD_flag =0;unsigned char Read_SJA1000(unsigned char Addr) unsigned char Buf; CANALE = 0; CANWR = 1; CANCSC = 1; CANRD = 1; CANALE = 1; P1 = Addr; CANALE =0; CANCSC =0; CANRD = 0; P1 = 0xff; Buf = P1; CANRD = 1; CANCSC =1; CANALE = 0; return(Buf);void Write_SJA1000(unsigned char Addr,unsigned char Data) CANALE = 0; CANWR = 1; CANCSC = 1; CANRD = 1; CANALE =1; P1 = Addr; CANALE = 0; /地址锁存 CANCSC =0; /片选 CANWR = 0; /写选通 P1 = Data; /数据 CANWR = 1; / CANCSC =1; CANALE = 0;void delayus(unsigned int t);void IO_Init() P0 = 0XFF; P1 =0XFF; P3 =0XFF; P4 = 0XFF; P0M0 = 0X00; P0M1 = 0X00; P1M0 = 0X00; P1M1 = 0X00; P3M0 = 0X00; P3M1 = 0X00; EX1 = 1; IT1 = 0;/CAN总线接收中断 /IT0 = 1;/外部中断0负边沿触发 /EX0 = 1;/打开外部中断0 EA = 1; /打开总中断unsigned char RX_buffer15;void CAN_RXD( void ) interrupt 2/接收数据函数,在中断服务程序中调用 unsigned char Buf; EA = 0;/关CPU中断 IE1 = 0; Buf=Read_SJA1000(REG_CAN_IR); if( Buf & 0x01) /IR.0 = 1 接收中断LED = 0; RX_buffer0 = Read_SJA1000(RBSR); RX_buffer1 = Read_SJA1000(RBSR1); RX_buffer2 = Read_SJA1000(RBSR2); RX_buffer3 = Read_SJA1000(RBSR3); RX_buffer4 = Read_SJA1000(RBSR4); RX_buffer5 = Read_SJA1000(RBSR5); RX_buffer6 = Read_SJA1000(RBSR6); RX_buffer7 = Read_SJA1000(RBSR7); RX_buffer8 = Read_SJA1000(RBSR8); RX_buffer9 = Read_SJA1000(RBSR9); RX_buffer10 = Read_SJA1000(RBSR10); RX_buffer11 = Read_SJA1000(RBSR11); RX_buffer12 = Read_SJA1000(RBSR12); RXD_flag = 1;/置有接收标志 Write_SJA1000(REG_CAN_CMR,0x04); Buf = Read_SJA1000(ALC);/释放仲裁随时捕捉寄存器 Buf = Read_SJA1000(ECC);/释放错误代码捕捉寄存器 Write_SJA1000(REG_CAN_IER,0x01);/ .0=1-接收中断使能; EA = 1;/打开CPU中断void delayus(unsigned int t) unsigned int i,j; for(i=0;it;i+) for(j=0;j10;j+) ;void SJA100HardWareRest() RSTCAN = 0; delayus(100); RSTCAN = 1; /reset delayus(100); RSTCAN = 0; delayus(100);void SJAEntryResetMode() unsigned char Judge; Judge = Read_SJA1000(REG_CAN_MOD); Judge = Judge|0x01; do Write_SJA1000(REG_CAN_MOD,Judge); while(Read_SJA1000(REG_CAN_MOD)&0x01)=0);void SJAQuitResetMode() unsigned char Judge; Judge = Read_SJA1000(REG_CAN_MOD); Judge = Judge&0xfe; do Write_SJA1000(REG_CAN_MOD,Judge); /Write_SJA1000(REG_CAN_MOD,0x00); 千万不要这样赋值,否则出错 while(Read_SJA1000(REG_CAN_MOD)&0x01)=1);#define uchar unsigned charvoid WriteSJARegBlock(unsigned char addr,unsigned char *Pbuf,unsigned char len) uchar i; for(i=0;ilen;i+) Write_SJA1000(addr+i,*Pbuf); Pbuf+; unsigned char Send_CAN_Filter8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; unsigned char Send_CAN_Info_ID5=0x88,0x00,0x00,0x00,0x00; /88: 扩展贞 8个数据 unsigned char Send_CAN_Data8=0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08;uchar BTR0,BTR1;SJA1000_Config_Normal()uchar RegBuf; BTR0=0x00; BTR1=0x1b; /设置为1M波特率通信 f=400k SJAEntryResetMode(); /进入复位模式 Write_SJA1000(REG_CAN_CDR,0xc0); /配置时钟分频寄存器,选择PeliCAN模式 f/10 RegBuf = Read_SJA1000(REG_CAN_MOD); RegBuf = RegBuf&0xf3; Write_SJA1000(REG_CAN_MOD,RegBuf); /配置模式寄存器,选择双滤波 WriteSJARegBlock(16,Send_CAN_Filter,8); /配置验收代码/屏蔽寄存器 Write_SJA1000(REG_CAN_BTR0,BTR0); /配置总线定时器0x00 Write_SJA1000(REG_CAN_BTR1,BTR1); /配置总线定时器0x14 Write_SJA1000(REG_CAN_OCR,0xaa); SJAQuitResetMode(); /退出复位模式,进入工作模式void TestCan() uchar canstatus,canstatus1; uchar canstatus2,canstatus3,canstatus4; IO_Init(); SJA100HardWareRest(); SJA1000_Config_Normal(); /SJA1000进入正常模式配置 Write_SJA1000(REG_CAN_IER,0x01); /使能SJA1000接收中断位 WriteSJARegBlock(16,Send_CAN_Info_ID,5); /扩展帧,向发送缓冲区写入5个数据 WriteSJARegBlock(21,Send_CAN_Data,8);/扩展帧,向发送缓冲区写入8个数据 while(1) if(RXD_flag=1) Send_CAN_Data0 = RX_buffer5; Send_CAN_Data1 = RX_buffer6; Send_CAN_Data2 = RX_buffer7; Send_CAN_Data3 = RX_buffer8; Send_CAN_Data4 = RX_buffer9; Send_CAN_Data5 = RX_buffer10; Send_CAN_Data6 = RX_buffer11; Send_CAN_Data7 = RX_buffer12; EA =0; WriteSJARegBlock(21,Send_CAN_Data,8);/扩展帧,向发送缓冲区写入8个数据 canstatus = Read_SJA1000(REG_CAN_SR); canstatus1 = Read_SJA1000(REG_CAN_MOD); canstatus2 = Read_SJA1000(15); /TX错误计数 canstatus3 = Read_SJA1000(14); /RX错误计数 canstatus4 = Read_SJA1000(12); /错误代码捕捉 if(canstatus&0x0c)=0x0c) /判断是否可以发送 Write_SJA1000(REG_CAN_CMR,0x01);/使能发送请求,发送数据 对发 while(canstatus&0x08) =0) canstatus = Read_SJA1000(REG_CAN_SR); EA =1; RXD_flag =0; UartSendbytes(RX_buffer,13); delayms(50); LED =1;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!