1.sja1000的int引脚你先不连接 sja1000通电后 (纯粹通电不运行程序) 你测试一下int 是否为高? 如果是高正常。
2.sja1000的int引脚你先不连接 运行程序 你测试一下int 是否为低? 如果是低正常,说明你的单片机设置有问题。是否允许外部中断0了呢?
中断寄存器为0x01时中断引脚才会输出低电平呢。你现在要做的事是想法让中断寄存器为0x01
3.还有你是自接收模式 ?还是什么 ?你先设置自接收模式(退出复位模式时的指令为0X0C),看看单个节点是否工作正常 -----------------建议先看看第三条。一般自接收模式通过了就没问题了,你要先看自接收模式能够正常工作。先面是我的程序,不建议仔细看,看看复位和发送做哪些操作就行。(自接收测试模式)
void SJA1000_Init(void)
{
GPIO_Set(Control_PORT,RST,0); // IO口复位
//Delay_ms(10); // .
GPIO_Set(Control_PORT,RST,1); // .
//Delay_ms(10); // .
CAN_write(0x00,0x09); sja1000进入复位模式 单滤波器设置
CAN_write(0x1f,0xc8); ///PeliCAN 模式,时钟频率2分频...
CAN_write(0x10,0x01); //验收代码寄存器
CAN_write(0x11,0x02); //验收代码寄存器
CAN_write(0x12,0x03); //验收代码寄存器
CAN_write(0x13,0x08); //验收代码寄存器3
CAN_write(0x14,0x00); ///验收屏蔽寄存器0
CAN_write(0x15,0x00); ///验收屏蔽寄存器
CAN_write(0x16,0x00); ///验收屏蔽寄存器
CAN_write(0x17,0x00); ///验收屏蔽寄存器
CAN_write(0x08,0x1a); //设置输出管脚
CAN_write(0x06,0x49); //总线定时器0波特率预设值
CAN_write(0x00,0x0C); //退出复位模式
}