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

📄 mcu.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 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 + -