⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 利用dspic4011实现can总线通讯
💻 C
字号:
#define  _dsPIC30F4011_
#include <p30fxxxx.h>
#include<timer.h>
#include <CAN.h>
#define dataarray 0x1820

_FOSC(CSW_FSCM_OFF & XT_PLL4);  //XT 为4xPLL 振荡器, 失效保险时钟关闭
_FWDT(WDT_OFF);                   //禁止看门狗定时器
_FBORPOR(PBOR_OFF & MCLR_EN);  //禁止掉电复位,使能MCLR复位
_FGS(CODE_PROT_OFF); 

#define Fcy 11059200                  //11.0592MHz外部晶振带4倍频,指令周期为11.0592MIPs            

#define LED1 PORTBbits.RB0
#define LED2 PORTBbits.RB1

unsigned int count;




int t1_init(void)
{
    unsigned int match_value;
    count=0;
    TRISBbits.TRISB0 = 0;
    TRISBbits.TRISB1 = 0;
    LED1=0;
    LED2=0;
   /* Enable Timer1 Interrupt and Priority to "1" */
    ConfigIntTimer1(T1_INT_PRIOR_1 & T1_INT_ON);
    WriteTimer1(0);
    match_value = (Fcy/128)/2;
    OpenTimer1(T1_ON & T1_GATE_OFF & T1_IDLE_STOP &
               T1_PS_1_64 & T1_SYNC_EXT_OFF &
               T1_SOURCE_INT, match_value);
}


void __attribute__((__interrupt__)) _T1Interrupt(void)
{
    
    WriteTimer1(0);
    IFS0bits.T1IF = 0;    /* Clear Timer interrupt flag */
    count++;
    if(count==4)
    {   LED1=!LED1;
        LED2=!LED2;
        count=0;
    }
    
}  


int main (void)
{
 unsigned char datalen=3;
 unsigned char Txdata[]={'1','2','3','4','5','6','7','8','9','\0'};
// unsigned int  TXConfig,RXConfig;
 unsigned long MaskID=2047;
 unsigned long MessageID=0;
 char          FilterNo=0;
 char          tx_rx_no=0;
 unsigned char *datareceived=(unsigned char *) dataarray;
  t1_init();
  /*************C1CTRL**************/
 TRISF = 0x2;
 CAN1SetOperationMode(CAN_IDLE_CON            &  //CSIDL=0 空闲模式继续工作
                      CAN_MASTERCLOCK_1       &  //1*Fcy
                      CAN_REQ_OPERMODE_CONFIG &  //REQOP=100 配置工作模式
                      CAN_CAPTURE_DIS);          //TSTAMP=0 禁止CAN捕捉
  
 while(C1CTRLbits.OPMODE<=3);                    //等待进入配置模式
  /**********C1CFG1,C1CFG2***********/
 CAN1Initialize(CAN_SYNC_JUMP_WIDTH1          &  //SJW=2TQ
                CAN_BAUD_PRE_SCALE(1),           //BRP=1 预分频=4/Fcan
                CAN_WAKEUP_BY_FILTER_DIS      &  //不使用CAN总线滤波器唤醒
                CAN_PHASE_SEG2_TQ(2)          &  //SEG2=5TQ
                CAN_PHASE_SEG1_TQ(8)          &  //SEG1=4TQ
                CAN_PROPAGATIONTIME_SEG_TQ(1) &  //PRSEG=4TQ
                CAN_SEG2_FREE_PROG            &  //SEG2PHTS=1 可自由编程
                CAN_SAMPLE1TIME);                //SAM=0 采样1次
 /*************C1TX0CON**************/
tx_rx_no=0;
 CAN1SetTXMode(tx_rx_no,               //1--C1TX1B1-B4
                                       //2--C1TX2B1-B4
                                       //ELSE--C1TX0B1-B4
               CAN_TX_STOP_REQ&        //TXREQ=0  停止请求报文发送
               CAN_TX_PRIORITY_HIGH);  //TXPRI=11 报文优先级最高
 /**********C1TX0SID,X1TX0EID,C1TX0DLC,C1TX0Bm*************/
 //datalen=8;
/*CAN1SendMessage((CAN_TX_SID(MessageID))&   //SID=190 C1TX0SID
                (CAN_TX_EID_DIS)  &        //TXIDE=0 使能标准帧
                (CAN_SUB_NOR_TX_REQ),      //SRR=0 报文正常发送
                (CAN_TX_EID(0))&           //ESID
                (CAN_NOR_TX_REQ),          //报文正常发送
                 Txdata,
                 datalen,             //DLC=datalen
                 tx_rx_no);           //1--C1TX1B1-B4
                                      //2--C1TX2B1-B4
                                      //ELSE--C1TX0B1-B4*/
/*************C1RX0CON**************/
 CAN1SetRXMode(tx_rx_no,               //要配置的寄存器
               CAN_RXFUL_CLEAR&        //RXFUL=0 清除接收满标志
               CAN_BUF0_DBLBUFFER_DIS); //DBEN=0 缓冲器0满不写入缓冲器1
/*************C1RX0SID**************/
// C1RX0SID=0x0028;
/************C1RXF0SID*************/
 //FilterNo=0;
 /*CAN1SetFilter(FilterNo,                   //Filter noumber
               CAN_FILTER_SID(MessageID)&  //SID 过滤SID
               CAN_RX_EID_DIS,             //EXIDE=0 使能标准帧
     //          CAN_FILTER_EID(12344));     //过滤EXID*/
/*************C1RXM0SID*************/
 /*CAN1SetMask(FilterNo,CAN_MASK_SID(MaskID)&  //屏蔽SID
             CAN_MATCH_FILTER_TYPE,        //MIDE=1 只屏蔽指定类型
             CAN_MASK_EID(0));         //屏蔽EID
*/
 /*************C1CTRL**************/
 CAN1SetOperationMode(CAN_IDLE_CON      &
                      CAN_CAPTURE_DIS   &
                      CAN_MASTERCLOCK_1 &
                      CAN_REQ_OPERMODE_NOR);
//C1CTRLbits.REQOP = 0;
while(C1CTRLbits.OPMODE !=0); 
/*******************************/

 C1TX0CONbits.TXREQ=0;
 //while(!CAN1IsRXReady(0)); 
 //CAN1ReceiveMessage(datareceived,datalen,tx_rx_no);
datalen=8;
 while(1)
{
 
CAN1SendMessage((CAN_TX_SID(MessageID))&   //SID=190 C1TX0SID
                (CAN_TX_EID_DIS)  &        //TXIDE=0 使能标准帧
                (CAN_SUB_NOR_TX_REQ),      //SRR=0 报文正常发送
                (CAN_TX_EID(0))&           //ESID
                (CAN_NOR_TX_REQ),          //报文正常发送
                 Txdata,
                 datalen,             //DLC=datalen
                 tx_rx_no);           //1--C1TX1B1-B4
                                      //2--C1TX2B1-B4
                                      //ELSE--C1TX0B1-B4
while(!CAN1IsTXReady(0));
//while(!CAN1IsRXReady(0)); 
}
 return 0; //
}








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -