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

📄 main.c

📁 讲述ADE7755芯片的基本知识和一些基本应用包含C语言编程
💻 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 + -