1770|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

dspIC30f6010a芯片CAN通讯与数据处理 [复制链接]

//AD数据采集,CAN发送数据
#include"p30f6010A.h"
#include"cpuinit.h"
#include"main.h"
#include"math.h"
//#include"IO.h"

//unsigned long int TX0_id,TX1_id,TX2_id;   
#define FCY = 16000000;//10MHz外部晶振

_FOSC(CSW_FSCM_OFF&HS2_PLL8);
_FWDT(WDT_ON & WDTPSA_512 & WDTPSB_1);//开启看门狗,1024ms复位
_FBORPOR(PBOR_OFF&MCLR_EN);//掉电复位禁止,MCLR复位时能
int main (void)
{
    IO_init();
    ClrWdt();//清看门狗
    T1_init();
    ClrWdt();//清看门狗
    ADC_init();
    ClrWdt();//清看门狗
    I2C_init();
    ClrWdt();//清看门狗
    //USATRT_init();
    ClrWdt();//清看门狗
    //CAN发送ID
    TX0_id = 0x18104040;//模拟量输入发送id
    TX1_id = 0x18104041;
   // TX2_id = 0x1FFFFFFF;//  
    //CAN接收ID
    RX1_F0id = 0x18200303;
    RX1_F1id = 0x1FFFFFFF;
    RX1_Mid  = 0x1FFFFFFF;  
    //------
    ClrWdt();//清看门狗
    CAN_init_C1();
    ClrWdt();//清看门狗
    
    TRISDbits.TRISD1 = 1;//RUN_1点亮
    Delay(50); 
    ClrWdt();//清看门狗
    while(1)
    {
        Lamp_flashing = 1;
        ClrWdt();
        
       if(CANexchange[0] == 0);//交换数据
        {
            CAN1_data_change0[0] = CAN_receive_finish[0][0];
            CAN1_data_change0[1] = CAN_receive_finish[0][1];
            CAN1_data_change0[2] = CAN_receive_finish[0][2];
            CAN1_data_change0[3] = CAN_receive_finish[0][3];
            CAN1_data_change0[4] = CAN_receive_finish[0][4];
            CAN1_data_change0[5] = CAN_receive_finish[0][5];
            CAN1_data_change0[6] = CAN_receive_finish[0][6];
            CAN1_data_change0[7] = CAN_receive_finish[0][7];
        
            CANexchange[0] == 1;
        }
        if(CANexchange[1] == 0)
        {
            CAN1_data_change1[0] = CAN_receive_finish[1][0];
            CAN1_data_change1[1] = CAN_receive_finish[1][1];
            CAN1_data_change1[2] = CAN_receive_finish[1][2];
            CAN1_data_change1[3] = CAN_receive_finish[1][3];
            CAN1_data_change1[4] = CAN_receive_finish[1][4];
            CAN1_data_change1[5] = CAN_receive_finish[1][5];
            CAN1_data_change1[6] = CAN_receive_finish[1][6];
            CAN1_data_change1[7] = CAN_receive_finish[1][7];
            
            CANexchange[1] == 1;
        }
        if(CANexchange[2] == 0)
        {
            CAN1_data_change2[0] = CAN_receive_finish[2][0];
            CAN1_data_change2[1] = CAN_receive_finish[2][1];
            CAN1_data_change2[2] = CAN_receive_finish[2][2];
            CAN1_data_change2[3] = CAN_receive_finish[2][3];
            CAN1_data_change2[4] = CAN_receive_finish[2][4];
            CAN1_data_change2[5] = CAN_receive_finish[2][5];
            CAN1_data_change2[6] = CAN_receive_finish[2][6];
            CAN1_data_change2[7] = CAN_receive_finish[2][7];
            
            CANexchange[2] == 1;
       }      
       //TX0_id发送
        if((CAN1send_EN == 0)&&(CAN1_sendCLC >25))
        {
            if(AD_change1 == 0)
            {      
                CANsendID1 = TX0_id;
                CANsend_data1[0] = CAN1_data[0][0];
                CANsend_data1[1] = CAN1_data[0][1];
                CANsend_data1[2] = CAN1_data[0][2];
                CANsend_data1[3] = CAN1_data[0][3];
                
                CANsend_data1[4] = CAN1_data[0][4];
                CANsend_data1[5] = CAN1_data[0][5];
                CANsend_data1[6] = CAN1_data[0][6];
                CANsend_data1[7] = CAN1_data[0][7];
            }
            CAN_Life();
            if(AD_change1 == 1)
            {
                Life_Data ++;
                CANsendID1 = TX1_id;
                CANsend_data1[0] = CAN2_data[0][0];
                CANsend_data1[1] = CAN2_data[0][1];
                CANsend_data1[2] = CAN2_data[0][2];
                CANsend_data1[3] = CAN2_data[0][3];
                
                CANsend_data1[4] = 0;
                CANsend_data1[5] = 0;
                CANsend_data1[6] = 4;
                CANsend_data1[7] = Life_Version;
            }
            CAN1send_EN = 1;//发送
            AD_change1++;
            if(AD_change1 >1)
                AD_change1 = 0;
            CAN1_sendCLC = 0;
        }
        Send_C1TX0();
         
       //TX1_id发送
     
       // Life_Data =0;
//       CAN_Life();
//       
//       if((CAN1send_EN1 == 0)&&(CAN2_sendCLC >400))
//       {
//            if(AD_change2 == 0)
//            {
//                //Delay(50);
//               // AD_change[0]=1;
//                AD_change_2();
//
//                Life_Data ++;
//                CAN1_data[1][0] = AD_buff2[0];
//                CAN1_data[1][1] = AD_buff2[1];
//                CAN1_data[1][2] = AD_buff2[2];
//                CAN1_data[1][3] = AD_buff2[3];
//                CAN1_data[1][4] = AD_buff2[4];
//                CAN1_data[1][5] = AD_buff2[5];
//                CAN1_data[1][6] = Life_Data;
//                CAN1_data[1][7] = Life_Version;
//
//                CANsendID2 = TX1_id;
//                CANsend_data2[0] = CAN1_data[1][0];
//                CANsend_data2[1] = CAN1_data[1][1];
//                CANsend_data2[2] = CAN1_data[1][2];
//                CANsend_data2[3] = CAN1_data[1][3];
//                CANsend_data2[4] = CAN1_data[1][4];
//                CANsend_data2[5] = CAN1_data[1][5];
//                CANsend_data2[6] = CAN1_data[1][6];
//                CANsend_data2[7] = CAN1_data[1][7];
//
//              //   CANsend_data2[7] = Life_Data;
//                //CANsend_data2
//            }
//            CAN1send_EN1 = 0;
//            AD_change2++;
//            if(AD_change2 > 1)
//                AD_change2 = 0; 
//            CAN2_sendCLC = 0;
//       }
        //Life_Data ++;
      
       //Send_C1TX0_1();
       //--------------------------------------------
       //发送完成延时
       Delay(5);
    //  CAN 模块收、发错误处理
    //--------------------------------------------------------------------------
        if ((C1INTFbits.TXBO==1)||(C1INTFbits.TXBP==1)||(C1INTFbits.RXEP))
        {
            IEC0bits.T1IE  =  0;      
            CAN_init_C1();//接收错误被动复位
            IEC0bits.T1IE  =  1;
        }      
    }        
}

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表