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

📄 init.c

📁 针对philips的51单片机LPC931的具体应用的例子。实现对uart, spi, i2c等硬件资源的操作。还有针对小内存单片机操作系统的实现。
💻 C
字号:
#include "REG931.H"
#include "memory.h"
#include "system.h"
#include "key.h"
#include "vfd.h"
#include "display.h"
#include "uart.h"
#include "iic.h"




/*****************************
;看门狗初始化子程序
;注意初始化后启动看门狗
*****************************/
void Init_WDT(void) {
#ifdef    	INCLUDE_WATCHDOG
	ACC = WDCON;    //读取WDT 控制寄存器
	ACC = ACC | 0x04;  //置位ACC.2 准备启动WDT
//	ACC = 0xE5;  
	WDL = 0x80;        //设置8 位倒计时器初值// 0xff
	WDCON = ACC;    //启动WDT
	WFEED1 = 0xA5;  //清零第一部分
	WFEED2 = 0x5A;  //清零第二部分
#endif
}

/*****************************
;喂狗子程序
;注意程序中开启中断
*****************************/
void ClrWDT(void) {	// clear watch dog timer
#ifdef    	INCLUDE_WATCHDOG
	EA = 0;                 //关闭中断
	WFEED1 = 0xA5;   //执行清零第一部分
	WFEED2 = 0x5A;   //执行清零第二部分
	EA = 1;                //开中断
#endif
}
//************************************************************************************

// PxM1.y,PxM2.y: 00---准双向;01---推挽; 02---输入(高阻抗); 03---开漏
void InitMcuPort(void){
#if   PLCC_PACKAGE_IO
	// P0
	P0M1=0x00;	P0M2=0x04;		// p0.2 is 推挽
	// P1
	P1M1=0x0c;	P1M2=0x4c;		// p1.6 is 推挽// p1.2; p1.3 is 开漏
	// P2:   P27,P26,P21,P20=key,
	P2M1=0x0;	P2M2=0x0;
	P2 |= 0xC3;		// set keyboard high level
#elif  TSSOP_PACKAGE_IO
	// P0
	P0M1=0x00;   P0M2=0x00;
	P0 |= 0x0F;			// set keyboard high level
	// P1
	P1M1=0x0c;   P1M2=0x4c;		// p1.6 is 推挽// p1.2; p1.3 for i2c is 开漏
	// P2:  
	P2M1=0x00;   P2M2=0x01;		// p2.0 is 推挽
#elif  TSSOP_PACKAGE_IO_SECOND
	// P0
	P0M1=0x00;   P0M2=0x00;
	P0 |= 0x4e;			// set keyboard high level
	// P1
	P1M1=0x0c;   P1M2=0x4c;		// p1.6 is 推挽// p1.2; p1.3 for i2c is 开漏
	// P2:   
	P2M1=0x00;   P2M2=0x01;		// p2.0 is 推挽
#endif
// P3:
	P3M1=0; 	P3M2=0;
}


void Enable_Timer0(){
	ET0=1;
	TAMOD=0x0;
	TMOD |= 0x1;
	TH0=0xD4;	// xx=0xFFFF-(us*Fosc/2)
	TL0=0xCD;
	TR0=1;
#if    1
	ET1=1;
//	TAMOD=0x0;
	TMOD |= 0x10;
	TH1=0xD4;	// xx=0xFFFF-(us*Fosc/2)
	TL1=0xCD;
	TR1=1;
#endif
}

void Init_Var(void){

//	uchar i;
//	for(i=1;i<37;i++)		// initial diaplay buffer
//		DispBuff[i]=0;
	bGrid=1;
	KeyData=0;
	KeyEvent=IDLE;
	Mode=SYS_WORK_PRE;
	Timer64ms=T64ms_384ms;
	bRxDProcessEnd=1;

}

void Init_MCU(void){
	BLANK=0;
	TRIM &= 0xbf;	// disenable clock interrupt
	DIVM=0;
// set SPI & T1 is the highest prioty
	IP0 = 0x08;	IP0H = 0x08;		// set timer 1
	IP1= 0x08;	IP1H = 0x08;		// set SPI   0x08

	DelayMs(10);
	Init_Var(  );
	FreshAllBuff(ALL_OFF);
	InitMcuPort();
	SPI_Init(  );
	DelayMs(100);
	KeyScan(  );
	if(KeyData>K_4)
		bDBKeyHoldEn=1;
	else
		bDBKeyHoldEn=0;
	Enable_Timer0();
	InitRTC(  );
	bUartFuncSelectEn=MCU_SEL_HAND_PIN;
#if   PLCC_PACKAGE_IO   // for debug
	bUartFuncSelectEn=1;
#endif
	bUartFuncSelectEn=0;
	if(bUartFuncSelectEn)
		InitUart(  );
	else
		Init_iic(  );
	Init_WDT(  );
	EA=1;
}

⌨️ 快捷键说明

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