sja1000 中断_关于单片机+SJA1000接收中断C语言编程的问题
采用at89S52+sja1000的模塊。一個(gè)節(jié)點(diǎn)發(fā)送,一個(gè)節(jié)點(diǎn)接收??梢源_定發(fā)送節(jié)點(diǎn)能正確工作。但是接受節(jié)點(diǎn)無法接收到報(bào)文,接受節(jié)點(diǎn)采用中斷0,程序如下voidCAN_RXD(void)interrupt0using...
采用at89S52+sja1000的模塊。一個(gè)節(jié)點(diǎn)發(fā)送,一個(gè)節(jié)點(diǎn)接收??梢源_定發(fā)送節(jié)點(diǎn)能正確工作。但是接受節(jié)點(diǎn)無法接收到報(bào)文,接受節(jié)點(diǎn)采用 中斷0,程序如下
void CAN_RXD( void ) interrupt 0 using 1
{//接收數(shù)據(jù)函數(shù),在中斷服務(wù)程序中調(diào)用
uchar bdata Judge;
uchar i;
EA = 0;//關(guān)CPU中斷
// IE0 = 0;
//led=0;
Judge = IR;
P27=1;P26=0;P25=1;//用電壓表測量是否進(jìn)入中斷
if( Judge & 0x01)
{//IR.0 = 1 接收中斷
for(i=0;i<13;i++)
RX_buffer[i] = *(SJA_BASE_ADDR+16+i);
RXD_flag = 1;//置有接收標(biāo)志
CMR = 0x04;
Judge = ALC;//釋放仲裁隨時(shí)捕捉寄存器
Judge = ECC;//釋放錯(cuò)誤代碼捕捉寄存器
}
IER = 0x01;// .0=1--接收中斷使能;
EA = 1;//打開CPU中斷
}
void main(void)
{
CAN_init( shezhi ); //SJA1000初始化,對 SJA1000寄存器的讀寫是采用外部寄存器尋址方式,所以不需要程序單獨(dú)控制片選有效無效
Delay(7);
EA = 1; //打開總中斷
P27=0;P26=1;P25=0;
while(1)
{
Delay(900);
if(RXD_flag)
{
P30=0;P31=1;//用電壓表測量是否接受到數(shù)據(jù)
}
}
中斷采用低電平觸發(fā)方式,驗(yàn)收屏蔽位全設(shè)為1,但是就是接收不到CAN報(bào)文。不知哪位大俠能給予幫助,謝謝~~
忘記說了 對于單片機(jī)中斷的設(shè)置 在CAN_init函數(shù)里
EA = 1;
EX0 = 1;//外部中斷1使能;CAN總線接收中斷
IT0 = 0;//低電平觸發(fā)
我曾經(jīng)將中斷引腳人為接地,mcu進(jìn)入中斷 進(jìn)入不了 if( Judge & 0x01)
{//IR.0 = 1 接收中斷
展開
總結(jié)
以上是生活随笔為你收集整理的sja1000 中断_关于单片机+SJA1000接收中断C语言编程的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 管理鸡汤之管理定律分类解读
- 下一篇: 北航计算机九推经验,前辈种树 | 工科九