在PIC单片机p18f458上实现CAN总线数据发送与中断接收
版权申诉
137 浏览量
更新于2024-08-31
收藏 16KB DOCX 举报
"该文档详细介绍了如何在PIC18F458单片机上实现数据的发送,主要采用查询方式,并通过中断处理接收。在初始化阶段,设置了CAN总线的相关参数,包括波特率、TQ(时间量子)、SJW(同步跳跃宽度)、Phase_Seg1、Phase_Seg2等,确保数据传输的正确性。同时,设置了发送邮箱0(TXB0)和接收邮箱0(RXB0)的标识符以及数据长度,以便进行数据的发送与接收。"
在PIC单片机中实现数据发送,首先要进行CAN控制器的初始化。在示例代码中,首先通过设置TRISB寄存器将CANRX(RB3)设为输入,CANTX(RB2)设为输出,这是连接CAN总线的基本步骤。接着,根据所需的波特率计算BRP(预分频器)值,本例中设定为1,使得在Fosc=4MHz时,Tbit(位时间)为8us。
为了进入CAN配置模式,设置CANCON寄存器的REQOP位为100,然后等待CANSTAT寄存器中的OPMODE位也为100,表示已进入配置模式。接下来,根据计算出的TQ设置BRGCON1、BRGCON2和BRGCON3寄存器,以确定SJW、Phase_Seg1、Phase_Seg2和Prescaler等参数,这些参数会影响CAN总线的时序。
在初始化完成后,设置发送邮箱0(TXB0)。TXB0CON寄存器用于设置发送优先级和数据完整性,如设置最高优先级(TXPRI=11)。接着,设置标准标识符(SID),数据长度(DLC)以及实际要发送的数据。在本例中,发送了8字节的数据,从0X00到0X07。
对于接收部分,程序设置了接收邮箱0(RXB0)的标识符和过滤条件。RXB0CON寄存器的FILHIT0位设置为0,意味着只接收与RXB0SIDH和RXB0SIDL匹配的标准标识符消息。接收数据长度同样设置为8字节。
在实际运行中,发送数据是通过查询方式完成的,这意味着程序会不断地检查CAN模块的状态,看是否可以发送下一个数据字节。而接收端则通过中断处理接收到的数据,当有新的数据到达时,中断服务程序会被调用,处理接收缓冲器中的数据。
这个程序展示了如何在PIC18F458单片机上建立一个基本的CAN通信系统,实现数据的发送和中断接收。在实际应用中,可能还需要考虑错误处理、多消息处理、不同波特率下的适应性等问题,以确保整个CAN网络的稳定和可靠。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-07-03 上传
2022-06-22 上传
2021-05-20 上传
2022-05-27 上传
2022-06-28 上传
2022-11-24 上传
ziyoudianzi15
- 粉丝: 0
- 资源: 2万+
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器