📄 test.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 + -