用PIC18F458的CAN模块实现CAN总线通信
以下为文章全文:(本站微信公共账号:cartech8)

汽车零部件采购、销售通信录 填写你的培训需求,我们帮你找 招募汽车专业培训老师
#include int CAN_FLAG; voidinitcan(){ TRISB=(TRISB|0X08)&0XFB; CANCON=0X80; while(CANSTAT&0X80==0)continue; BRGCON1=0X01; BRGCON2=0X90; BRGCON3=0X42; TXB0CON=0X03; TXB0SIDH=0XFF; TXB0SIDL=0XE0; TXB0DLC=0X08; TXB0D0=0X00; TXB0D1=0X01; TXB0D2=0X02; TXB0D3=0X03; TXB0D4=0X04; TXB0D5=0X05; TXB0D6=0X06; TXB0D7=0X07; RXB0SIDH=0XFF; RXB0SIDL=0XE0; RXB0CON=0X20; RXB0DLC=0X08; RXB0D0=0X00; RXB0D1=0X00; RXB0D2=0X00; RXB0D3=0X00; RXB0D4=0X00; RXB0D5=0X00; RXB0D6=0X00; RXB0D7=0X00; RXF0SIDH=0XFF; RXF0SIDL=0XE0; RXM0SIDH=0X00; RXM0SIDL=0X00; CANCON=0X40; while(CANSTAT&0X40==0)continue; PIR3=0X00; PIE3=0X01; IPR3=0X01; } #pragma interrupt can_isr #pragma code low_ISR=0x18 void low_ISR() { _asm gotocan_isr _endasm } #pragma code voidcan_isr() { if(PIR3bits.RXB0IF==1)CAN_FLAG=1; PIR3bits.RXB0IF=0; RXB0CONbits.RXFUL=0; } main(){ INTCON=0x00; initcan(); W D T C O N = 0 ; INTCON=0xc0; while(1) { TXB0CONbits.TXREQ=1; while(PIR3bits.TXB0IF!=1)continue; while(CAN_FLAG==0)continue; CAN_FLAG=0; TXB0CONbits.TXREQ=0; TXB0D0=RXB0D0+1; TXB0D1=RXB0D1+1; TXB0D2=RXB0D2+1; TXB0D3=RXB0D3+1; TXB0D4=RXB0D4+1; TXB0D5=RXB0D5+1; TXB0D6=RXB0D6+1; TXB0D7=RXB0D7+1; } } |
文章网友提供,仅供学习参考,版权为原作者所有,如侵犯到
你的权益请联系542334618@126.com,我们会及时处理。
会员评价:
共0条 发表评论