同志们,我调着程序有一阵了,基本的设置没什么错误,为什么发送不了数据,本人虚心求教,用的是PIC18的片子
其中这为单片机can模块初始化
void InitECAN(void)
{
PIE5bits.RXB0IE = 1;//接收缓冲0中断允许
IPEN = 1;
PEIE = 1; //全局的低级中断允许
GIE = 1; //全局的高级中断允许
// TXB0IP = 1;
RXB0IP = 1; //接收为高优先级
BIE0 = 0xFF;
ECANMD = 0;//使能CAN模块
CANCON = 0x80;//请求进入配置模式
while(!(CANSTATbits.OPMODE == 0x04));//等待模块确认进入配置模式
//波特率设置 125Kbps
BRGCON1 = 0x87; //0000 0111 //SJW=3TQ BRP 15
BRGCON2 = 0xB8; //1011 1000 //SEG2PHTS 1 sampled once PS1=8TQ PropagationT 1TQ
BRGCON3 = 0x05; //0000 0101 //PS2 6TQ
//屏蔽器选择寄存器
MSEL0 = 0xF4; //过滤器0--接收屏蔽0; 过滤器1--接收屏蔽1;其他无屏蔽
MSEL1 = 0xFF;
MSEL2 = 0xFF;
MSEL3 = 0xFF;
//缓冲区n 数据长度编码寄存器
BSEL0 = 0xFC;//缓冲区0-5被设置为发送模式
//屏蔽位--掩码位;过滤位--有效值
//标准标识符屏蔽寄存器//0010 CM DD DDD
RXM0SIDH = 0b11110011;
RXM0SIDL = 0b11100000;
RXM1SIDH = 0x00;//不使用第二个
RXM1SIDL = 0x00;
//扩展标识符屏蔽寄存器
RXM0EIDH = 0x00;// 接收屏蔽
RXM0EIDL = 0x00;
RXM1EIDH = 0x00;
RXM1EIDL = 0x00;
//接收过滤器控制寄存器
RXFCON0 = 0x03;//使能前两个接收过滤器
RXFCON1 = 0x00;
//接收过滤器缓冲区控制寄存器
RXFBCON0 = 0x10;
RXFBCON1 = 0xFF;
RXFBCON2 = 0xFF;
RXFBCON3 = 0xFF;
RXFBCON4 = 0xFF;
RXFBCON5 = 0xFF;
RXFBCON6 = 0xFF;
RXFBCON7 = 0xFF;
//标志标示符够滤器 //0010 CM DD DDD
RXF0SIDH = SysFunct_Code|(Dec_Addr>>3);
RXF0SIDL = (Dec_Addr<<5);
RXF1SIDH = SysFunct_Code|(Dec_Addr>>3);
RXF1SIDL = (Dec_Addr<<5);
//扩展标示符过滤器
RXF0EIDH = 0x00;
RXF0EIDL = 0x00;
RXF1EIDH = 0x00;
RXF1EIDL = 0x00;
CANCON = 0x00;//请求进去工作模式
while(CANSTATbits.OPMODE==0x00);//等待进入模式
//清除接收区
RXB0CON = 0x00;
RXB1CON = 0x00;
RXB0IF = 0;
}
之后就在主函数发送,不知为什么发送不出去,波特率和硬件中一进一出设置的没有问题,不知道是什么原因,还希望前辈们多指教~ |