📄 main.c
字号:
#include "KeyHead.h"
#include "main.h"
void main()
{
DelayTime(100, 100);
InitSys();
for(;;)
{
if( Flag5ms )
{
Flag5ms = 0;
Trans552DataToMain();
TransMainDataTo552();
}
if( Flag250ms )
{
Flag250ms = 0;
WatchDogBit=(~WatchDogBit);
}
if(MainDataFlag)
{
MainDataFlag = 0;
RecMainSioData();
}
Rec552SioData();
}
}
void Timer0Int(void) interrupt 1
{
MICRO_Timer0Load( TH0_PARAM, TL0_PARAM );
Flag5ms = 1;
T250msCounter++;
if(T250msCounter<50)
return ;
Flag250ms = 1;
T250msCounter = 0;
T1Second++ ;
if( T1Second<4 )
return;
T1Second = 0 ;
T2Second++;
if(T2Second>=2)
{
T2Second=0 ;
Flag2Second = 1;
}
}
void InitSys()
{
unsigned int i;
TransPort=0;
P1 = 0;
for(i=0; i< TRANS_TAL; i++)
{
TransBufRP[i] = 0;
TransBufWP[i] = 0;
TransBufTal[i] = 0;
TransTo552BufRP[i] = 0;
TransTo552BufWP[i] = 0;
TransTo552BufTal[i] = 0;
DelayByteTime[i] = 0;
}
Flag5ms = 0;
Flag250ms = 0;
Flag2Second = 0;
MainDataFlag = 0;
MainSioData = 0;
T250msCounter = 0;
T1Second=0, T2Second=0;
AddrSio[0] = 0x8008;
AddrSio[1] = 0x8000;
AddrSio[2] = 0x9000;
AddrSio[3] = 0x9008;
Init552Sio();
TMOD = 0x21; //定时器T1用于串口,定时器T0用于16位定时器。
MICRO_Timer0Load(TH0_PARAM, TL0_PARAM);
TL1 = 0xf4; TH1 = 0xf4; //11.0592M 2400bps 模式0
TR1 = 1; //允许T1计数位
SCON=0x40; PCON=0x00; TI=1 ; //串口数据发送中断标志位
RI = 0; //串口数据接收中断标志位
REN = 1;
TR0 = 1; //允许T0计数位,T0开始计数
IP = 0x10;
IE = 0x92; //开放中断,允许T0中断,允许ES中断
}
//**************************************************************
//延时程序,通过参数传入的值改变延时时长
//在延时的过程中继续看门狗操作,防止复位
//典型延时参数: (12M 875MS: 100, 100)
//**************************************************************
void DelayTime(int Delay1Value, int Deay2Value )
{
int xdata Delay1, Delay2, Delay3;
for(Delay1=0; Delay1<Delay1Value; Delay1++)
{
for(Delay2=0; Delay2<Deay2Value; Delay2++)
{
Delay3 = Delay1*Delay2;
WatchDogBit = ~WatchDogBit;
}
}
}
void RecMainSioData(void)
{
MICRO_SendToBuf(TransTo552Buf[0][TransTo552BufWP[0]], MainSioData,
TransTo552BufWP[0], TransTo552BufTal[0], TRANS_BUF_SIZE );
MICRO_SendToBuf(TransTo552Buf[1][TransTo552BufWP[1]], MainSioData,
TransTo552BufWP[1], TransTo552BufTal[1], TRANS_BUF_SIZE );
MICRO_SendToBuf(TransTo552Buf[2][TransTo552BufWP[2]], MainSioData,
TransTo552BufWP[2], TransTo552BufTal[2], TRANS_BUF_SIZE );
MICRO_SendToBuf(TransTo552Buf[3][TransTo552BufWP[3]], MainSioData,
TransTo552BufWP[3], TransTo552BufTal[3], TRANS_BUF_SIZE );
}
void Rec552SioData(void)
{
unsigned char data i, RecData;
unsigned int data Addr552;
for(i=0; i<SIO_TAL; i++)
{
Addr552 = AddrSio[i];
if ( (XBYTE[Addr552+UC_552_LSR]) & 1 )
{
RecData = XBYTE[Addr552+UC_552_RHR];
MICRO_SendToBuf(TransBuf[i][TransBufWP[i]], RecData,
TransBufWP[i], TransBufTal[i], TRANS_BUF_SIZE );
}
}
}
void TransMainDataTo552(void)
{
unsigned char data i, TransData;
unsigned int data Addr552,FramRP,FramTal;
for(i=0; i<TRANS_TAL; i++)
{
if( TransTo552BufTal[i]==0 )
continue;
Addr552 = AddrSio[i];
if(XBYTE[Addr552+UC_552_LSR] & 0x20)
{
FramRP = TransTo552BufRP[i];
FramTal = TransTo552BufTal[i];
MICRO_GetFromBuf(TransTo552Buf[i][FramRP], TransData,
FramRP, FramTal, TRANS_BUF_SIZE );
if(TransData == 0xc0)
{
DelayByteTime[i]++;
if(DelayByteTime[i]<3)
continue;
DelayByteTime[i] = 0;
}
TransTo552BufRP[i] = FramRP;
TransTo552BufTal[i] = FramTal;
XBYTE[Addr552+UC_552_THR] = TransData;
}
}
}
void Trans552DataToMain(void)
{
unsigned char TransData;
if( TransBufTal[TransPort]>0 )
{
MICRO_GetFromBuf(TransBuf[TransPort][TransBufRP[TransPort]], TransData,
TransBufRP[TransPort], TransBufTal[TransPort], TRANS_BUF_SIZE );
SBUF = TransData;
NoDataTimes = 0;
}
else
{
NoDataTimes++;
if( NoDataTimes<3 )
return;
NoDataTimes = 0;
TransPort++;
if( TransPort>=TRANS_TAL )
TransPort=0;
}
}
void Init552Sio(void)
{
unsigned char data i;
unsigned int data Addr552;
for(i=0; i<SIO_TAL; i++)
{
Addr552 = AddrSio[i];
XBYTE[Addr552 + UC_552_LCR] = 0x80;//配置波特率
XBYTE[Addr552 + UC_552_DLL] = BAUD_RATE_2400L;//波特率参数=FRQ / 波特率*16
XBYTE[Addr552 + UC_552_DLM] = BAUD_RATE_2400H;
XBYTE[Addr552 + UC_552_FCR] = 0x00;//没用FIFO
XBYTE[Addr552 + UC_552_LCR] = 0x03;//8位数据,无校验,1位停止位
XBYTE[Addr552 + UC_552_IER] = 0x00;
}
}
void SerialRecMainDataInt(void) interrupt 4
{
if(TI)
TI = 0;
if(RI)
{
RI = 0;
MainSioData = SBUF;
MainDataFlag = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -