📄 mcu.h
字号:
#define LED PTC_PTC4 //系统工作指示灯
unsigned char LED_count=0; //系统工作指示灯计数器
typedef union {
byte Byte;
struct {
byte BIT0 :1;
byte BIT1 :1;
byte BIT2 :1;
byte BIT3 :1;
byte BIT4 :1;
byte BIT5 :1;
byte BIT6 :1;
byte BIT7 :1;
}Bit;
}sys_data_type;
//**************************MCU初始化函数OK***********************************
static void Init_GZ16(void)
{
// CONFIG2设置
CONFIG2=0x0D;
//CONFIG2_SCIBDSRC=1; //SCI时钟源为内部总线时钟
//CONFIG2_OSCENINSTOP=0; //STOP模式下OSC不继续工作
//CONFIG2_TMCLKSEL=1; //TBM时钟为外部时钟的128分频
//CONFIG2_MSCANEN=1; //使能MSCAN
//CONFIG1 配置
// CONFIG1 =0x4B; //禁止看门狗
CONFIG1 =0x4A; //允许看门狗
//CONFIG1_COPD=1; //禁止看门狗
//CONFIG1_COPD=0; //允许看门狗
//CONFIG1_STOP=1; //允许执行STOP指令
//CONFIG1_SSREC=0; //退出STOP的周期为32
//CONFIG1_LVI5OR3=1; //低电压复位模块电源为5V
//CONFIG1_LVIPWRD=0; //允许低电压监视
//CONFIG1_LVIRSTD=0; //STOP模式下禁止低电压复位
//CONFIG1_LVISTOP=1; //允许低电压复位
//CONFIG1_COPRS=0; //看门狗溢出周期为218-24
}
//****************************************************************
void Init_CGM(void)
{
PCTL_BCS=0; /* Select clock source from XTAL */
PCTL_PLLON=0; /* Disable the PLL */
PCTL=0x02; /* Set the VCO Power-of-Two multiplier E=2 */
PMS=0x08; /* Set the Feedback divider N=8 */
PMRS=0x70; /* Set the VCO Linear multiplier L=112 */
PBWC=0x80; /* Select the operating modes */
PCTL_PLLON=1; /* Enable the PLL */
while(!PBWC_LOCK){ /* Wait */}
PCTL_BCS=1; /* Select clock source from PLL */
__asm("nop");
__asm("nop");
}
//***********************SPI初始化 OK*****************************************
static void Init_SPI(void)
{
/* SPCR=0x2a;
SPTIE=0;//禁止SPI发送中断
SPE=1; //使能SPI
SPWOM=0;//普通模式输出
CPHA=1;//数据前对齐
CPOL=0;//时钟极性为上升沿有效
SPMSTR=1;//使能为主机方式
DMAS=0;//禁止DMA方式
SPRIE=0;//禁止SPI接收中断
0010 1010 2A
// SPSCR=0x04;
//SPR0=0;
//SPR1=0;1228.8KHz
//MODFEN=0;模式错误禁止
//SPTE=1;发送器空标志
//MODF=0;模式错误标志
//OVRF=0;溢出标志
//ERRIE=0;错误中断使能位禁止
//SPRF=0;接收数据满标志初始化为0
//0000 1000
*/
SPCR_SPMSTR = 1; //使能为主机方式
SPCR_CPHA = 1; //数据前对齐
SPCR_CPOL = 0; //时钟极性为上升沿有效
SPCR_SPTIE = 0; //禁止SPI发送中断
SPCR_SPE = 1; //使能SPI
SPCR_SPRIE = 0; //禁止SPI接收中断
SPSCR_MODFEN = 0; //模式错误禁止
SPSCR_SPR0 =0;
SPSCR_SPR1 =0; //1000KHz
}
static void Init_PORT(void)
{
//方向寄存器
// DDRA_DDRA0=1; //
// DDRA_DDRA1=1; //
// DDRA_DDRA2=1; //
// DDRA_DDRA3=1; //
DDRA_DDRA4=1; //74HC154数据
DDRA_DDRA5=1; //74HC154数据
DDRA_DDRA6=1; //74HC154数据
DDRA_DDRA7=1; //74HC154数据
// DDRB_DDRB0=0; //MC33389片选
// DDRB_DDRB1=1; //NC
// DDRB_DDRB2=1; //NC
// DDRB_DDRB3=1; //NC
// DDRB_DDRB4=1; //NC
// DDRB_DDRB5=1; //NC
// DDRB_DDRB6=1; //NC
// DDRB_DDRB7=1; //NC
// DDRC_DDRC0=1; //CANTX
// DDRC_DDRC1=0; //CANRX
DDRC_DDRC2=1; //MC33984唤醒
DDRC_DDRC3=1; //MC33984复位
DDRC_DDRC4=1; //LED
DDRC_DDRC5=1; //74HC154片选
DDRC_DDRC6=1; //MC33993片选
DDRD_DDRD0=1; //MC33389片选
// DDRD_DDRD1=0; //MISO
// DDRD_DDRD2=1; //MOSI
// DDRD_DDRD3=1; //SPSCK
DDRD_DDRD4=1; //熄火器正
// DDRD_DDRD5=1; //NC
DDRD_DDRD6=1; //熄火器反
// DDRD_DDRD7=1; //NC
// DDRE_DDRE0=1; //
// DDRE_DDRE1=1; //
DDRE_DDRE2=1; //
DDRE_DDRE3=1; //
DDRE_DDRE4=1; //
// DDRE_DDRE5=1; //
//内部上拉
//PTA作为键盘输入口内部自动上拉
/* PTAPUE_PTAPUE0=1; //
PTAPUE_PTAPUE1=1; //
PTAPUE_PTAPUE2=1; //
PTAPUE_PTAPUE3=1; //
PTAPUE_PTAPUE4=1; //
PTAPUE_PTAPUE5=1; //
PTAPUE_PTAPUE6=1; //
PTAPUE_PTAPUE7=1; //
//PTB无内部上拉
//PTC
PTCPUE_PTCPUE0=1; //
PTCPUE_PTCPUE1=1; //
PTCPUE_PTCPUE2=1; //
PTCPUE_PTCPUE3=1; //
PTCPUE_PTCPUE4=1; //
PTCPUE_PTCPUE5=1; //
PTCPUE_PTCPUE6=1; //
PTDPUE_PTDPUE0=1; //
PTDPUE_PTDPUE1=1; //
PTDPUE_PTDPUE2=1; //
PTDPUE_PTDPUE3=1; //
PTDPUE_PTDPUE4=1; //
*/ PTDPUE_PTDPUE5=1; //
PTDPUE_PTDPUE6=1; //
PTDPUE_PTDPUE7=1; //
}
//**********************软件延迟函数 OK***************************************
void delay(int n)
{
unsigned char TIME=0;
while(TIME<n) {TIME++;}
}
void delay_st(void)
{
__RESET_WATCHDOG();
}
void delay5ms(int n)
{
unsigned int TIME1=0;
while(TIME1<n)
{
TIME1++;
delay(250);
__RESET_WATCHDOG();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -