📄 main.c
字号:
#include <REG932.H>
#include <define.h>
#include <Stdio.h>
#include <Intrins.h>
//-----***-主程序-***-----//
void main(void)
{
//unsigned char j;
Delay(5000);
InitCpu();
WDT();
EX1=1;//脉冲采集中断打开
TH1=0xA0;
TL1=0xA0;
TR1=0;//启动1定时器
ET1=1;//打开定时器1中断
TH0=0x00;
TL0=0x00;
TR0=1;//启动0定时器
ET0=1;//打开定时器0中断
ES=1;
EA=1; //总中断打开
time0fg=0;
LedFull();
//InceptBuf[0]=0xff;
while(1)
{
if(PowerDown)
{
WDT();
if(HwRxd==0)
{
Delay(5);
if(HwRxd==0)
{
infrarereceive();
TR1=0;
InfSendFg=1;
}
}
if(CmdParseFg)
{
CmdParse();
}
if(EDatafg)
{
EDatafg=0;
inpulse++;
if(inpulse>=3)
{
inpulse=0;
PulseAdd();
LedFull();
//iicEData[0]=HexToBcd(EData[0]);
//wbyteiic(0xa0,0x00,iicEData[0]);
//wbyteiic(0xa0,0x04,inpulse);
}
}
if(!RST&&cmdwr==0)
{
Delay(2000);
if(!RST)
{
cmdwr=1;
}
}
else
{
if(RST)
{
cmdwr=0;
}
}
}
else
{
WDT();
if(EleChFg==0xaa)//------------------>如果电量更改过,掉电存储数据
{
EleChFg=0x00;
iicEData[0]=HexToBcd(EData[0]);
wbyteiic(0xa0,0x00,iicEData[0]);
wbyteiic(0xa0,0x04,inpulse);
}
}
}
}
//-----***-定时器中断用在串口传输-***-----//
void time1()interrupt 3
{
//unsigned char s;
TH1=0xA0;
TL1=0xA0;
time0fg=1;
}
//-----***-显示采用定时器中断方式-***-----//
void time0()interrupt 1
{
//unsigned char s;
TH0=0x00;
TL0=0x00;
t++;
//x++;
W1=W2=W3=W4=W5=W6=0;
if(t==1)
{
W6=1;
P0=LedShowBuf[t]; //--------------------------数据显示!
}
if(t==2)
{
W5=1;
P0=LedShowBuf[t]; //--------------------------数据显示!
}
if(t==3)
{
W4=1;
P0=LedShowBuf[t]; //--------------------------数据显示!
}
if(t==4)
{
W3=1;
P0=LedShowBuf[t]; //--------------------------数据显示!
}
if(t==5)
{
W2=1;
P0=LedShowBuf[t]; //--------------------------数据显示!
}
if(t==6)
{
W1=1;
P0=LedShowBuf[t]; //--------------------------数据显示!
t=0;
}
/* if(s>=30)
{
InDataFg=1;
s=0;
}
s++;*/
}
//-----***-7755脉冲采用外部中断方式-***-----//
void INT_INT1(void) interrupt 2
{
EX1=0;
//inpulse++;
Delay(42);
if(!fg)
{
EDatafg=1;
EleChFg=0xaa;
}
EX1=1;
}
//-----***-串口数据接收-***-----//
void INT_SERIAL(void) interrupt 4 //-----------------红外串口
{
unsigned char i,j,k,c;
j=0;
ES=0; //-----------------------------------------------关闭红外串口接收中断
RI=0; //-----------------------------------------------红外串口接收数据
c=SBUF;
for(i=0;i<8;i++)//----------------------------------------------------数据做偶校验
{
if(c&0x01)
{
j++;
if(j==2)
{
j=0;
}
}
c >>=1;
}
if(j==1)
{
if(RB8)
{
k=1;
}
else
{
k=0;
}
}
else
{
if(RB8)
{
k=0;
}
else
{
k=1;
}
}
if(SendEndFg)
{
if(k)
{ //ComInceptTime=3;
if(SerialBufDptr<50)
{
if(SerialBufDptr==0)//----------------------------------------数据缓冲区地址指针是否为零
{
if(SBUF==0x68)//------------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68
{
InceptBuf[0]=SBUF;
SerialBufDptr++;//------------------------------------缓冲区地址累加
}
else
{
SerialBufDptr=0;
}
}
else
{
if(SerialBufDptr==7)//------------------------------------数据缓冲区地址指针是否为零
{
if(SBUF==0x68)//--------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68
{
InceptBuf[7]=SBUF;
SerialBufDptr++;//--------------------------------缓冲区地址累加
}
else
{
SerialBufDptr=0;
}
}
else
{
InceptBuf[SerialBufDptr]=SBUF;
SerialBufDptr++;//------------------------------------缓冲区地址累加
}
}
}
else
{
SerialBufDptr=0;
}
}
if(InceptBuf[InceptBuf[9]+11]==0x16)
{
SerSendFg=1;
InfSendFg=0;
CmdParseFg=1;
SerialBufDptr=0;
InfraredBufDptr=0;
SendEndFg=0;
SendStrFg=1;
// CmdParse();
}
ES=1;//---------------------------------------------------------------使能接收
}
else
{
ES=0;//---------------------------------------------------------------禁止接收
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -