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