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

📄 uart_tls.c

📁 TLS35协议转换成MODBUS ASCII协议
💻 C
字号:
#include".\Globle.h"
#include".\Function.h"
#include".\Uart_modbus.h"
uchar	gvc_tls_tmp;
uchar	gvc_tls_buff[100];
uint	gvi_tls_counter;
uchar	gvc_tls_flg;
uchar 	gvc_data_buf[17][100];
//Data_buffer buffer;
uchar 	gvc_com_buf[7];
uchar 	gvc_free_flg;
uchar	gvc_slaver_addr;


void Tls_Uart_send(unsigned char c) // 发送 
{
	UDR0 = c;
	while(!(UCSR0A & 0x40));
	UCSR0A |=0x40;
}

uchar Tls_check_sum()
{
	uchar lvc_counter;
	uchar lvc_tmp;
	uint lvi_sum_buf;
	uint lvi_sum=0;
	for(lvc_counter=0;lvc_counter<84;lvc_counter++)
		{
			lvi_sum+=gvc_tls_buff[lvc_counter];

		}
	
	lvi_sum=0-lvi_sum;
	lvi_sum_buf=combination(ASC_HEX(gvc_tls_buff[84]),ASC_HEX(gvc_tls_buff[85]));
	lvi_sum_buf<<=8;
	lvi_sum_buf+=combination(ASC_HEX(gvc_tls_buff[86]),ASC_HEX(gvc_tls_buff[87]));
	if(lvi_sum==lvi_sum_buf)
		return(1);
	else
		return(0);
		
/*
	Tls_Uart_send(lvi_sum/256);
	Tls_Uart_send(lvi_sum%256);
	
	Tls_Uart_send(lvi_sum_buf/256);
	Tls_Uart_send(lvi_sum_buf%256);
*/
	
}

void Tls_com(uchar message,uchar addr)
{
	uchar lvc_i;
	gvc_com_buf[0]=0x01;
	gvc_com_buf[1]=0x69;
	gvc_com_buf[2]=0x32;
	gvc_com_buf[3]=0x30;
	gvc_com_buf[4]=HEX_ASC(message);
	gvc_com_buf[5]=HEX_ASC(Caculate_H_OP(addr));
	gvc_com_buf[6]=HEX_ASC(Caculate_L_OP(addr));

	for(lvc_i=0;lvc_i<7;lvc_i++)
		{
			//PORTD|=0x10;
			//M_uart_send(gvc_com_buf[lvc_i]);
			
			//PORTD&=~0x10;
			Tls_Uart_send(gvc_com_buf[lvc_i]);
		}
}

void Tls_analyse()
{
	uchar lvc_counter;
	uchar lvc_addr;
	uchar lvc_addr_h;
	uchar lvc_addr_l;
	if(Tls_check_sum())
		{
			//M_uart_send(0x66);
			
			lvc_addr_h=ASC_HEX(gvc_tls_buff[ADDR_H]);
			lvc_addr_l=ASC_HEX(gvc_tls_buff[ADDR_L]);
			//M_uart_send(lvc_addr_h);
			//M_uart_send(lvc_addr_l);
			lvc_addr=combination(lvc_addr_h,lvc_addr_l);
			//M_uart_send(lvc_addr);
			if(gvc_tls_buff[4]==0x31)
				{
					for(lvc_counter=0;lvc_counter<56;lvc_counter++)
						{
							if((gvc_tls_buff[HEAD+lvc_counter]>=0x30&&gvc_tls_buff[HEAD+lvc_counter]<=0x39)
								||(gvc_tls_buff[HEAD+lvc_counter]>=0x41&&gvc_tls_buff[HEAD+lvc_counter]<=0x46))
								{
									gvc_data_buf[lvc_addr][lvc_counter]=gvc_tls_buff[HEAD+lvc_counter];
								}
							else
								{
									gvc_data_buf[lvc_addr][lvc_counter]=0x30;
								}
									
							//M_uart_send(gvc_tls_buff[HEAD+lvc_counter]);
						}


				}
			
		}



}


#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
	gvc_tls_tmp=UDR0;
	if(gvc_tls_tmp==0x01)
		gvi_tls_counter=0;

	gvc_tls_buff[gvi_tls_counter]=gvc_tls_tmp;
	gvi_tls_counter++;
	
	if(gvc_tls_tmp==0x03)
		gvc_tls_flg=1;

	if(gvi_tls_counter>=99)
		gvi_tls_counter=0;
	
 //uart has received a character in UDR

}

⌨️ 快捷键说明

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