AT90CAN单片机CAN通信模块介绍及软件编程.doc_第1页
AT90CAN单片机CAN通信模块介绍及软件编程.doc_第2页
AT90CAN单片机CAN通信模块介绍及软件编程.doc_第3页
AT90CAN单片机CAN通信模块介绍及软件编程.doc_第4页
AT90CAN单片机CAN通信模块介绍及软件编程.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AT90CAN单片机CAN通信模块介绍及软件编程1 AT90CAN单片机CAN控制器特性AT90CAN单片机的CAN控制器能够兼容CAN2.0A和CAN2.0B通信协议,内部设有120字节的邮箱空间,它由15个MOB(Message Object)与CAN DATA BUFFER组成。MOB用来描述一帧完整的CAN报文信息,每个MOB拥有独立的工作寄存器组(详见参考文献1),这些寄存器规定了CAN通信报文的帧格式与工作模式。CAN通用控制寄存器里的CANPAGE寄存器为15个MOB规定了相对应的BUFFER地址和指针,用来存放通信时发出或接收到的数据以及保存MOB寄存器组的设置。对MOB的寄存器组进行初始化设置后,CAN控制器根据MOB的不同设置,就可以分别实现数据的发送、接收以及过滤功能,整个工作过程不需要CPU干预,简化了软件代码的编写。而CPU通过访问CAN控制器状态寄存器或者由CAN控制器以中断的方式通知CPU,即可得到当前通信状态,从而大大节省了CPU的占用时间。2 CAN控制器的初始化要实现CAN通信,首先要对CAN控制器进行正确的初始化设置。初始化过程包括对CPU的引脚功能、CAN通信波特率、中断优先级和MOB寄存器的设置等。在编写驱动的过程中,需要注意的是在完成对CANPAGE寄存器的设置后,再进行MOB的设置;否则,MOB的初始值将不能被保存,导致系统初始化失败。其基本初始化流程如图1所示。其中阴影部分是必须初始化的部分,其他部分可以根据实际程序功能的需要予以设置。图1 CAN控制器初始化流程CAN控制器初始化程序:#define CAN_PORT_INPIND#define CAN_PORT_DIR DDRD#define CAN_PORT_OUT PORTD#define CAN_INPUT_PIN6#define CAN_OUTPUT_PIN5void CAN_INIT() CAN_PORT_DIR &= (1CAN_INPUT_PIN );CAN_PORT_DIR &= (1CAN_OUTPUT_PIN);CAN_PORT_OUT |=(1CAN_INPUT_PIN );CAN_PORT_OUT |=(1CAN_OUTPUT_PIN);/配置单片机TD、RD引脚功能CANTCON=0x00;/CAN时钟寄存器清零CANGCON |= 0x01;/软件复位CANBT1=0x06;CANBT2=0x2a;CANBT3=0x13;/设置通信波特率为250kbpsCANIE2 |= 0x60;/使能MOB5、MOB6CANIE1 |= 0x01;/使能MOB0CANGIE = 0xA0; /使能CAN中断CANGCON |= 0x02;/CAN控制器启动3 AT90CAN单片机与PC机CAN通信实例下面以如何实现AT90CAN单片机与PC机间的CAN通信为例,进一步说明AT90CAN单片机的CAN功能模块驱动的编制流程, 如图2所示,并给出C语言编写的CAN通信程序。它的功能是接收PC机经由专用的PCICAN模块扩展的CAN接口发出的数据,并将收到的数据与验收过滤器寄存器中设定的ID值比较。如果ID值相符,则将数据重新编制ID后发给PC机。以下程序已在实验中调试通过,通信效果良好,可以直接应用。#include ioCAN128v.h#include #include #define fosc 11059200/晶振11.0592 MHzunsigned char PCSJ8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;/数组用来存放接收到的数据void main() /主程序CLI();/关总中断void CAN_INIT();/CAN控制器初始化CANPAGE = 0x50;/设置MOB5CANSTMOB=0x00;/清状态寄存器CANIDT1 = 0x02;/CANIDT1CANIDT4CANIDT2 = 0x01;/设置ID过滤寄存器CANIDT3 = 0x00;CANIDT4 = 0x00;CANIDM1 = 0xff;/CANIDM1CANIDM4CANIDM2 = 0xff;/设置验收寄存器CANIDM3 = 0x00;CANIDM4 = 0x00;CANCDMOB = 0x98;/使能接收SEI();/打开总中断while(1) CANPAGE=0x10;/设置MOB4CANSTMOB=0x00;CANIDT1 = 0x01;/CANIDT1CANIDT4CANIDT2 = 0x01;/设置发送帧ID值寄存器CANIDT3 = 0x00;CANIDT4 = 0x00;for(i = 0;i8;i+) CANMSG=PCSJi; /将接收到的数据发送回上位机CANCDMOB=0x58;/使能发送CANSTMOB&=(1TXOK);/清TXOK标志wait(2);实例中数据接收由MOB5产生中断完成,中断服务子程序如下:#pragma interrupt_handler can_isr:19/CAN控制器中断向量入口void can_isr(void) if (CANSIT2 & 0x20)=0x20) /判断是否是MOB5产生中断CANPAGE=0x50;for(i = 0; i 8; i+) PCSJi =CANMSG;CANSTMOB = 0x00; /清状态位CANCDMOB = 0x98;/重新使能接收功能4 结论AVR系列单片机内部有可编程的Flash,自带EEPROM,支持JTAG接口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论