📄 main.c
字号:
//文件名 main.c
//UPS切换装置
//周登勇
#include "main.h"
void main()
{
Init();
for(;;)
{//计算恢复切换和主从切换
if( bAC1Low && !bAC2Low)
{//AC1欠压
if( !bLocat )
{//AC2不欠压,切换到AC2
ACChange( 1 );
}
}
else if( bAC2Low && !bAC1Low )
{//AC2欠压
if( bLocat )
{//AC1不欠压切换到AC1
ACChange( 0 );
}
}
else if( !bAC1Low && !bAC2Low )
{//系统正常
if( bMainSub )
{
if( bLocat )
{//切换到AC1
if( bAC2 )
{//过零切换
ACChange( 0 );
}
}
else
{
bAC1 = FALSE;
}
}
else
{
if( !bLocat )
{//过零到AC2
if( bAC1 )
{//同步切换
ACChange( 1 );
}
}
else
{
bAC2 = FALSE;
}
}
}
WatchDog();
ReadMainSub();
}
}
void Init()
{
IT0 = TRUE;
IT1 = TRUE;
EX0 = TRUE;
EX1 = TRUE;
ET0 = TRUE;
ET1 = TRUE;
TMOD = 0X99;
EA = 1;
}
void Ac1SyncInt() interrupt 0
{
TR0 = FALSE;
TH0 = 0XFD;
if( bAC1Low )
{
TL0 = 0XF8;
}
else
{
TL0 = 0XC0;
}
TR0 = TRUE;
//计算切换
if( AC1Count<500 )
{
AC1Count++;
}
else
{
bAC1Low = FALSE;
}
bAC1 = TRUE;
}
void Ac2SyncInt() interrupt 2
{
TR1 = FALSE;
TH1 = 0XFD;
if( bAC2Low )
{
TL1 = 0XF8;
}
else
{
TL1 = 0XC0;
}
TR1 = TRUE;
//计算切换
if( AC2Count<500 )
{
AC2Count++;
}
else
{
bAC2Low = FALSE;
}
bAC2 = TRUE;
}
//AC1欠压切换
void Ac1LowInt() interrupt 1
{
AC1Count = 0;
bAC1Low = TRUE;
}
//AC2欠压切换
void Ac2LowInt() interrupt 3
{
AC2Count = 0;
bAC2Low = TRUE;
}
//AC切换
//numb=0换向AC2 else 切向AC1
void ACChange( BOOL numb )
{
if( !numb )
{
P1 = 0XEB;
}
else
{
P1 = 0XE7;
}
Delay( 5 );
P1 = 0XFF;
}
//延时
void Delay( U16 count )
{
U16 i;
for( i=0; i<count; i++ )
{
WatchDog();
}
}
//喂狗
void WatchDog()
{
P1 = 0X5F;
P1 = 0XFF;
}
//读取运行模式
void ReadMainSub()
{
if( bMode != bMainSub )
{
if( cModeCount < 5000 )
{
cModeCount++;
}
else
{
bMainSub = bMode;
cModeCount = 0;
}
}
else
{
cModeCount = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -