sja1000 中断_关于单片机+SJA1000接收中断C语言编程的问题

使用AT89S52单片机和SJA1000进行CAN通信时,遇到接收节点无法接收到报文的困扰。已确认发送节点正常工作,中断0配置用于接收中断,但程序在中断服务函数中无法检测到接收中断。检查了中断设置,包括低电平触发、验收屏蔽位全设为1,以及中断引脚配置,但问题依然存在。寻求针对SJA1000中断处理的解决方案。
摘要由CSDN通过智能技术生成

采用at89S52+sja1000的模块。一个节点发送,一个节点接收。可以确定发送节点能正确工作。但是接受节点无法接收到报文,接受节点采用中断0,程序如下voidCAN_RXD(void)interrupt0using...

采用at89S52+sja1000的模块。一个节点发送,一个节点接收。可以确定发送节点能正确工作。但是接受节点无法接收到报文,接受节点采用 中断0,程序如下

void CAN_RXD( void ) interrupt 0 using 1

{//接收数据函数,在中断服务程序中调用

uchar bdata Judge;

uchar i;

EA = 0;//关CPU中断

// IE0 = 0;

//led=0;

Judge = IR;

P27=1;P26=0;P25=1;//用电压表测量是否进入中断

if( Judge & 0x01)

{//IR.0 = 1 接收中断

for(i=0;i<13;i++)

RX_buffer[i] = *(SJA_BASE_ADDR+16+i);

RXD_flag = 1;//置有接收标志

CMR = 0x04;

Judge = ALC;//释放仲裁随时捕捉寄存器

Judge = ECC;//释放错误代码捕捉寄存器

}

IER = 0x01;// .0=1--接收中断使能;

EA = 1;//打开CPU中断

}

void main(void)

{

CAN_init( shezhi ); //SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片选有效无效

Delay(7);

EA = 1; //打开总中断

P27=0;P26=1;P25=0;

while(1)

{

Delay(900);

if(RXD_flag)

{

P30=0;P31=1;//用电压表测量是否接受到数据

}

}

中断采用低电平触发方式,验收屏蔽位全设为1,但是就是接收不到CAN报文。不知哪位大侠能给予帮助,谢谢~~

忘记说了 对于单片机中断的设置 在CAN_init函数里

EA = 1;

EX0 = 1;//外部中断1使能;CAN总线接收中断

IT0 = 0;//低电平触发

我曾经将中断引脚人为接地,mcu进入中断 进入不了 if( Judge & 0x01)

{//IR.0 = 1 接收中断

展开

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值