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

📄 hardconfig.c

📁 前两天一个朋友要我写一个51例程
💻 C
字号:
/********************************************************/	
/*文件名:  										*/
/*功能:  						*/
/*编写:  										*/
/*建立时间: 
/*修改纪录: 											*/
/********************************************************/
/*定时计数器均作为定时器使用,工作模式为1,不使用计数器,波特率发生器始终使用定时器2*/
#include <hardconfig.h>	

#ifdef	Timer1
Data16B		data	Timer1Value;   	//一定要定义在DATA区
#endif	
#ifdef	Timer0
Data16B		data	Timer0Value;
#endif
/*TimeMs: 定时时间,单位毫秒,返回的为定时器的值
注: 此程序只是本人以前为了设置时间方便而做,会增加代码的占用率
RAM一般不会占用*/ 
INT16U	 GetTimerValue(INT8U	TimeMs)	
{
	#ifdef	Fosc
		return(0xffff-OnemsData*TimeMs);		
	#else	
		#error	"没定义系统工作频率,检查hardconfig.h里第25行的Fosc配置"/*有很多地方的定义应加入检错,比如现在定义的双倍速等,
		                              又比如以上计算时钟初值的地方,应加入超出正常值的检错。*/	
	#endif	
}
//=======================================================
#ifdef	Timer0
void	Timer0Config(DataStr16B	*TimerValueDt)
{  	
	ET0		=	1; 
	TH0		=	TimerValueDt->HighByte;	 
	TL0		=	TimerValueDt->LowByte;
}
#endif
//=======================================================
#ifdef	Timer1
void	Timer1Config(DataStr16B	*TimerValueDt)
{
				// 定时器1工作方式2 ,定时器2方式1	
	ET1		=	1; 	 	
	TH1		=	TimerValueDt->HighByte;	 
	TL1		=	TimerValueDt->LowByte;
}
#endif
//=======================================================
#ifdef	Uart
  /*
typedef	enum	
{
	U19200Bps=1,
	U9600Bps=2,			 
	U4800Bps=3,
	U2400Bps=4,
	U1200Bps=5
}BpsSet;

BpsSet	BandRate;*/
//#ifdef	UartDouble
//	#define		SetUartDoubleOrNot() 	PCON = 0x80		//SMOD=1;
//#else
//	#define		SetUartDoubleOrNot() 	PCON = 0x00		//SMOD=1;
//#endif
void	 UartConfig()
{ 	
	Data16B	UartOrgValue; 		
	UartOrgValue.U16B=	(0xffff-Fosc/UartBand/32*Double+1);
	RCAP2H=UartOrgValue.Str16B.HighByte;
	RCAP2L=UartOrgValue.Str16B.LowByte;		//2400Bps,倍速 4800Bps
	TH2=UartOrgValue.Str16B.HighByte;;  
	TL2=UartOrgValue.Str16B.LowByte;
//	#ifdef	UartDouble
//	PCON = 0x80;
//	#endif 
	EnableUart();
	SetUartMode();
	T2CON=0X34;	 
	
//	StartTimer2();	 
	
}
void	SendDataSub(uchar	UartSData)
{
	#if	(VerifyBit==0)
		SBUF= UartSData;
	#elif(VerifyBit==1)
		ACC=UartSData;
		TB8=P;
		SBUF=ACC;
	#elif(VerifyBit==2)
		ACC=UartSData;
		TB8=~P;
		SBUF=ACC;
	
	#endif
}
/**/
uint		RecDataSub()
{
	Data16B		UartRecRet;
	UartRecRet.Str16B.HighByte= 0;
  #if	(VerifyBit==0)			
		UartRecRet.Str16B.LowByte= SBUF;
	#elif(VerifyBit==1)
		ACC=SBUF;
		if(RB8!=P)
		{
			UartRecRet.Str16B.HighByte= 0X80;				
		} 
		UartRecRet.Str16B.LowByte= ACC;		
	#elif(VerifyBit==2)
		ACC=SBUF;
		if(RB8==P)
		{
			UartRecRet.Str16B.HighByte= 0X80;
		}
		UartRecRet.Str16B.LowByte= ACC;		
	#endif
	return(UartRecRet.U16B);
}
#endif

void	HardConfigSub()
{
	/*定时器初始化*/
	DisLedInit();
	#ifdef	Timer1
	SetTimerMode();
	Timer1Value.U16B=	GetTimerValue(Timer1SetTime);
	Timer1Config(&Timer1Value.Str16B);
	StartTimer1(); 
	EnableInterrupt();
	#endif
	#ifdef	Uart
	UartConfig();
	#endif
	/*串口初始化*/
	
	
}

⌨️ 快捷键说明

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