我的程序如下:问题是我发送的是10086110这八个数,但是在CAN接收端接收到的数据是31 30 30 38 36 31 31 30,为啥是这样呢?前边的3是什么呢?#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */
#include "CANsend.h"
#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define BUS_CLOCK 32000000 //总线频率
#define OSC_CLOCK 16000000 //晶振频率
#define ID 0x0019 //发送ID
#define data_len_TX 8 //发送数据长度
unsigned char k;
unsigned senddata[8]={'1','0','0','8','6','1','1','0'}; //发送的数据
struct can_msg msg_send;
unsigned char datain=0;
void INIT_PLL(){ //初始化锁相环
CLKSEL &=0x7f; //设置OSCCLK为系统时钟
PLLCTL &=0x8F; //禁止PLL
CRGINT &=0xDF;
#if(BUS_CLOCK==32000000)
SYNR=0x43;
#elif(BUS_CLOCK==24000000)
SYNR=0x42;
#endif
REFDV=0x81;
PLLCTL |=0x70; //使能PLL
asm NOP;
asm NOP;
while(!(CRG**&0x08)); //PLL锁定
CLKSEL |=0x80; //设置PLL为系统时钟
}
/************************************************************/
/* 初始化ECT模块 */
/************************************************************/
void initialize_ect(void){
ECT_TSCR1_TFFCA = 1; // 定时器标志位快速清除
ECT_TSCR1_TEN = 1; // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
ECT_TIOS = 0xff; //指定所有通道为输出比较方式
ECT_TCTL1 = 0x00; // 后四个通道设置为定时器与输出引脚断开
ECT_TCTL2 = 0x00; // 前四个通道设置为定时器与输出引脚断开
ECT_DLYCT = 0x00; // 延迟控制功能禁止
ECT_ICOVW = 0x00; // 对应的寄存器允许被覆盖; NOVWx = 1, 对应的寄存器不允许覆盖
ECT_ICSYS = 0x00; // 禁止IC及PAC的保持寄存器
ECT_TIE = 0x00; // 禁止所有通道定时中断
ECT_TSCR2 = 0x07; // 预分频系数pr2-pr0:111,,时钟周期为4us,
ECT_T**1 = 0xff; // 清除各IC/OC中断标志位
ECT_T**2 = 0xff; // 清除自由定时器中断标志位
}
/************************************************************/
/* 中断接收函数 */
/************************************************************/
//#pragma CODE_SEG __NEAR_SEG NON_BANKED
//void interrupt CAN_receive(){
// if(CAN0GetMsg(&Msg)){
// if(msg_get.id == ID && (!msg_get.RTR)){
// LEDCPU=~LEDCPU;
// datain=1;
// }
// }
// else{
// for(;;);
// }
//}
//#pargma CODE_SEG DEFAULT
void main(void) {
/* put your own code here */
DisableInterrupts;
INIT_PLL();
initialize_ect();
INIT_CAN0();
LEDCPU_dir=1;
LEDCPU=0;
EnableInterrupts;
msg_send.id = ID;
for(k=0;k<data_len_TX;k++){
msg_send.data[k] = senddata[k];
}
msg_send.len = data_len_TX;
msg_send.RTR = FALSE;
msg_send.prty= 0;
for(;;) {
if(!MSCAN0SendMsg(msg_send))
for(;;);
else
LEDCPU=~LEDCPU;
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
|