#ifndef __UART__
#define __UART__
#include "sfr_r835a.h"
#include "type_def.h"
#include "head_ram.h"
/***********************************************************
uart zero
作从机
***********************************************************/
void TxdData_Check_Zero(void)
{
txd_data_zero[5] = txd_data_zero[0]+txd_data_zero[1]+txd_data_zero[2]+txd_data_zero[3]+txd_data_zero[4];
txd_data_zero[5] ^= 0xff;
txd_data_zero[5]++;
f_trse_zero = 1;
f_rcve_zero = 0;
f_data_err_zero = 0;
f_uart_busy_zero = 1;
te_u0c1 = 0;
re_u0c1 = 0;
}
void UartTxd_Zero(void)
{
if(f_trse_zero)
{
re_u0c1 = 0;
te_u0c1 = 1;
if(trs_cnt_zero==0)
{
u0tbl = txd_data_zero[0];
trs_cnt_zero++;
}
else if(trs_cnt_zero>6)
{
trs_cnt_zero = 0;
rcv_cnt_zero = 0;
f_trse_zero = 0;
te_u0c1 = 0;
f_rcve_zero = 1;
}
}
}
void UartRxd_Zero(void)
{
unsigned char temp;
if(f_rcve_zero)
{
re_u0c1 = 1;
te_u0c1 = 0;
if(rcv_cnt_zero>=6)
{
trs_cnt_zero = 0;
rcv_cnt_zero = 0;
f_rcve_zero = 0;
re_u0c1 = 0;
if(rxd_data_zero[0]==0xa5)
{
temp = rxd_data_zero[0]+rxd_data_zero[1]+rxd_data_zero[2]+rxd_data_zero[3]+rxd_data_zero[4];
temp ^= 0xff;
temp++;
if(temp!=rxd_data_zero[5])
{
err_cnt_zero = 0;
f_data_err_zero = 1;
//f_rxd_ok = 0;
}
else
{
f_data_err_zero = 0;
f_rxd_ok_zero = 1;
}
}
else
{
f_data_err_zero = 1;
err_cnt_zero = 0;
//f_rxd_ok = 0;
}
}
}
}
void UartData_Zero(void)
{
unsigned char i;
if(f_rxd_ok_zero)
{
f_rxd_ok_zero = 0;
if(rxd_data_zero[1]==0x38) //同步
{
txd_data_zero[1] = 0x38;
txd_data_zero[2] = err_data;
txd_data_zero[3] = 0;
if(f_safe_switch) //安全开关
{
txd_data_zero[3] |= 0x80;
}
if(f_motor_run) //电机运行指示
{
txd_data_zero[3] |= 0x40;
}
if(f_sensor_zero) //前传感指示
{
txd_data_zero[3] |= 0x20;
}
if(f_sensor_two) //后传感指示
{
txd_data_zero[3] |= 0x10;
}
if(f_poweroff) //poweroff指示
{
txd_data_zero[3] |= 0x1;
}
txd_data_zero[4] = 0;
}
else if(rxd_data_zero[1]==0x08)//红外
{
txd_data_zero[1] = 0x08;
txd_data_zero[2] = rxd_data_zero[2];
txd_data_zero[3] = rxd_data_zero[3];
if(rxd_data_zero[2]==SENSOR_FRONT)
{
txd_data_zero[4] = sonsor_ad_one;
}
else if(rxd_data_zero[2]==SENSOR_FRONT)
{
txd_data_zero[4] = sonsor_ad_two;
}
else if(rxd_data_zero[2]==SENSOR_FRONT_S)
{
txd_data_zero[4] = sonsor_ad_one;
}
else if(rxd_data_zero[2]==SENSOR_BEHIND_S)
{
txd_data_zero[4] = sonsor_ad_two;
}
}
else if(rxd_data_zero[1]==0x00)//读
{
txd_data_zero[1] = 0x00;
txd_data_zero[2] = rxd_data_zero[2];
txd_data_zero[3] = UI08(parameter_array[rxd_data_zero[3]]&0x00ff);
txd_data_zero[4] = UI08(parameter_array[rxd_data_zero[3]]>>8);
}
else if(rxd_data_zero[1]==0x80) //写
{
txd_data_zero[1] = 0x80;
txd_data_zero[2] = rxd_data_zero[2];
parameter_temp = rxd_data_zero[4];
parameter_temp <<= 8;
parameter_temp |= rxd_data_zero[3];
if(param_min[rxd_data_zero[2]]<=parameter_temp&¶meter_temp<=param_max[rxd_data_zero[2]])//在范围内
{
txd_data_zero[3] = rxd_data_zero[3];
txd_data_zero[4] = rxd_data_zero[4];
}
else if(parameter_temp>param_max[rxd_data_zero[2]])//大于最大 //返回最大
{
parameter_temp = param_max[rxd_data_zero[2]];
txd_data_zero[3] = UI08(parameter_temp&0x00ff);
txd_data_zero[4] = UI08(parameter_temp>>8);
}
else if(parameter_temp<param_min[rxd_data_zero[2]])//小于最小 //返回最小
{
parameter_temp = param_min[rxd_data_zero[2]];
txd_data_zero[3] = UI08(parameter_temp&0x00ff);
txd_data_zero[4] = UI08(parameter_temp>>8);
}
Uart_Write_One();
}
else
{
return;
}
if(f_run) //运行标志
{
txd_data_zero[1] |= 0x40;
}
TxdData_Check_Zero();
}
}
void Uart_Write_Zero(void)
{
if(rxd_data_zero[2]==49) //P1复位参数
{
}
else if(rxd_data_zero[2]==98) //P2复位参数
{
}
else //老化模式
{
}
f_e2_write = 1;
Device_Addr = 0xa0;
Word_Addr = rxd_data_zero[2]+rxd_data_zero[2];
dat[0] = txd_data_zero[3];
dat[1] = txd_data_zero[4];
if(rxd_data_zero[2]==4||rxd_data_zero[2]==5||rxd_data_zero[2]==30
||rxd_data_zero[2]==31||rxd_data_zero[2]==32)
{
f_write_uart = 1;
}
if(rxd_data_zero[2]==21)
{
f_uart_two = 1;
f_write_uart = 1;
}
}
void Uart_Zero(void)
{
UartRxd_Zero();
UartData_Zero();
UartTxd_Zero();
}
/***********************************************************
uart one
作主机
***********************************************************/
void TxdData_Check_One(void)
{
txd_data_one[5] = txd_data_one[0]+txd_data_one[1]+txd_data_one[2]+txd_data_one[3]+txd_data_one[4];
txd_data_one[5] ^= 0xff;
txd_data_one[5]++;
f_trse_one = 1;
f_rcve_one = 0;
f_data_err_one = 0;
f_uart_busy_one = 1;
te_u1c1 = 0;
re_u1c1 = 0;
}
void Uart_Start(void)
{
if(f_start)
{
if(uart_start_cnt>=32)
{
uart_start_cnt = 0;
if(!f_uart_busy)
{
if(param_n==(SYS_MODE+1)) //工作模式参数1
{
txd_data_one[2] = 165;
}
else if(param_n==(SYS_MODE+2)) //工作模式参数1
{
txd_data_one[2] = 59;
}
else if(param_n==(SYS_LOW_SPEED+1)) //布头速度
{
txd_data_one[2] = 167;
}
else if(param_n==(SYS_TOP_SPEED+1)) //高速
{
txd_data_one[2] = 103;
}
else if(param_n==(SYS_FOOT_MODE+1)) //刹车压脚模式
{
txd_data_one[2] = 53;
}
else if(param_n==(SYS_STOP_UD+1)) //中途停车针位
{
txd_data_one[2] = 57;
}
else if(param_n==(SYS_FOOT_PROTIMES+1)) //后抬压脚保留时间
{