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

📄 init_all.c

📁 c编写的嵌入式程序源码
💻 C
字号:
/*************************************************************
// 初始化程序模块
// 1.定时器3初始化程序;
// 2.ADC初始化程序;
// 3.CAN初始化程序;
// 29位扩展标识符
// 发送标识符0x0000 0001;
// 接收标识符0x0000 0000;
// 波特率50kbps
*************************************************************/
#include "common.h"

//定时器3初始化程序
void Init_Timer3(void)
{
	T3CON=0x0010;//内部时钟,8分频
	TMR3=0;
	PR3=ADC_Time;  
	T3CONbits.TON = 1;          
}

//ADC12初始化程序
void Init_ADC12(void)
{
	ADPCFG=0xFEC4;//AN0,AN1,AN3,AN4,AN5,AN8为模拟输入;
	TRISBbits.TRISB0=1;
	TRISBbits.TRISB1=1;
	TRISBbits.TRISB3=1;
	TRISBbits.TRISB4=1;
	TRISBbits.TRISB5=1;
	TRISBbits.TRISB8=1;
	ADCON1=0x0044;//采用TMR3自动转换
	ADCON2=0x042C;//,选择VDD,VSS,扫描,每12个采样中断一次
	ADCSSL=0x0138;//扫描AN3,AN4,AN5,AN8;
	ADCON3=0x003F;//Tad=32Tcy;

	IFS0bits.ADIF = 0;			//中断标志位清0;
	IPC2bits.ADIP = 7;			//中断优先级;
	IEC0bits.ADIE = 1;			//允许中断请求;
	ADCON1bits.ADON=1;	        //使能AD转换;
}

//定时器1初始化程序
void Init_Timer1(void)
{
	
	TMR1 = 0;
	T1CON = 0x0030;
	PR1 = Trans_Time;
	IFS0bits.T1IF = 0;
	IPC0bits.T1IP = 7;
	IEC0bits.T1IE = 1;

}


//CAN初始化程序
void Init_CAN()
{
    C1CTRLbits.REQOP = 0x4; //请求进入配置模式
    while (C1CTRLbits.OPMODE!=0x4){}  //确认进入配置模式
    C1TX0CON = 0x0003;      //发送缓冲器0配置,高优先级
    C1TX0SID = 0x0001;      //发送缓冲器0扩展标准标识符,11位 0000 0000 000
	C1TX0EID = 0x0000;      //发送缓冲器0扩展标志符12位  0000 0000 0000
    C1TX0DLC = 0x05c0;      //发送缓冲器0数据长度,8字节,扩展标识符6位 000100

    C1TX1CON = 0x0003;      //发送缓冲器1配置,高优先级
    C1TX1SID = 0x0001;      //发送缓冲器1扩展标准标识符,11位
	C1TX1EID = 0x0000;      //发送缓冲器1扩展标志符12位
    C1TX1DLC = 0x05c0;      //发送缓冲器1数据长度,8字节,扩展标识符6位

    C1TX2CON = 0x0003;      //发送缓冲器2配置,高优先级
    C1TX2SID = 0x0001;      //发送缓冲器2扩展标准标识符,11位  0000 0000 000
	C1TX2EID = 0x0000;      //发送缓冲器缓冲器2扩展标志符12位  0000 0000 0000
    C1TX2DLC = 0x05c0;      //发送缓冲器2数据长度,8字节,扩展标识符6位 000100

    C1RX0CON = 0x0004;      //接收缓冲器0配置
//    C1RX0CON = 0x0000;      //接收缓冲器0配置
//    C1RX0DLC = 0x0008;      //接收缓冲器0数据长度,8字节

    C1RX1CON = 0x0000;      //接收缓冲器1配置
//    C1RX1DLC = 0x0008;      //接收缓冲器1数据长度,8字节


    C1RXF0SID = 0x0001;     //接收过滤器0扩展标识符,11位
    C1RXF0EIDH = 0x0000;    //接收过滤器0扩展标识符高12位
    C1RXF0EIDL = 0x0000;    //接收过滤器0扩展标识符低6位  0010 00
	C1RXM0SID = 0xffff;     //接收屏蔽0标准标识符 
	C1RXM0EIDH = 0xffff;
	C1RXM0EIDL = 0xffff;
/*
    C1RXF1SID = 0x0001;     //接收过滤器1扩展标识符,11位
    C1RXF1EIDH = 0x0000;    //接收过滤器1扩展标识符高12位 0000 0000 0000
    C1RXF1EIDL = 0x0c00;    //接收过滤器1扩展标识符低6位  0000 11
	C1RXM1SID = 0xffff;     //接收屏蔽1标准标识符 
	C1RXM1EIDH = 0xffff;
	C1RXM1EIDL = 0xffff;
*/

    C1CFG1 = 0x004d;        //波特率配置 50kbps
    C1CFG2 = 0x05f6;
/*
	C1INTF = 0;				
 	IFS1bits.C1IF = 0;  
	C1INTEbits.RX0IE = 1; 			
 	C1INTEbits.TX0IE = 1;              
 	IEC1bits.C1IE = 1;	
*/
 	C1INTF = 0;					//复位所有CAN内部中断标志
 	IFS1bits.C1IF = 0;  			//复位CAN中断标志
 	C1INTE = 0x00FF;               //使能CAN内部所有中断
 	IEC1bits.C1IE = 1;				//使能 CAN 中断	
		
    C1CTRLbits.REQOP = 0x0; //请求进入正常模式
    while (C1CTRLbits.OPMODE!=0x0);  //确认进入正常模式
	return;
}

⌨️ 快捷键说明

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