sja1000 中断_关于单片机+SJA1000接收中断C语言编程的问题
采用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 接收中斷
展開
總結
以上是生活随笔為你收集整理的sja1000 中断_关于单片机+SJA1000接收中断C语言编程的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 管理鸡汤之管理定律分类解读
- 下一篇: 北航计算机九推经验,前辈种树 | 工科九