//CIOCON=0X00;
//使CAN进入某种工作模式模式
CANCON=0X00; //=0X40,进入自测试模式;=0x00,正常操作模式
while(CANSTAT&0XE0!=0){;}
//while(CANSTAT&0X40==0){;}
//初始化CAN的中断
PIR3=0X00; //清所有中断标志
PIE3=0X01; //使能接收缓冲器0的接收中断
IPR3=0X01; //接收缓冲器0的接收中断为最高优先级
}
//*********接收缓冲器0接收中断服务程序***********
#pragma interrupt can_isr
#pragma code low_ISR=0x18
void low_ISR()
{
_asm
goto can_isr
_endasm
}
#pragma code
void can_isr()
{
if(PIR3bits.RXB0IF==1) CAN_FLAG=1;
PIR3bits.RXB0IF=0; //清接收中断标志
RXB0CONbits.RXFUL=0; //打开接收缓冲器来接收新信息
}
//****************主程序**can总线收发编程****************
main()
{
INTCON=0x00; //禁止所有中断
initcan();
WDTCON=0; //=1,看门狗使能;=0,禁止看门狗
INTCON=0xc0; //使能中断
while(1)
{
TXB0CONbits.TXREQ=1; //请求发送,TXREQ=1
while(PIR3bits.TXB0IF!=1){;} //等待发送完成
while(CAN_FLAG==0){;} //等待接收数据
CAN_FLAG=0; //清接收到标志
TXB0CONbits.TXREQ=0; //禁止发送
TXB0D0=RXB0D0+1; //用接收数据加1来更新发送数据
TXB0D1=RXB0D1+1;
TXB0D2=RXB0D2+1;
TXB0D3=RXB0D3+1;
TXB0D4=RXB0D4+1;
TXB0D5=RXB0D5+1;
TXB0D6=RXB0D6+1;
TXB0D7=RXB0D7+1;
}
}
来源;21ic
关于控制,MCU就介绍完了,您有什么想法可以联系小编。