搜索
bottom↓
回复: 2

at89s52驱动CAN的电路换成stc89c58是否冲突

[复制链接]

出0入0汤圆

发表于 2015-9-6 16:46:15 | 显示全部楼层 |阅读模式
如图是AT89S52驱动CAN的接口定义,程序和电路是没有问题的,根据需要换成了STC89C58RD+,封装都是LQFP44,但是芯片换了之后通讯老是调不通,由于用到了单片机的ALE和RD/RW资源不知道这两种芯片是否一样,下面是CAN 芯片的驱动程序
void init_sja1000d3(void)//can??????
{
        uchar can_temp;
        restcan=0;         //can????
        delay();
        restcan=1;
        SEL_CANd3=0x0;//????,???SJA1000?????  
        XBYTE[0x09]=0xaa;//??CAN??
        can_temp=XBYTE[0x09];
        if(can_temp!=0xaa)
        {
                SEL_CANd3=0x1;//????       
                return;
        }          
        SEL_CANd3=0x0;         //XBYTE[0xB0FF]=0x00;       
        XBYTE[MODE]=0x09; //??????       
        can_temp=XBYTE[MODE]&0x01;//???????
        if(can_temp==0x00)
        {
                SEL_CANd3=0x1;//XBYTE[0xB0FF]=0x0FF;//????
                return;       
        }
        XBYTE[CDR]   =0xC8 ;// c8???????  CDR CAN???????,RX1????????,??????B
        // XBYTE[IER]   =0x09 ;//????,????????????????? IER0x09
        XBYTE[BTR0]  =0x03 ;//????? ?????2,????16M,????16,????001c,500K  011c,250K  BTR0         031c 125k
        XBYTE[BTR1]  =0x1c ;//???????1 BTR1
        XBYTE[OCR]   =0x1a ;// aa?????????   OCR ??????
        XBYTE[RXERR] =0x00 ;//RXERR ?0 ???????
        XBYTE[TXERR] =0x00 ;//???????
        XBYTE[ACR]   =0x05 ;//?????,???ACR 0~3  BIT7=1 CAN???????;BIT3=1???8?       
        XBYTE[ACR+1] =0x00 ;
        XBYTE[ACR+2] =0x80 ;
        XBYTE[ACR+3] =0x00 ;
        XBYTE[AMR]   =0xfa ;//?????,bitx=1?????????    AMR0~3
        XBYTE[AMR+1] =0xff ;       
        XBYTE[AMR+2] =0xff ;
        XBYTE[AMR+3] =0xff ;
        XBYTE[0x1e]  =0x00 ;//???????????
        XBYTE[MODE]=0x08; //??????
        // XBYTE[0x10]=0x88;         //?????
        XBYTE[IER]   =0x09 ;//????,????????????????? IER0x09       
        SEL_CANd3=0x1;//XBYTE[0xB0FF]=0xFF;//????       
        SEL_CANd3=0x1;//XBYTE[0xB0FF]=0xFF;       
        return;
}   
//******************************************
//**************************************************************************
  void send_cand3(uchar ch)
{
        uchar can_flag,can_dog;
        dog_flag=0;
        TH1=(65536-917)/256;
        TL1=(65536-917)%256;
        TR1=1;
        SEL_CANd3=0x0;//XBYTE[0xB0FF]=0x00;    //CAN????         
        can_flag=XBYTE[SR]&0x08; //??????,          
        while(can_flag==0x00)         //????????,??
        {       
                SEL_CANd3=0x1; //XBYTE[0xB0FF]=0xFF;//????
                can_dog=dog_flag;//??????
               
                if((can_dog&0x01)==0x01)
                {
                        can_error=0x00;
                        SEL_CANd3=0x1;
                        return;
                }  
                SEL_CANd3=0x0;// XBYTE[0xB0FF]=0x00;//CHANNEL_SJA1000=0;
                XBYTE[CMR]=0x02;//????          
                can_flag=XBYTE[SR];
                can_flag=can_flag&0x08; //??????,
        }
        SEL_CANd3=0x0;
        can_flag=XBYTE[SR];
        can_flag=can_flag&0x04; //??????
       
        while(can_flag==0x00) //???????,??
        {
                SEL_CANd3=0x1; //XBYTE[0xB0FF]=0xFF;//????
                can_dog=dog_flag;//??????       
                if((can_dog&0x01)==0x01)
                {
                        can_error=0x00;
                        SEL_CANd3=0x1;
                        return;
                }               
                SEL_CANd3=0x0;// XBYTE[0xB0FF]=0x00;// CHANNEL_SJA1000=0;       
                can_flag=XBYTE[SR];
                can_flag=can_flag&0x04; //??????
        }
       
        SEL_CANd3=0x0;
        switch(ch)
        {
                case 0x00:  // ??100ms???????????
                        XBYTE[0x10]=can_send[0];        //?????
                        XBYTE[0x11]=can_send[1];//??????1 ???????????
                        XBYTE[0x12]=can_send[2];//??????2
                        XBYTE[0x13]=can_send[3];//??????3
                        XBYTE[0x14]=can_send[4];//??????4
                        XBYTE[0x15]=can_send[5];//???1??
                        XBYTE[0x16]=can_send[6];//???2??
                        XBYTE[0x17]=can_send[7];//???3??
                        XBYTE[0x18]=can_send[8];//???4??
                        XBYTE[0x19]=can_send[9];//???5??
                        XBYTE[0x1a]=can_send[10];//???6??
                break;
                case 0x01:  //??????
                        XBYTE[0x10]=0x85;        //?????
                        XBYTE[0x11]=0x18;//??????1 ???????????
                        XBYTE[0x12]=0xf0;//??????2
                        XBYTE[0x13]=0x78;//??????3
                        XBYTE[0x14]=0x76;//??????4
                        XBYTE[0x15]=zj_result;//0x11;//zj_result??????0x11,0x12????
                break;
                default: break;
        }       
        XBYTE[CMR]=0x01;//????
        SEL_CANd3=0x1;//XBYTE[0xB0FF]=0xFF;//????
        can_error=0xff;
        can_counter=0;
        TR1=0;
        TH1=(65536-917)/256;
        TL1=(65536-917)%256;       
        can_flag=0x00;//?can???????????
        return;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2015-9-7 11:12:55 | 显示全部楼层
STC89C58的P0口没有上拉电阻,我加上还是不通

出0入8汤圆

发表于 2015-9-8 11:05:01 | 显示全部楼层
AT89S52的ALE不能用做gpio,估计原电路外扩了ROM或XRAM;
STC89C58RD+的ALE可以是ALE/P4.5双功能pin,在用STC-ISP写入时有选择,会不会你写入时选择“用作P4.5”了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-6 14:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表