- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AT90CAN单片机CAN通信模块介绍及软件编程
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_PIN5
void 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;//设置通信波特率为250kbps
CANIE2 |= 0x60;//使能MOB5、MOB6
CANIE1 |= 0x01;//使能MOB0
CANGIE = 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 stdio.h
#include macros.h
#define fosc/晶振11.0592 MHz
unsigned char PCSJ[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//数组用来存放接收到的数据
void main() {//主程序
CLI();//关总中断
void CAN_INIT();//CAN控制器初始化
CANPAGE = 0x50;//设置MOB5
CANSTMOB=0x00;//清状态寄存器
CANIDT1 = 0x02;//CANIDT1~CANIDT4
CANIDT2 = 0x01;//设置ID过滤寄存器
CANIDT3 = 0x00;
CANIDT4 = 0x00;
CANIDM1 = 0xff;//CANIDM1~CANIDM4
CANIDM2 = 0xff;//设置验收寄存器
CANIDM3 = 0x00;
CANIDM4 = 0x00;
CANCDMOB = 0x9
您可能关注的文档
最近下载
- GB+16423-2020金属非金属矿山安全规程.docx VIP
- 2024《拔高训练之50类题型精练》九年级物理全一册.pdf
- 罗道病课件文档.ppt VIP
- T∕CACM 1021.89-2018 中药材商品规格等级 鸡内金.docx VIP
- 人教版(2024)九年级全一册物理全册教案.docx
- T/BGEA001-2019 预拌流态固化土填筑工程技术标准.pdf VIP
- (2025秋新版)二年级语文上册全册教案.pdf
- 涉诈风险账户审查表.doc VIP
- CATIA自由曲面教程教程分析.doc
- 2025云南昆明巫家坝建设发展有限责任公司及下属公司第三季度招聘23人笔试历年参考题库附带答案详解.docx
文档评论(0)