推荐星级:
- 1
- 2
- 3
- 4
- 5
CAN通信C语言程序
资料介绍
//该程序实现发送缓冲器0 向接收缓冲器0 发送数据的自测试模式,其中接收采用中断方式
//发送采用查询方式
部分文件列表
文件名 | 大小 |
CAN通信C语言程序___《免费下载》.pdf | 78K |
部分页面预览
(完整内容请下载后查看)//该程序实现发送缓冲器 0 向接收缓冲器 0 发送数据的自测试模式,其中接收采用中断方式
//发送采用查询方式
#include "p18f458.h"
int CAN_FLAG;
//定义标志寄存器
//**************初始化子程序***************
void initcan()
{
TRISB=(TRISB|0X08)&0XFB;
//设置 CANRX/RB3 为输入,CANTX/RB2 为输出
//设置 CAN 的波特率为 125K,在 Fosc=4M 时,Tbit=8us,假设 BRP=01h
//则 TQ=[2*(1+BRP)]/Fosc=2*(1+1)/4=1us。
//NOMINAL BIT RATE=8TQ,SJW=1,Sync_Seg=1TQ,Prog _Seg=1TQ,Phase_Seg1=3TQ,Phase_Seg2=3TQ
CANCON=0X80;
//请求进入 CAN 配置模式 REQOP=100
//等待进入 CAN 配置模式 OPMODE=100
//设置 SJW 和 BRP,SJW=1TQ,BRP=01H
//设置 Phase_Seg1=3TQ 和 Prog _Seg=1TQ
//设置 Phase_Seg2=3TQ
while(CANSTAT&0X80==0){;}
BRGCON1=0X01;
BRGCON2=0X90;
BRGCON3=0X42;
//设置发送邮箱 0 标识符号和发送的数据
TXB0CON=0X03;
TXB0SIDH=0XFF;
TXB0SIDL=0XE0;
TXB0DLC=0X08;
TXB0D0=0X00;
TXB0D1=0X01;
TXB0D2=0X02;
TXB0D3=0X03;
TXB0D4=0X04;
TXB0D5=0X05;
TXB0D6=0X06;
TXB0D7=0X07;
//发送优先级为最高优先级,TXPRI=11
//设置发送缓冲器 0 的标准标识符,本程序采用标准识符
//设置数据长度为 8 个字节
//写发送缓冲器数据区的数据
//设置接收邮箱 0 的标识符和初始化数据
RXB0SIDH=0XFF;
RXB0SIDL=0XE0;
//设置接收缓冲器 0 的标识符
RXB0CON=0X20;
RXB0DLC=0X08;
RXB0D0=0X00;
RXB0D1=0X00;
RXB0D2=0X00;
RXB0D3=0X00;
RXB0D4=0X00;
RXB0D5=0X00;
RXB0D6=0X00;
RXB0D7=0X00;
//仅仅接收标准标识符的有效信息,FILHIT0=0 表示 RXB0 采用 filter0
//设置接收缓冲器 0 的数据区长度
//初始化接收缓冲器 0 的数据区数据
//初始化接收滤波器 0 和接收屏蔽,
RXF0SIDH=0XFF;
RXF0SIDL=0XE0;
RXM0SIDH=0X00;
RXM0SIDL=0X00;
//初始化 CAN 模块的 I/O 控制寄存器
//CIOCON=0X00;
//使 CAN 进入某种工作模式模式
CANCON=0X00;
//=0X40,进入自测试模式;=0x00,正常操作模式
while(CANSTAT&0XE0!=0){;}
//while(CANSTAT&0X40==0){;}
//初始化 CAN 的中断
PIR3=0X00;
PIE3=0X01;
IPR3=0X01;
//清所有中断标志
//使能接收缓冲器 0 的接收中断
//接收缓冲器 0 的接收中断为最高优先级
}
//*********接收缓冲器 0 接收中断服务程序***********
#pragma interrupt can_isr
#pragma code low_ISR=0x18
void low_ISR()
{
_asm
goto can_isr
全部评论(1)
2021-12-13 16:06:04bbkshh
实现发送缓冲器0 向接收缓冲器0 发送数据的自测试模式