基于can总线的通信系统实现

上传人:Bod****ee 文档编号:47520271 上传时间:2018-07-02 格式:DOC 页数:12 大小:114.53KB
返回 下载 相关 举报
基于can总线的通信系统实现_第1页
第1页 / 共12页
基于can总线的通信系统实现_第2页
第2页 / 共12页
基于can总线的通信系统实现_第3页
第3页 / 共12页
基于can总线的通信系统实现_第4页
第4页 / 共12页
基于can总线的通信系统实现_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于can总线的通信系统实现》由会员分享,可在线阅读,更多相关《基于can总线的通信系统实现(12页珍藏版)》请在金锄头文库上搜索。

1、基于 CAN 总线的通信系统实现2901302001 景梦园CAN 总线通信是一个非常实用的技术,无论在工业,制造业还是生活中都有相关的应用。 这次我们所做的基于 CAN 总线的通信系统实现是一个最基本的应用。在这项技术中,我们 采用了 C51、SJA1000、TJA1050 三种芯片来实现两个节点之间的通信。为了方便演示,加 入 MAX232 芯片与单片机相连实现单片机与计算机的串口通信。1、CAN 总线节点技术: 控制局域网络 CAN(Controller Area Network)总线是德国 BOSCH 公司 20 世纪 80 年代初为 解决汽车中众多控制与测试仪器间的数据交换而开发的串

2、行数据通信协议。这是一种多主 总线,无论是在高速网络还是在低成本的节点系统,应用都很广泛。由于采用了许多新技 术及独特的设计,与一般的通信总线相比,CAN 总线的数据通信具有突出的可靠性、实时 性和灵活性,其主要特点如下:通信方式灵活,可以多主方式工作,网络上任意一个节点均可以在任意时刻主动向 网络上的其他节点发送信息,不分主从。CAN 节点只需对报文的标识符滤波即可实现点对点、点对多点及全局广播方式发送 和接收数据,其节点可分成不同的优先级,节点的优先级可通过报文标识符进行设置。 CAN 总线通信格式采用短帧格式,每帧字节数量多为 8 个字节,可满足一般工业 领域中控制命令、工作状态及测试数

3、据的要求,同时,8 个字节不会占用总线时间过长, 保证了通信的实时性。采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息出现冲突时,优先级 低的节点会主动退出数据发送,而优先级高的节点可不受影响地继续传输数据,大大节省 了总线冲突仲裁时间,在网络重载的情况下也不会出现网络瘫痪。直接通信距离最大可达 10 km (速率在 5 kb/s 以下),最高通信速率可达 1 Mb/s (此时距离最长为 40 m);节点数可达 110 个,通信介质可以是双绞线、同轴电缆或光导纤 维。CAN 总线采用 CRC 检验并可提供相应的错误处理功能,保证数据通信的可靠性,其 节点在错误严重的情况下具有自动关闭输出

4、功能,使总线上其他节点的操作不受影响。2、89C51 单片机芯片:89C51是一种带4K 字节闪烁可编程可擦除只读存储器的低电压、高性能 CMOS8位微处理器(MCU) ,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用 ATMEL高密度非易失存储器制造技术制造,与工业标准的 MCS-51指令集和输出管脚相兼容。由于将多功能8位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。3、SJA1000 芯片: SJA1000 是 PHILIPS 公

5、司生产的一种独立控制器,用于移动目标和一般工业环境中的区域 网络控制(CAN),支持 CAN 总线通信协议。 SJA1000 有两种工作模式:基本模式和增强模式。在基本模式下,SJA1000 只可收发标准数据帧(标准数据帧的标识符为 11 位),且错 误报警的极限值不能修改;在增强模式下,SJA1000 既可接收标准数据帧,也可接收扩展数 据帧(扩展数据帧的标识符为 29 位),可修改错误报警的极限值,并且 SJA1000 具有更加灵 活的滤波方式,能够根据数据帧的标识符有选择地接收一些数据帧。另外,增强模式下的 SJA1000 能够进行自检,即可通过自发自收一组报文来判断该控制节点是否正常地

6、挂在 CAN 总线上。使用者所要做的主要工作是 SJA1000 的初始化,收发报文的处理以及对节点脱离 总线的检测量与处理。4、TJA1050 芯片: TJA1050 是控制器区域网络(CAN)协议控制器和物理总线之间的接口,是一种标准的高速 CAN 收发器。TJA1050 可以为总线提供差动发送性能,为 CAN 控制器提供差动接收性能。 TJA1050 是 PCA82C250 和 PCA82C251 高速 CAN 收发器的后继产品。5、MAX232 芯片: MAX232 芯片是美信公司专门为电脑的 RS-232 标准串口设计的单电源电平转换芯片,使用 +5v 单电源供电。具有如下特性:1、符

7、合所有的 RS-232C 技术标准 2、只需要单一 +5V 电 源供电 3、片载电荷泵具有升压、电压极性反转能力,能够产生+10V 和-10V 电压 V+、V- 4、功耗低,典型供电电流 5mA5、内部集成 2 个 RS-232C 驱动器 6、内部集成两个 RS-232C 接收器电路图:C 语言程序:/一号单片机程序#include #include“lcd.h“ /#include“DS1820h“ #include“SJA1000gai.h“ #define key P22char table1=“Message is sending“; char table2=“Sengding suc

8、ceded“; char table3=“Receiveing succeded“;/定义 BUF 数据结构/*struct BASICCAN_BUFstruct unsigned char FrameID_H;/标识符高八位(信息功能 2 加节点号 6) unsigned char FrameLENTH;/数据长度码 unsigned char FrameKIND;/RTR 位(1 为远程帧,0 为数据帧) unsigned char FrameID_L3;/低 3 位(信息格式) unsigned char FrameData;/数据BASICCAN_FRAME,receive_BUF,s

9、end_BUF;*/*char temp_buffer2;/温度缓冲char disp_char=“Temperature is: “; char disp_temp= , , , ,., ,c,e,n,t,i,g,r,a,d,e; /温度显示存储; uchar dot_temp=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9; /温度精确到小数点一为以后void read_temp() init_ds1820();write_byte(0xcc);write_byte(0x44);delay1ms(500);init_ds1820();write_byte(0xcc);wri

10、te_byte(0xbe);temp_buffer0=read_byte(); temp_buffer1=read_byte(); void display_temp(void) uchar i; bit flag; if(temp_buffer1 temp_buffer0=temp_buffer0+1; if(temp_buffer0=0) temp_buffer1+; flag=1; disp_temp5=dot_temptemp_buffer0 temp_buffer1=(temp_buffer04)|(temp_buffer1 char table2=“Sengding succede

11、d“; char table3=“Receiveing succeded“;void send() uchar Data,sdat;uchar i,j;if(!key)Data=0xaa;for(i=0;i #include#define uchar unsigned char #define uint unsigned int sbit DQ=P33; void init_ds1820(); void delay_us(uchar us); void write_byte(uchar); uchar read_byte(); void delay5us(); void delay5us()

12、; void delay_us(uchar us)/调用函数 24us,每一次计数 16us(11.0592M 晶振)uchar i;for(i=0;i=1; uchar read_byte() uchar i;bit j;uchar dat=0;for(i=0;i=1;return(dat); LCD.H #include sbit RS=P25; sbit RW=P24; sbit lcden=P23;void delay1ms(int s); void write_com(int comd); void write_data(int dat); void init_lcd();void

13、delay1ms(int s) int i,j;for(i=0;i void init_ser(); void ser() interrupt 4; char flag,a; void init_ser() TMOD=0x20;/设置定时器 1 为工作方式 2TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; void ser() interrupt 4 RI=0; P1=SBUF; a=SBUF;flag=1; SJA1000GAI.H #include #include #define uchar unsigned cha

14、r #define uint unsigned int sbit CS=P27; /T1=P35; sbit WR=P36; sbit RD=P37; void nop(); void write_reg(uchar); uchar read_reg(uchar); void init_SJA1000NO1(); void init_SJA1000NO2();void nop() ; /写寄存器void write_reg(uchar adr,uchar date ) ALE=1;P0=adr;nop();ALE=0;CS=0;nop();WR=0;P0=date;nop();WR=1;n0p

15、;CS=1;nop(); /读寄存器 uchar read_reg(uchar adr ) uchar date;ALE=1;P0=adr;nop();ALE=0;CS=0;nop();RD=0;nop();date=P0;RD=1;n0p;CS=1;nop();retuen(date); /初始化 1void init_SJA1000_NO1() write_reg(0x00,0x01);/复位write_reg(0x04,0x42);/二号机验收代码write_reg(0x05,0xfd);/二号机验收屏蔽write_reg(0x06,0x00);/ 总线定时器 0write_reg(0x

16、07,0x00);/总线定时器 1write_reg(0x08,0xfa);/输出控制(正常输出)write_reg(31,0x08);/时钟分频器设置(basiccan 模式,关闭时钟)write_reg(0x00,0x00);/设置工作模式,关所有中断(无中断处理) /初始化 2void init_SJA1000_NO2() write_reg(0x00,0x01);/复位write_reg(0x04,0x41);/一号机验收代码write_reg(0x05,0xfe);/一号机验收屏蔽write_reg(0x06,0x00);/ 总线定时器 0write_reg(0x07,0x00);/总线定时器 1write_reg

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号