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