sja1000 中断_SJA1000程序
给你提供一些思路
1、sja1000初始化
2、发送子程序
3、中断方式接收
下面是一些程序段
你参考下(已用于产品)
/**********SJA1000初始化***********//
void Init_SJA1000(void)
{
uchar state;
uchar ACRR[4]={0XAA,0XFF,0X22,0X11};// 接收代码寄存器
uchar AMRR[4]={0xff,0xff,0xff,0xff};// 接收屏蔽寄存器
//uchar AMRR[4]={0x00,0x00,0xff,0xff};// 接收屏蔽寄存器
do// 使用do--while语句确保进入复位模式
{
MODR = 0x09; // 设置MOD.0=1--进入复位模式,以便设置相应的寄存器
state = MODR;
}
while( !(state & 0x01) );
// 对SJA1000部分寄存器进行初始化设置
CDR = 0x88; // CDR为时钟分频器,CDR.3=1--时钟关闭, CDR.7=0---basic CAN, CDR.7=1---Peli CAN
BTR0 = 0x04;//0x31; // 总线定时寄存器0 ;总线波特率设定
BTR1 = 0x1c;//0x1c; // 总线定时寄存器1 ;总线波特率设定
IER = 0x01; // IER.0=1--接收中断使能; IER.1=0--关闭发送中断使能
OCR = 0xaa; // 配置输出控制寄存器
CMR = 0x04; // 释放接收缓冲器
ACR0 = ACRR[0];// 初始化接收代码寄存器
ACR1 = ACRR[1];
ACR2 = ACRR[2];
ACR3 = ACRR[3];
AMR0 = AMRR[0];// 初始化接收屏蔽寄存器
AMR1 = AMRR[1];
AMR2 = AMRR[2];
AMR3 = AMRR[3];
do// 使用do--while语句确保退出复位模式
{
MODR = 0x08; //MOD.3=0--双滤波器模式
state = MODR;
}
while( state & 0x01 );
}//
//**********CAN发送数据到CAN-Bus***********//
void CAN_TXD(void)
{
uchar state;
//初始化标示码头信息
TX_buffer[0] = 0x88; //.7=0--扩展帧;.6=0--数据帧; .0-.3=100--数据长度为8字节
// TX_buffer[1] = 0xFF; //本帧信息的ID
//TX_buffer[2] = 0xFF;
TX_buffer[3] = 0xFF;
TX_buffer[4] = 0xFF;
do //查询SJA1000是否处于接收状态,当SJA1000不处于接收状态时才可继续执行
{
state = SR; //SR为SJA1000的状态寄存器
}
while( state & 0x10 ); //SR.4=1 正在接收,等待
do //查询SJA1000是否处于发送完毕状态
{
state = SR;
}
while(!(state & 0x08)); //SR.3=0,发送请求未处理完,等待直到SR.3=1
do //查询发送缓冲器状态
{
state = SR;
}
while(!(state & 0x04)); //SR.2=0,发送缓冲器被锁。等待直到SR.2=1
//将待发送的一帧数据信息存入SJA1000的相应寄存器中
TBSR0 = TX_buffer[0];
TBSR1 = TX_buffer[1];
TBSR2 = TX_buffer[2];
TBSR3 = TX_buffer[3];
TBSR4 = TX_buffer[4];
TBSR5 = TX_buffer[5];
TBSR6 = TX_buffer[6];
TBSR7 = TX_buffer[7];
TBSR8 = TX_buffer[8];
TBSR9 = TX_buffer[9];
TBSR10 = TX_buffer[10];
TBSR11 = TX_buffer[11];
TBSR12 = TX_buffer[12];
CMR = 0x04; //置位发
sja1000 中断_SJA1000程序相关推荐
- sja1000 中断_SJA1000的错误中断处理
SJA1000的错误处理好似还是比较复杂的的啦,下面是我自己的一些理解,有不对之处还请各位大虾多多指点啊! SJA1000的错误有: 仲裁丢失: 数据溢出: 总线错误: 错误状态有: 错误主动(Err ...
- sja1000 中断_SJA1000中断接收为什么接收中断不能被触发,不能进入中断接收子函数?看资料,里面说会自动触发中断的。...
1.sja1000的int引脚你先不连接 sja1000通电后 (纯粹通电不运行程序) 你测试一下int 是否为高? 如果是高正常. 2.sja1000的int引脚你先不连接 运行程序 ...
- linux 中断 应用程序,Linux中断编程
本文转载自[微信公众号:机械猿,ID:on_ourway]经微信公众号授权转载,如需转载与原文作者联系 基本概念 中断是指CPU在执行程序时,由于内外部事件或由程序预先安排的事件,导致CPU 暂停当前 ...
- stc 串口收发 c语言,STC12C5A60S2 串口中断接收程序
原标题:STC12C5A60S2 串口中断接收程序 #define UART0_BUF_LEN 32 int UART1_Recv_count; //接收计数 bit UART1_Overflow_F ...
- sja1000 中断_CAN总线 SJA1000中断
背景: 最近一直在使用C8051F340 + SJA1000来实现CAN通信,就SJA1000部分做个记录. 正文: 整个系统结构拓扑图如下: 两路CAN,C8051F340作为CPU,处理CAN与U ...
- sja1000 中断_[转载]SJA1000的错误中断处理
SJA1000的错误处理好似还是比较复杂的的啦,下面是我自己的一些理解,有不对之处还请各位大虾多多指点啊! SJA1000的错误有: 仲裁丢失: 数据溢出: 总线错误: 错误状态有: 错误主动(Err ...
- sja1000 中断_关于单片机+SJA1000接收中断C语言编程的问题
采用at89S52+sja1000的模块.一个节点发送,一个节点接收.可以确定发送节点能正确工作.但是接受节点无法接收到报文,接受节点采用中断0,程序如下voidCAN_RXD(void)interr ...
- 通讯中断 pc_S7程序RFID 与PC连接区别FB 65/UDT65
同样是使用使用FB65但RFID与PC的连接DB用法有一定的区别: 首先说一下什么是FB65: 通过TCP和ISO on TCP使用 两个通信伙伴都调用FB 65 "TCON"来设 ...
- sja1000 中断_SJA1000PeliCAN模式下自收发问题
/*************************************************************************MCU:ATmega16MCLK:内部震荡8M熔丝位 ...
最新文章
- 你在付费听《说好不哭》,我在这里免费看直播还送书 | CSDN新书发布会
- ISAPI_Rewrite规则
- 【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构
- C++基础1 数据类型 常量
- java windows编程,以编程方式控制Windows媒体播放器,最好是从Java
- python纳入小学课本了吗_Python语言为什么被推荐纳入高考和小学教材
- Fragment学习笔记
- [SOJ #538]好数 [CC]FAVNUM(2019-8-6考试)
- 英特尔处理器曝出重大安全漏洞,迫使 Linux 和 Windows 更新设计
- @ Before,@ BeforeClass,@ BeforeEach和@BeforeAll之间的区别
- 签到界面加图片java_签到功能实现,没有你想的那么复杂(二)
- python二维数据读取对齐_[Python ] Python 多维数组转换的维度对齐问题
- 优质前端掘金小册推荐及优惠购买链接
- python3.7源码剖析——python对象
- 面试阿里,看这一篇就够了!
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)
- [渝粤教育] 宁波财经学院 金融工程学 参考 资料
- flask_web 蓝本基模板继承问题
- 手机上怎么在线生成gif?1分钟教你手机图片合成gif
- KSO-2022年2月份PYPL编程语言排行榜