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

📄 can初始化程序.c

📁 单片机数据通讯典型应用(光盘内容)
💻 C
字号:
#define BASE 0x7F;                              //定义寻址的基址,P2.7口,低电平有效
#define MODR BASE + 0x00;                     //PeliCAN模式
#define CMR  BASE + 0x01;                     //设置命令寄存器
#define SR  BASE + 0x02;                      //设置状态寄存器
#define IR  BASE + 0x03;                      //设置中断寄存器
#define IER  BASE + 0x04;                     //中断使能
#define BTR0  BASE + 0x05;                        //总线定时寄存器的值
#define BTR1  BASE + 0x06;
#define OCR  BASE + 0x07;                         //输出控制寄存器的值
#define ACR0  BASE + 0x10;                        //设置报文类型
#define ACR1  BASE + 0x11;
#define ACR2  BASE + 0x12;
#define ACR3  BASE + 0x13;
#define AMR0  BASE + 0x14;
#define AMR1  BASE + 0x15;
#define AMR2  BASE + 0x16;
#define AMR3  BASE + 0x17;
#define CDR  BASE + 0x1F;                    		//时钟分频寄存器的值
#define BUFDLC  BASE + 0x10;                       //DLC
#define BUFID0  BASE + 0x11;                       //ID地址
#define BUFID1  BASE + 0x12;
#define BUFID2  BASE + 0x13;
#define BUFID3  BASE + 0x14;
#define BUFDATA0  BASE + 0x15;                    //数据地址  
#define BUFDATA1  BASE + 0x16;
#define BUFDATA2  BASE + 0x17;
#define BUFDATA3  BASE + 0x18;
#define BUFDATA4  BASE + 0x19;
#define BUFDATA5  BASE + 0x1A;
#define BUFDATA6  BASE + 0x1B;
#define BUFDATA7  BASE + 0x1C;

void init_can(void)
{
    uchar state;
    uchar ACRR[4];
uchar AMRR[4];                   

    ACRR9+[0] = 0x11;                  			// 接收代码寄存器
    ACRR[1] = 0x22;  
    ACRR[2] = 0x33;
ACRR[3] = 0x44;  
    AMRR[0] = 0x00;                  				// 接收屏蔽寄存器
    AMRR[1] = 0Xff;    
    AMRR[2] = 0x00;
AMRR[3] = 0xff;  
    Do                           // 使用do--while语句确保进入复位模式
    {                           // 设置MOD.0=1--进入复位模式,以便设置相应的寄存器
       MODR  = 0x09;
       state = MODR;
    }
    while( !(state & 0x01) );
 
CDR  = 0x88;               // CDR为时钟分频器,CDR.3=1--时钟关闭, 
//CDR.7=0---basic CAN, CDR.7=1---Peli CAN
    ACR0 = ACRR[0];       	// 初始化接收代码寄存器
    ACR1 = ACRR[1];
    ACR2 = ACRR[2];
    ACR3 = ACRR[3];
 
    AMR0 = AMRR[0];   		// 初始化接收屏蔽寄存器
    AMR1 = AMRR[1];
    AMR2 = AMRR[2];
    AMR3 = AMRR[3];
 
    BTR0 = 0x31;       		// 总线定时寄存器0 ;总线波特率设定
    BTR1 = 0x1C;         	// 总线定时寄存器1 ;总线波特率设定
    OCR  = 0xAA;           	// 配置输出控制寄存器
IER  = 0x01;            		// IER.0=1--接收中断使能; IER.1=0--关闭发送中断使能
CMR  = 0x04;            		// 释放接收缓冲器 

    do						// 使用do--while语句确保退出复位模式
    {
       MODR   = 0x08;    	//MOD.3=0--双滤波器模式
       state  = MODR;
     }
    while( state & 0x01 );
}

⌨️ 快捷键说明

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