首页 > 编程知识 正文

单片机c语言代码大全,串口转can芯片

时间:2023-05-05 00:54:09 阅读:172570 作者:3159

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单片机与PCcan通信实例

在此,以如何实现AT90CAN单片机和PC间的CAN通信为例,进一步说明了AT90CAN单片机的CAN功能模块驱动的创建过程,如图2所示,用C语言创建的CAN功能模块驱动PC通过专用的PCICAN模块接收从扩展的CAN接口发送的数据,并将接收到的数据与验收过滤寄存器中设定的ID值进行比较的功能。 如果ID值匹配,则重新创建数据并将其发送到PC。

图2与2PCcan的通信软件流程

以下程序通过实验调试,通信效果良好,可以直接应用。

#include 'ioCAN128v.h '

#包含

#包含

#define fosc 11059200//水晶振动11.0592 MHz

unsignedcharpcsj[8 ]={0x 00,0x 00,0x 00,0x 00,0x 00,0x 00,0x 00,0x 00,0x 00,000,0x 00 }; //数组存储接收到的数据

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; //canidm 1至canidm 4

CANIDM2=0xff; //设置验收寄存器

CANIDM3=0x00;

CANIDM4=0x00;

CANCDMOB=0x98; //设为可接收

SEI (; //打开总中断

wile(1) {

CANPAGE=0x10; 设置MOB4

CANSTMOB=0x00;

CANIDT1=0x01; //CANIDT1~CANIDT4

CANIDT2=0x01; //设置发送帧ID值寄存器

CANIDT3=0x00;

CANIDT4=0x00;

for(I=0; i8; I ) {

CANMSG=PCSJ[i]; //将收到的数据发回上位机

}

CANCDMOB=0x58; //允许发送

canst mob=~(1,1 )

}

}

中央数据接收由MOB5产生的中断完成,中断服务子程序如下。

# pragma interrupt _ handler can _ ISR :19//can控制器中断向量入口

voidcan_ISR(void ) {

if () cansit20x20 )==0x20 )确定是否由MOB5引起中断

CANPAGE=0x50;

for(I=0; i 8; I ) {

PCSJ[i]=CANMSG;

}

CANSTMOB=0x00; //清除状态位

CANCDMOB=0x98; //重新启用接收功能

}

}

4结论

AVR系列单片机内部有可编程Flash,自带EEPROM,支持JTAG接口芯片内的调试和Flash、EEPROM、保险丝位和锁位编程其内部集成了独立CAN控制器的AT90CAN系列单片机,弥补了单片机在CAN总线通信APP中的缺陷,无需扩展外围CAN通信控制芯片,简化了硬件电路设计本文通过对AT90CAN系列单片机CAN通信模块的详细介绍,旨在说明如何对其编程实现CAN通信功能,为使用单片机进行CAN通信的初学者编程

打开APP阅读更多精彩内容

点击阅读全文

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。