打印
[AVR单片机]

我的90CAN128老是发送不成功,不知是什么原因?

[复制链接]
1607|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcuatmel|  楼主 | 2008-10-15 11:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN, ni, ST, DM, IDT
发送总是显示应答错,发送忙
AERR=1
TXBSY=1
程序如下:

void CAN_INIT ( void )    
{   
    CANGCON = 0x01 ; /*进入复位模式并且复位MOb*/    
    while ((CANGSTA & 0x04)); /*测试CANGSTA中的ENFG位是否为0*/  
    CANBT1 = 0x12;            //16Mhz,100kbps
    CANBT2 = 0x0c;
    CANBT3 = 0x37;  
    CANTCON = 0xff ; /*设置定时器预定标*/ 
    //--------------can_MOB INITIAL------------------- 
    //MOB0=RX[CMD]  接收上位机发来的指令    格式:3,0,0,177,239,33 
    CANPAGE = 0x00;                               //MOB0,自动增量,初值为0 
    CANSTMOB = 0; 
    CANCDMOB = 0x18;                               //can2B,DLC=8 
    CANIDT4 = 0x08;                                // 00001 0xx 
    CANIDT3 = 0x79;                                // 01111 001       33 
    CANIDT2 = 0x8f;                                // 10001 111       239 
    CANIDT1 = 0x65;                                // 01100 101       177 

    CANIDM4 = 0xfc;                               //               11111 100 
    CANIDM3 = 0xff;                               //               11111 111 
    CANIDM2 = 0xff;                               //               11111 111 
    CANIDM1 = 0x07;                               //CANIDM4-1数据校验屏蔽寄存器 00000 111 

    //MOB1=TX[STA1] 向上位机报告状态组1     6,0,0,178,239,33 
    CANPAGE = 0x10; 
    CANSTMOB = (1<<TXOK); 
    CANCDMOB = 0x18; 
    CANIDT4 = 0x08;                                // 00001 000 
    CANIDT3 = 0x79;                                // 01111 001       33 
    CANIDT2 = 0x97;                                // 10010 111       239 
    CANIDT1 = 0xc5;                                // 11000 101       178 

    CANGIE |= ((1<<ENIT) + (1<<ENRX));                      //开全局中断 和 接收中断 
    CANIE2 |= 0x00;                                //开MOB3 & MOB0信箱接收中断(接收邮箱) 
    CANPAGE = 0x00; 

    CANGCON = 0x0a ; /*进入操作模式*/   
    while (!(CANGSTA & (1<<2))); /*测试CANGSTA中的ENFG位是否为1*/
}
void CAN_TX ( void )   
{    
    byte i; 
    CANGIE &= 0xdf;//ENRX=0 
    CANPAGE = 0x10 ; /*指定此消息的MOb页(寄存器中的高4位)*/ 
    if (CANSTMOB & 0x40) 
    { 
        CANSTMOB &= 0xbf; 
        for(i = 0; i < 8; i++) CANMSG = 0x41+i; 

        CANCDMOB = 0x58;                //帧发送 
    } 
    CANGIE |=0x20; //ENRX=1

相关帖子

沙发
zhjun| | 2008-11-6 09:47 | 只看该作者

连接到CAN网络(主机)了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

512

主题

1456

帖子

2

粉丝