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

📄 main.c

📁 att7025是一个单相SOC的单心片电表方案
💻 C
字号:
#include <ATT7027.H>
#include <MAIN.H>
 xdata struct Emu_Parameter Emu_Parameter;
 xdata struct Emu_Parameter_change Emu_Parameter_change;
 xdata struct real_energy real_energy;
 xdata struct meter_para meter_para;
 data unsigned char  aa[2]={0x0f,0x01};
 xdata unsigned char  g_CommBuffer[50];
 unsigned char NUM;
 unsigned int timea;

void main (void) //_at_ 0x100 
{
//unsigned char i;
    //i = temp2;
  SP =0x7f;//程序堆栈指针
  CKCON&= 0xf8;//定时器/计数器时钟控制Timer 使用clk/4 作为时钟
	BWPR=0xC3	;//使能写PMOD[1:0]操作
	BWPR=0x9B;//开启所有受保护位的写使能
	CBORCFG|=0x80;//开启高频晶振电路功能
	BWPR=0xA8;//关闭所有受保护位和受保护寄存器的写使能
 
	while((SYSSCR&0x80) != 0x80)//LOCK=1表示高频晶振已经稳定
	{;}	
	BWPR=0xC3;//使能写PMOD[1:0]操作
	BWPR=0x9B;//开启所有受保护位的写使能	
	CCLKCFG |=0x02;//			;//SYSCK1=1,fsys=fpri
	CFMCFG|=0xE4;//			;BROM EN可以调用Monitor Rom中程序,		
//	BWPR=0xA8;//关闭所有受保护位和受保护寄存器的写使能
   LcdDrvInit();
	BWPR=0xA8;//关闭所有受保护位和受保护寄存器的写使能
	//usart_init();
	//interrupt_init();
//	init_ATT7027();
//	load_Flash_write();
//	CLRALL_LCD_BUF(); 
   init_time();   
	EA	=1 ;
	Autobaud();
	EICON|= 0x20;//     ;BREAK PONIT IE 
	while(1)
	{ 
/****************************************************/
//把这个放到WHILE(1)能编译过前面就不能进行仿真了

	if(RI == 1)
		{
			Cmd_parser();
      RI = 0 ;
    }  
 
 /* for(i=1;i<=24;i++)
  {
  LADR=i;
  LDAT=0xf ;
   }   */
/****************************************************/
 //RTC_CAL_TEMP();
 EMU_Parameter_change1();
  switch(NUM)
  {
    case 1: // Time
     UpdateLCD(0X11111111);
      break;
    case 2: // Date
     UpdateLCD(0X22222222);
      break;
    case 3: // Energy
     UpdateLCD(0X33333333);
      break;
    case 4: // PeakLevel
    UpdateLCD(0X44444444);
      break;
    case 5: //Time
    UpdateLCD(0X55555555);
      break;
    case 6: // Energy
    UpdateLCD(0X66666666);
      break;
    case 7: // Energy
    UpdateLCD(0X777777771);
      break;
    case 8: // Energy
    UpdateLCD(0X88888888);
      break;
    case 9: // Energy
    UpdateLCD(0X99999999);
      break;
   default:
      UpdateLCD(0XFFFFFFFF);
             break;

  }	 

 if(timea>100)
 {
   NUM++;
   timea=0;
   }
   if(NUM>7)
   NUM=1;
 //communication_dl645();
// DisplayManager();
/****************************************************/
 /* for (i=0;i<60;i++)
  {
  Pulse[i]=i;
  }*/
/****************************************************/
/****************************************************/
//在C中嵌入汇编后能编译过但不能进行仿真
/* #pragma asm
 mov a,#30h
 #pragma endasm*/
/***************************************************/ 
 // Delay(2);
 // Delay(2);	
 /* if(power_ctive<550)
		{
		real_energy.relay_flag |=bitflag_current	;	
    if((real_energy.relay_flag &=bitflag_command_off)&&(!(real_energy.relay_flag &=bitflag_fact_off)))
  	  { 
  	  CTR_ON=0;
      CTR_OFF=1; 
		  real_energy.relay_flag |=bitflag_fact_off	;		      		
		  }
		 else if(!(real_energy.relay_flag &=bitflag_command_off)&&(real_energy.relay_flag &=bitflag_fact_off))
		 	{
		  CTR_ON=1;
      CTR_OFF=0;
		  real_energy.relay_flag &=~bitflag_fact_off	;		
		 	} 
		}
	 else	{
	 	    real_energy.relay_flag &=~bitflag_current;	
	 	    //flag1 &=~bitflag_fact_off;
	 	    }*/
 /* if((flag1&bitflag_EXLVI))
   {
     // DI();
        display_index=5;
    //    display(); 
       Power_fail();     
     do
      {P1.2=0;
           HALT();            
           if(WTIF!=0)                        
           ;// CalcCalendar();         
          } while(EXLVI==0);          
      if(EXLVI)
      
      POWER_On();  
    //  goto aa;
     // delay_ms(4); 
          
   }        
  if(WTIF!=0)
    { 
     CalcCalendar();     
    display_time++;
     display();    
    }
   if(!(flag3&bitflag_Play))
    {
     if(Flag_ICPort)                                                 
     ;// _ICardType();                                               
    }
   if (current_time.second)
	  minute_0_deal=0;	  
		//整分,做时段切换
 if(current_time.second == 0)  //per minute operation
   {
   if (!minute_0_deal)
    {

		     }   // 整点,per 1 hour operation
	      }
	    }	 
   }
   WDTE=0xac; 
   energy_add();
   dl645(); */  
 } 

}

timer0(void) interrupt 1   using 2
 {
  timea++; 
  }

//void Int_isr() interrupt 6 
//{
//	(Monitor_isr);
//}//

/*void Delay( unsigned int num)
{
    while(num >0)
    {
        num --;
    }
} */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -