📄 uart_pv4.c
字号:
#include".\Globle.h"
#include".\Function.h"
#include".\Modbus_RTU.h"
uchar gvc_pv_tmp;
uchar gvc_pv_buff[100];
uchar gvc_pv_counter;
uchar gvc_pv_flg;
uchar gvc_data_buf[17][100];
//Data_buffer buffer;
uchar gvc_com_buf[7];
uchar gvc_free_flg;
uchar gvc_slaver_addr;
LongType gvl_tmp;
void PV_Uart_send(unsigned char c) // 发送
{
UDR0 = c;
while(!(UCSR0A & 0x40));
UCSR0A |=0x40;
}
uchar Pv_check_sum()
{
uchar lvc_counter;
uchar lvc_tmp;
uint lvi_sum_buf;
uint lvi_sum=0;
for(lvc_counter=0;lvc_counter<gvc_pv_counter;lvc_counter++)
{
lvi_sum^=gvc_pv_buff[lvc_counter];
}
if(lvi_sum==0)
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);
*/
}
unsigned char DEC_ASC(unsigned char indata, unsigned char s)
{
if(s) //high bit
{
return(HEX_ASC(indata/10));
}
else
{
return(HEX_ASC(indata%10));
}
}
void PV4_com(uchar message,uchar addr)
{
uchar lvc_i=0;
uchar lvc_check;
gvc_com_buf[0]=0x02;
gvc_com_buf[5]=0x02;
gvc_com_buf[1]=message;
gvc_com_buf[5]^=message;
gvc_com_buf[2]=DEC_ASC(addr,1);
gvc_com_buf[5]^=gvc_com_buf[2];
gvc_com_buf[3]=DEC_ASC(addr,0);
gvc_com_buf[5]^=gvc_com_buf[3];
gvc_com_buf[4]=0x03;
gvc_com_buf[5]^=0x03;
//PORTD|=0x10;
for(lvc_i=0;lvc_i<6;lvc_i++)
{
PV_Uart_send(gvc_com_buf[lvc_i]);
}
//PORTD&=~0x10;
}
void PV4_analyse()
{
uchar lvc_add;
if(gvc_pv_flg&&Pv_check_sum())
{
gvc_pv_flg=0;
lvc_add= ASC_HEX(gvc_pv_buff[3]);
lvc_add=lvc_add*10+ASC_HEX(gvc_pv_buff[4]); //slaver address
gvl_tmp.longword=ASC_HEX(gvc_pv_buff[8]); //ppppppp
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[9]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[10]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[11]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[12]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[13]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[14]);
gvc_data_buf[lvc_add][0]=gvl_tmp.words.wh.bytes.bh;
gvc_data_buf[lvc_add][1]=gvl_tmp.words.wh.bytes.bl;
gvc_data_buf[lvc_add][2]=gvl_tmp.words.wl.bytes.bh;
gvc_data_buf[lvc_add][3]=gvl_tmp.words.wl.bytes.bl;
gvl_tmp.longword=ASC_HEX(gvc_pv_buff[15]); //wwwwwww
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[16]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[17]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[18]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[19]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[20]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[21]);
gvc_data_buf[lvc_add][4]=gvl_tmp.words.wh.bytes.bh;
gvc_data_buf[lvc_add][5]=gvl_tmp.words.wh.bytes.bl;
gvc_data_buf[lvc_add][6]=gvl_tmp.words.wl.bytes.bh;
gvc_data_buf[lvc_add][7]=gvl_tmp.words.wl.bytes.bl;
gvl_tmp.longword=ASC_HEX(gvc_pv_buff[22]); //PPPPP
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[23]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[24]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[25]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[26]);
gvc_data_buf[lvc_add][8]=gvl_tmp.words.wh.bytes.bh;
gvc_data_buf[lvc_add][9]=gvl_tmp.words.wh.bytes.bl;
gvc_data_buf[lvc_add][10]=gvl_tmp.words.wl.bytes.bh;
gvc_data_buf[lvc_add][11]=gvl_tmp.words.wl.bytes.bl;
gvl_tmp.longword=ASC_HEX(gvc_pv_buff[27]); //WWWW
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[28]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[29]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[30]);
//gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[31]);
gvc_data_buf[lvc_add][12]=gvl_tmp.words.wh.bytes.bh;
gvc_data_buf[lvc_add][13]=gvl_tmp.words.wh.bytes.bl;
gvc_data_buf[lvc_add][14]=gvl_tmp.words.wl.bytes.bh;
gvc_data_buf[lvc_add][15]=gvl_tmp.words.wl.bytes.bl;
gvl_tmp.longword=ASC_HEX(gvc_pv_buff[31]); //UUUUU
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[32]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[33]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[34]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[35]);
gvc_data_buf[lvc_add][16]=gvl_tmp.words.wh.bytes.bh;
gvc_data_buf[lvc_add][17]=gvl_tmp.words.wh.bytes.bl;
gvc_data_buf[lvc_add][18]=gvl_tmp.words.wl.bytes.bh;
gvc_data_buf[lvc_add][19]=gvl_tmp.words.wl.bytes.bl;
gvl_tmp.longword=ASC_HEX(gvc_pv_buff[36]); //TTTT
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[37]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[38]);
gvl_tmp.longword=gvl_tmp.longword*10+ASC_HEX(gvc_pv_buff[39]);
gvc_data_buf[lvc_add][20]=gvl_tmp.words.wh.bytes.bh;
gvc_data_buf[lvc_add][21]=gvl_tmp.words.wh.bytes.bl;
gvc_data_buf[lvc_add][22]=gvl_tmp.words.wl.bytes.bh;
gvc_data_buf[lvc_add][23]=gvl_tmp.words.wl.bytes.bl;
}
}
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
gvc_pv_tmp=UDR0;
if(gvc_pv_tmp==0x02)
gvc_pv_counter=0;
gvc_pv_buff[gvc_pv_counter]=gvc_pv_tmp;
gvc_pv_counter++;
if(gvc_pv_tmp==0x03)
gvc_pv_flg=1;
if(gvc_pv_counter>=99)
gvc_pv_counter=0;
//uart has received a character in UDR
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -