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

📄 hmi.c

📁 proface的触摸屏和艾默生的变频器通过此程序可相互通信
💻 C
字号:
#include ".\STC89c5x.H"
#include"comm.h"

unsigned char uart_complete=0;
unsigned char uart_number=0;
unsigned char timer_buf; 
unsigned char uart_buf[120];
unsigned int read_hmi_buf[50];
unsigned char write_hmi_buf[100];
unsigned char   timer_flag=0;
unsigned char uart_begin_flag=0;
unsigned char run_flagwait=0;
unsigned char timer_number;

sbit  RUN=P1^6;

extern unsigned char i;




void uart_timer_set(void)
{
  
        TCON=0x00;
        PCON=PCON_VALUE;			//波特率选择
        IP=IP_VALUE;	    		//设置各中断优先级		
    	TMOD=TMOD_VALUE;   			//设置各定时器的工作方式
    	T2CON=T2CON_VALUE;
    	SCON=SCON_VALUE;    		//设置串行工作方式
    	TH1=TL1=BAUD_VALUE; 		//设定波特率的值
    	TR1=TRUE;
    	TR0=TRUE;
		TI=RI=FALSE;

        uart_number=0;
       uart_complete=0;

	timer_buf=TIMEOUT;
   

}


//发送一个字节
void uart_send(unsigned char s)
 	{
		SBUF=s;
		while(TI!=TRUE)
			;
		 TI=FALSE;
	}

//-----------------------------------------------------------------------------
void_writehmi_message(void)
	{
		EA=DISABLE;		//turn off	EA
		uart_send(UART_START);
		uart_send(UART_WHITE);
		uart_send(ADDRH_WHITE);
		uart_send(ADDRL_WHITE);
		uart_send(0);
		uart_send(NUMBER_WHITE);
		for(i=0;i<(NUMBER_WHITE*2);i++)
			{
				uart_send(write_hmi_buf[i]);         
			}
		EA=ENABLE;		//turn on EA
					
	}
//--------------------------------------------------------------------------

//-----------------------------------------------------------------------------
void readhmi_message(void)
	{
		EA=DISABLE;		//turn off	EA
		uart_send(UART_START);
		uart_send(UART_READ);
		uart_send(ADDRH_READ);
		uart_send(ADDRL_READ);
		uart_send(00);
		uart_send(NUMBER_READ);
		RI=FALSE;
		ES=ENABLE;
		EA=ENABLE;		//turn on EA
             TH0=TH0_VALUE;	    //20mS
		TL0=TL0_VALUE;
		TR0=1;
		
	}
//-----------------------------------------------------------------------------



void uart_int(void)  interrupt 4  using 2
 	{
		unsigned char data u;
		
		u=SBUF;
		RI=FALSE;
			
		if(uart_number==0)
			{
				
				if(u==UART_START)
					uart_begin_flag=1;
			}
			
		if(uart_begin_flag==1)	//HMI 串口协议
			{
				uart_buf[uart_number]= u;	//read SBUF
				uart_number++;					//counter add 1
		
				if(uart_number==(NUMBER_READ*2+2))
					{
						if(run_flagwait>=RUN_FLAGWAIT)
							{
								run_flagwait=0;
								RUN=!RUN;
							}
						 else run_flagwait++;
						 
						ES=DISABLE;
						RI=FALSE;
						uart_number=0;
						uart_complete =	UART_COMPLETE;
						for(i=0;i<NUMBER_READ;i++)
							{
								read_hmi_buf[i]=((unsigned int)(uart_buf[i+2])*0x100+uart_buf[i+3]);
							}
                                          uart_begin_flag=0;
						TR0=0;
					}
			}
         }


	//*****************************************************************************
void	timer0_int(void) interrupt 1 using 3
	{
		TF0=FALSE;
		TH0=TH0_VALUE;	    //20mS
		TL0=TL0_VALUE;
		timer_number++;

		if(timer_number==timer_buf)
			{
				
				
				timer_number=0;
				timer_buf=TIMEOUT;
				timer_flag=1;
				TR0=0;
			}
		
		//else	if((uart_complete==	UART_COMPLETE))
			//	{
				//	timer_number=0;
				//	timer_buf=TIMEOUT;
				//	timer_flag=0;
				//	TR0=0;
			//	}
	}

⌨️ 快捷键说明

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