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

📄 link12.c

📁 51单片机与艾默生变频器的通讯程序,对工控开发人员有帮助
💻 C
字号:
#include  <reg51.h>
#include  <intrins.h>
typedef	unsigned char	INT8U;
typedef	unsigned int	INT16U;
typedef unsigned long   INT32U;
/************************** 定义**************************************/
sbit chanel0 = P1^0;
sbit chanel1 = P1^1;
sbit chanel2 = P1^2;

INT8U data Hz_H ;
INT8U data Hz_L;
INT8U data countt;
INT8U data com_count;
INT8U data com_EV1000[18];
INT8U data com_part;
INT8U data com_command1;
INT8U data com_command2;
INT8U data com_find;
INT16U data com_data;
INT16U data final_data;
unsigned char code ACSII[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};

///////////////延时1ms子函数//////////////////////////////////////
void DelayX1ms(INT16U count)/*延时XmS子程序*/
{
	INT16U i;
 	INT8U j;
 	for(i=0;i<count;i++)
 		for(j=0;j<110;j++); 
}

///////////////////串口初始化////////////////////////
void com_start(void)
{
        TMOD = 0x20;        /*定时器*计数器1的操作模式为2*/
        PCON = 0x00;
        SCON = 0x40;         /*串口工作方式1*/
        TH1  = 0xfd;        /*定时器1的重装载值,此时若SMOD=0,9.6K;SMOD=1,19.2K*/
        TL1  = 0xfd;
        TR1  = 1;           /*定时器*计数器1开始工作*/
        REN  = 1;           /*允许串行口接收*/
}
/////////////////串口接收子函数////////////////////
unsigned char com_rev(void)
{
	INT8U com_buf ;
	REN=1;
	while(RI!=1)  ;
        RI=0;
	com_buf=SBUF;
	return(com_buf);
}
////////////////串口发送子函数////////////////////
void com_sent(INT8U sent)
{
	SBUF=sent;
	while(TI!=1)  ;
        TI=0;

}
//////////////////EV1000累加和计算/////////////////
void EV1000_com_add(void)
{
        INT16U ev_add;
        INT8U ev_add_h;
        INT8U ev_add_l;
        INT8U i;
        ev_add=com_EV1000[1];
        for(i=2;i<13;i++)
        {
                ev_add= ev_add+com_EV1000[i];
        }
        ev_add_h = (ev_add&0xff00) / 256;
        ev_add_l = ev_add&0xff;
        com_EV1000[13] = ACSII[(ev_add_h&0xf0)/16];
        com_EV1000[14] = ACSII[ev_add_h&0x0f];
        com_EV1000[15] = ACSII[(ev_add_l&0xf0)/16];
        com_EV1000[16] = ACSII[ev_add_l&0x0f];
        com_EV1000[17] = 0x0d;
}
void EV1000_sent()
{       
        INT8U com_data_h,com_data_l,i;
        com_EV1000[0] = 0x7e;
        com_EV1000[1] = ACSII[(com_part&0xf0)/16];
        com_EV1000[2] = ACSII[com_part&0x0f];  
        com_EV1000[3] = ACSII[(com_command1&0xf0)/16];
        com_EV1000[4] = ACSII[com_command1&0x0f];    
        com_EV1000[5] = ACSII[(com_find&0xf0)/16];
        com_EV1000[6] = ACSII[com_find&0x0f];
        com_EV1000[7] = ACSII[(com_command2&0xf0)/16];
        com_EV1000[8] = ACSII[com_command2&0x0f];   
        com_data_h = (com_data & 0xff00) / 256;
		com_data_l = com_data & 0x00ff ;
		com_EV1000[9] = ACSII[ (com_data_h & 0xf0) /16 ] ;
		com_EV1000[10] = ACSII[ com_data_h & 0x0f ] ;
		com_EV1000[11] = ACSII[ (com_data_l & 0xf0) /16 ] ;
		com_EV1000[12] = ACSII[ com_data_l & 0x0f ] ;
		EV1000_com_add();
		for(i=0;i<18;i++)
		{
		        com_sent(com_EV1000[i]);
		}
}
/////////////////主函数/////////////////////////////
void main()
{
        INT16U i;
    	com_start();
	    com_part = 1 ;
    	com_command1 = 2 ;
	    com_find = 0 ;
    	com_command2 = 1 ;
        final_data = 5000 ;
        i=0;
        while(final_data != i)
        {
                if((final_data - i) >= 1000)     
                {  
                        com_data=i;
	                    EV1000_sent();
                        DelayX1ms(200);
                        i=i+100;
                }
		        else if((final_data - i) >= 100)
	        	{
		                com_data=i;
	                    EV1000_sent();
                        DelayX1ms(200);
                        i=i+10;
		        }
		        else if((final_data - i) >= 10)
	        	{
		                com_data=i;
	                    EV1000_sent();
                        DelayX1ms(200);
                        i=i+1;
		        }
				else if((final_data - i) >= 0)
	        	{
		                com_data=i;
	                    EV1000_sent();
                        DelayX1ms(200);
                        i=i+1;
		        }
		}
        while(1);
}

⌨️ 快捷键说明

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