MSP430与mcp2515的can通讯程序1

2019-07-20 16:26发布

本帖最后由 NYT369 于 2016-5-21 12:31 编辑

用msp430afe253制作了电路板,程序已经在电路板上运行正常
程序示例:#include "CAN.h"#include "msp430_config.h"#include "mcp2515.h"
#define uchar unsigned char#define uint unsigned int
uchar flag;INT16U NUM_COUNT = 0;INT8U  Time_Flag = 0;#define CAN_RST_0      P1OUT &=~BIT1   //#define CAN_RST_1      P1OUT |= BIT1    //
uchar Address;                      //地址uchar RecvBuff[8]={0};              //接收缓存区     uchar SendBuff[8]={0}, SendIndex=0; //发送缓存区,接发送数据缓存区对应数

uchar can_isr_flag = 0;         //P1.2有CAN中断标志:接收、发送、错误、溢出uchar can_rcv_data_flag = 0;    //CAN接收数据标志uchar datapro_write_flag=0;//处理接收的数据正确,置位发送uchar times;                   //计数次数uchar SYSTime;

/////////////////////////////////////////////////////////////////////////////////////////////void delay(uint x){  uchar i;  while(x--) for(i=120;i>0;i--);}///////////////////////////////////////////////////////////void Init_Clk(){  uchar i;  BCSCTL1&=~XT2OFF;             //打开XT2振荡器 //基础时钟控制寄存器BCSCTL1的第7位置0,使XT2启动  do  {    IFG1 &= ~OFIFG;               // 清除振荡器失效标志    for (i = 0xFF; i > 0; i--);   // 延时,等待XT2起振  }  while ((IFG1 & OFIFG) != 0);     // 判断XT2是否起振  BCSCTL2 =SELM_2+SELS+DIVS_0;    //选择MCLK为XT2  SMCLK为XT2 不分频}/////////////////////////////////////////////////////////void Init_TimeA(){   TACCTL0 = CCIE;               //TBCCR0允许中断   TACCR0 = 8000;                //TIME:8000/(8mhz) =1ms                       TACTL = TASSEL_2 + MC_1;     //SMCLK,增计数模式   _BIS_SR( GIE);    }
///////////////////////////////////////////////////////////void set_p12_to_int( void ){
P1DIR&=~BIT2; // 中断引脚应该设置为输入 P1IES|=BIT2;  //设置为下降沿触发,=0上升触发 P1IFG&=~BIT2; //因为P2IES设置会使中断标志位置位,故清零 P1IE|=BIT2;   //设置中断使能}//////////////////////////////////////////////void init_SD24(){  uint i;  SD24CTL = SD24SSEL_1+SD24REFON+SD24DIV_3;                       // 1.2V ref, SMCLK,SMLCK 8分频  SD24INCTL0 = SD24INCH_0+SD24GAIN_16;                            // Set channel A0+/- 16倍增益   SD24CCTL0 |= SD24SNGL  + SD24IE+SD24OSR_512+SD24DF;             // Single conv,enable interrupt  采样率为512  数据格式(当增益为1时0-32768表示0~-600mv  65535~32768表示0~600mv)   for (i = 0; i < 0x3600; i++);                                   // Delay for 1.2V ref startup
}/////////////////////////////////////////////////////////////////////由于发帖字数限制,该帖子未完,请关注续贴。技术交流:qq:531706356,13106551527
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。