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

📄 jk0061119_main._c

📁 Modbus RTU 的C语言程序
💻 _C
字号:
//ICC-AVR application builder : 2006-11-20 17:24:14
// Target : M162
// Crystal: 7.3728Mhz

#include <iom162v.h>
#include <macros.h>
#include <eeprom.h>
#include <F:\单片机\小监控\新的小监控\连瑞宏达C\JK0061119_include.h>
void port_init(void)
{
 PORTA = 0xFF;
 DDRA  = 0x1F;   /////0000 0111// 0: input          1: output
 PORTB = 0xff;
 DDRB  = 0xBF;
 PORTC = 0x1F; 
 DDRC  = 0xE0;   /// 1110 0000    0x60
 PORTD = 0xFF;
 DDRD  = 0xFF;  //
 PORTE = 0xFF;
 DDRE  = 0x00;
}

//Watchdog initialisation
// prescale: 1024K cycles
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR= 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
//TIMER1 initialisation - prescale:1024
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 135mSec
// actual value: 135.000mSec (0.0%)
void timer1_init(void)
{
 TCCR1B= 0x00; //stop
 TCNT1H= 0xFC; //setup
 TCNT1L= 0x34;
 OCR1AH= 0x03;
 OCR1AL= 0xCC;
 OCR1BH= 0x03;
 OCR1BL= 0xCC;
 TCCR1A= 0x00;
 TCCR1B= 0x05; //start Timer
}

#pragma interrupt_handler timer1_ovf_isr:16
void timer1_ovf_isr(void)
{
 //TIMER1 has overflowed
 if(AD_collect_cout>4)
    AD_collect_cout=0;  
 data_collect_flag=1;
 TCNT1H= 0xFC; //reload counter high value
 TCNT1L= 0x34; //reload counter low value
}
//TIMER2 initialisation - prescale:1024
// WGM: Normal
// desired value: 4mSec
// actual value: 
void timer2_init(void)
{
 TCCR2= 0x00; //stop
 TCNT2= 0xE4; //set count
 OCR2= 0x2B; //set compare value
 TCCR2= 0x05; //start timer
}

#pragma interrupt_handler timer2_ovf_isr:12
void timer2_ovf_isr(void)
{
 TCNT2= 0xE4; //reload counter value
 if(Time2_press_key_delay<200)
   Time2_press_key_delay++;
 if(Time2_press_key_delay==150)
   ID_key_pressed=0;
}
//TIMER3 initialisation - prescale:1024
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 178mSec
// actual value: 177.917mSec (0.0%)
void timer3_init(void)
{
 TCCR3B= 0x00; //stop
 TCNT3H= 0xFA; //setup
 TCNT3L= 0xFE;
 OCR3AH= 0x0F;
 OCR3AL= OCR3AL;
 OCR3BH= 0x0F;
 OCR3BL= OCR3BL;
 TCCR3A= 0x00;
 TCCR3B= 0x05; //start Timer
}

#pragma interrupt_handler timer3_ovf_isr:10
void timer3_ovf_isr(void)
{
 //TIMER1 has overflowed
 Time_five_second++;
 Time_one_minute++;
 Time_one_hour++;
 if(LCD_light_on_time>0)
   LCD_light_on_time--;
 else
   PORTA |= 0x10;
 /////////////////////////////////////
 if(Master_Com1_S_Data_flag>9)
   {
      Master_Com1_S_Data_flag_ID++;
	  Master_Com1_S_Data_flag=1;
	}
 if(Master_Com1_S_Data_flag_ID>JK_Value[49])
   {
      temp_temp=A_MK_OUTPUT;
	  ////////////////////////////
	  A_MK_OUTPUT=0;
	  /////////////////////////////////
	  Var_temp_int=temp_temp;////////////////以下三行为模块电流
	  JK_Value[59]=Var_temp_int & 0xff;
	  JK_Value[58]=(Var_temp_int >> 8) & 0xff;
      Master_Com1_S_Data_flag_ID=0;
      Master_Com1_S_Data_flag=8;
	  Com1_R_Data[19]=Com1_R_Data[18];/////本处纯粹是为了模块故障报警
	  Com1_R_Data[18]=0;
    }
 Com1_S_Data_flag=1;
 TCNT3H= 0xFA; //reload counter high value
 TCNT3L= 0xFE; //reload counter low value
}
//call this routine to initialise all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 watchdog_init();
 timer0_init();
 timer1_init();
 timer2_init();
 timer3_init();
 uart0_init();
 uart1_init();

 MCUCR= 0x00; 
 EMCUCR = 0x00;
// GIMSK= 0x00;
 TIMSK= 0x92; //timer interrupt sources
 ETIMSK=0x04;
 GICR= 0x00;
 PCMSK0=0x00;
 PCMSK1=0x00;
 SEI(); //re-enable interrupts
 //all peripherals are now initialised
}

void main(void)
{
   unsigned int Current_Value_temp;
   char  key_pressed_temp,temp;
   init_devices();
   init_Variables_0();
   Com0_S_DataByte=1;
   Com0_S_Pointer=Com0_S_Data;
   UDR0=*Com0_S_Pointer;
   while(1)
    {
	    WDR();
		if(ID_key_pressed)
	      {
		    if(Time2_press_key_delay==3)
			  {
			      key_pressed_temp=catch_press_key();
			      if(ID_key_pressed==key_pressed_temp)
				    {
					   floor_ID_program();
					   select_data_to_LCD_ram();
					   LCD_display();
					 }
				  else
				    ID_key_pressed=0;
			   }
		  }
	    else
		 {
		     ID_key_pressed=catch_press_key();
		  }
		if(Com0_R_Complete)
	     {
		    Com0_R_Complete=0;
		    Com0_Receive_Datas();
		  }
		if(Com1_S_Data_flag)
	     {
		    Com1_S_Data_flag=0;
		    Com1_Send_Datas();
		  }
	    if(Com1_R_Complete)
	     {
		    Com1_R_Complete=0;
		    Com1_Receive_Datas();
		  }
		if(Time_five_second>28)
	     {
	 	   Time_five_second=0;
	       GL_silicon_control();		  
		   //event_fault();
		  }
		if(data_collect_flag)
		   {
		      AD_TLC2543(0x00);
			  error_pickup();
			 }
		temp=TCNT1L;
		if(TCNT1H==0xFE)
		  PORTC&=portc_temp[AD_Channels];
			 
		if(Get_Data)
		  {
		     Get_Data=0;
		    Func_Get_Data();
		    select_data_to_LCD_ram();
			 LCD_display();
			 }
		 if(Time_one_minute>337)
		  {    
		       Time_one_minute=0;   
			   if(Flag_JC_FC>=1)
			     {
				    Time_Limited_JC_register++;
					if(Time_Limited_JC_register>*Time_Limited_JC)
					   {Flag_JC_FC=0;
					     JK_IO[0]&=0xFE;}
				  }
			   if(Flag_JC_FC>=1)
			     {
				    temp_temp=*A_Current_FC;
				    temp_temp*=4095;
					//temp_temp*=3276;
					temp_temp/=*A_Current_BypassSensor;
					Current_Value_temp=temp_temp;
				    if(A_CD_Current<Current_Value_temp)
					   Time_Delay_JC_register++;
					if(Time_Delay_JC_register>*Time_Delay_JC)
					   { Flag_JC_FC=0;
					     JK_IO[0]&=0xFE;}
				  }
		   }
	   if(Time_one_hour>=20223)
	     {
		     PORTA &= 0xF7;
		     Time_one_hour=0;
			 Time_Interval_JC_register++;
			 if(Time_Interval_JC_register>=*Time_Interval_JC)
			      {Flag_JC_FC=1;
				   JK_IO[0]|=0x01;}
			 
			 LCD_display();
			 PORTA |= 0x08;
		  }
		if(Flag_JC_FC)
		   Jun_Chong();
	    else
	       Fu_Chong();
	 }
 }

⌨️ 快捷键说明

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