CAN自收自发问题小结

本文总结了在CAN总线通信中遇到的自发自收问题,包括地址确定、Intel与Motorola总线模式的区别、CAN总线模式设置、自发自收配置、滤波器组合、频率设置以及错误状态的判断。调试过程中强调了MOD和CMR寄存器的正确配置,以及至少需要两个网络节点才能实现成功的发送和接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2011-12-02 21:59:23

       流程图:

 

 

 CAN自收自发问题小结

1,地址如何确定? 
答:51的片外扩展地址,R/W脚的电平会根据代码自动更改,不需要设置。   
参考 单片机的外部存储器的扩展.doc

2, CAN总线模式 Intel和Motorla总线区别  
答:Motorla是R/W共用一个引脚,Inter是R和W引脚分开使用。           
参考  intel总线与motorola总线.doc

3,CAN总线模式如何设置?
答:CAN总线模式是通过硬件引脚Mode来设置的,上电后就固定了。上电后可以通过CDC寄存器读取。

4,如何设置成自发自收?
CMR.4(SRR)置位。设置信息可被同时发送和接收。等于设置了可以自发自收。

5,单滤波与双滤波区别,如何组合?
参考文件:CAN 控制器 SJA1000 验收滤波器原理与应用.pdf

6,频率设置方法。
参考  STJ1000总线定时寄存器计算.doc

7,网络上起码要有两个

### C51 单片机实现自自发功能 为了使C51单片机能执行自自发操作,需配置其内部的UART模块来完成串行通信的任务。具体来说,在初始化阶段要设定波特率、开启接中断等功能。 #### 初始化设置 在进入主循环之前,应先进行必要的硬件参数配置: ```c #include <reg52.h> sbit LED = P1^0; void UART_Init(void){ TMOD = 0x20; // 设置定时器模式为方式2(8位自动重装载) TH1 = 0xFD; // 波特率为9600, fosc=11.0592MHz SCON = 0x50; // 8-bit可变波特率工作于模式1 TR1 = 1; // 开启定时器T1运行 } ``` 上述代码完成了基本的串口初始化过程[^1]。 #### 中断服务程序设计 当有新数据到达时会触发接中断ISR,此时可以在该函数体内读取并立即重新发送这些数据以达到回显效果: ```c // 定义缓冲区存储接到的数据 unsigned char dataReceived; void Uart_ISR() interrupt 4 { if (RI) { // 如果是接标志置位,则表示已成功接到字节 RI = 0; dataReceived = SBUF; // 将接到的内容存入变量dataReceived中 TI = 0; // 清除发送中断标记以防干扰 SBUF = dataReceived; // 把刚接到的信息送回到SBUF准备发出 while (!TI); // 等待直到当前字符被完全送出为止 TI = 0; // 发送完成后清除发送完成标志 } } int main(){ UART_Init(); // 调用前面定义好的初始化子程序 ES = 1; // 允许串口中断 EA = 1; // 打开总中断允许开关 while(1); return 0; } ``` 这段代码实现了简单的自自发逻辑——每当通过串口线缆传来的任何信息都会立刻由同一端口返回给发送方显示出来[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值