论坛元老
 
- 积分
- 3772
- 金钱
- 3772
- 注册时间
- 2015-4-26
- 在线时间
- 765 小时
|
发表于 2018-3-21 14:27:04
|
显示全部楼层
[mw_shl_code=applescript,true]static void Uart3_Task(void)
{
static u8 cpu_relay_state = 0;
const char show_buf1[] = "ABC";
const char show_buf2[][5] = {"on","off"};
const u8 simulate_uart1_A[] = {
0xeb,0x90,0xeb,0x90,0xeb,0x90,
0x01,
0x11,
0x11,
0xEc,0x5C
};
const u8 simulate_uart1_B[] = {
0xeb,0x90,0xeb,0x90,0xeb,0x90,
0x01,
0x11,
0x12,
0xac,0x5d
};
const u8 simulate_uart1_C[] = {
0xeb,0x90,0xeb,0x90,0xeb,0x90,
0x01,
0x11,
0x13,
0x6D,0x9d
};
u8 i;
switch(rx3_dat[0])
{
case 0:
printf("NO.5:Calc relay time\n");
printf("NO.8:Ask relay time\n");
printf("NO.9:Fine tune relay time\n [1]:1,+1;2,-1\n [2]:arrary element,val:0-5\n");
printf("NO.0A:Zero drift correction\n [1]:high [2]:low mV\n");
printf("NO.0B:Modify Address\n");
break;
case 1: //使能升压电源
if(rx3_dat[1])
{
pwr_able(1);
printf("XE6008 Enable\n");
}
else
{
pwr_able(0);
printf("XE6008 Disable\n");
}
break;
case 2: //控制 电源方向切换继电器
if(rx3_dat[1])
{
RELAY4_ON;
printf("Relay close\n");
}
else
{
RELAY4_OFF;
printf("Relay cut down\n");
}
break;
case 3: //计算 AD 电压
printf("V = %d.%03d v\n",current_val / 1000,current_val % 1000);
break;
case 4: //开启 关闭过零检测中断
if(rx3_dat[1])
{
if(rx3_dat[1] < 4)
{
printf("Now open the exti[%d] interrupt!\n",rx3_dat[1]);
zero_chk_enable(rx3_dat[1]);
}
else printf("rx3_dat[1] only be 1, 2, 3\n");
}else{
printf("Now close the exti interrupt!\n");
zero_chk_disable();
}
break;
case 5: //计算继电器动作时间
Get_Relay_Action_Time();
printf("action time:%d,%d,%d,%d,%d,%d\n",relay_action_time[0],relay_action_time[1],relay_action_time[2],relay_action_time[3],relay_action_time[4],relay_action_time[5]);
printf("act_flag = %x\n",ifcalc_relay_action_t_flag);
printf("Now restart!\n");
delay_ms(50);
NVIC_SystemReset();
break;
case 6: //切除三相继电器
printf("Cut off all relay!\n");
cutoff_all();
break;
case 7: //模拟串口1接收数据
usart1_flag = sizeof(simulate_uart1_A);
switch(rx3_dat[1])
{
case 1:
for(i=0;i<usart1_flag;i++)
{
rx1_dat = simulate_uart1_A;
}
break;
case 2:
for(i=0;i<usart1_flag;i++)
{
rx1_dat = simulate_uart1_B;
}
break;
case 3:
for(i=0;i<usart1_flag;i++)
{
rx1_dat = simulate_uart1_C;
}
break;
}
// printf("usart1_flag = %d, OK!\n",usart1_flag);
break;
case 8: //查询继电器动作时间
printf("action time: %d,%d,%d,%d,%d,%d\n",relay_action_time[0],relay_action_time[1],relay_action_time[2],relay_action_time[3],relay_action_time[4],relay_action_time[5]);
printf("wait time : %d,%d,%d,%d,%d,%d\n",relay_preaction_time[0],relay_preaction_time[1],relay_preaction_time[2],relay_preaction_time[3],relay_preaction_time[4],relay_preaction_time[5]);
break;
case 9: //微调继电器动作等待时间
if(rx3_dat[1] == 1)//加
{
relay_preaction_time[rx3_dat[2]] ++;
if(relay_preaction_time[rx3_dat[2]] > 9)relay_preaction_time[rx3_dat[2]] = 9;
}
else if(rx3_dat[1] == 2)//减
{
if(relay_preaction_time[rx3_dat[2]] > 0)relay_preaction_time[rx3_dat[2]]--;
}
printf("Now %c %s = %d\n",show_buf1[rx3_dat[2] / 2],show_buf2[rx3_dat[2] % 2],relay_preaction_time[rx3_dat[2]]);
break;
case 0x0a: //零漂校正电压,单位:mV
zero_drift = rx3_dat[1];
zero_drift <<= 8;
zero_drift |= rx3_dat[2];
Test_Write(ZERO_ADD,zero_drift);
printf("Now the zero drift is: %03d\n",zero_drift);
break;
case 0x0b://修改地址
myadd = rx3_dat[1];
Test_Write(ADDR_SAVE_ADD,(u16)myadd);
printf("My new addr: %d\n",myadd);
break;
case 0x0c://查询地址
printf("My addr: %d\n",myadd);
break;
case 0xa0: //使能电源
pwr_able(1);
printf("XE6008 Enable\n");
printf("If not sent cmd_a1,cmd_a3 only allow: 01 03 05 cross,no input other parameter!!\n");
cpu_relay_state = 0;
break;
case 0xa1: //切换继电器
if(rx3_dat[1])
{
RELAY4_ON;
printf("Relay Ready!\n");
printf("Now cmd_a3 only allow: 00 02 04 cross,no input other parameter!!\n");//切出
cpu_relay_state = 1;
}else {
RELAY4_OFF;
printf("Now cmd_a3 only allow: 01 03 05 cross,no input other parameter!!\n");//投入
cpu_relay_state = 0;
}
break;
case 0xa2: //使能、除能译码器
check_io_int_init(); //----------------------------------------------此处打开中断了,注意解决问题后删掉此句
if(rx3_dat[1])
{
ENABLE_74HC238;
printf("enable 74hc238\n");
} else{
DISABLE_74HC238;
printf("disable 74hc238\n");
}
break;
case 0xa3: //发送信号到译码器
printf("cpu_relay_state = %d\n",cpu_relay_state);
if(cpu_relay_state)
{
if(rx3_dat[1] != 0 && rx3_dat[1] != 2 && rx3_dat[1] != 4)
{
printf("Parameter Error!Only allow input : 00 02 04\n");
return;
}
}else {
if(rx3_dat[1] != 1 && rx3_dat[1] != 3 && rx3_dat[1] != 5)
{
printf("Parameter Error!Only allow input : 01 03 05\n");
return;
}
}
send2decoder(rx3_dat[1] & 0x7);
printf("Send msg to decode:0x%02x\n",rx3_dat[1] & 0x7);
break;
default:
break;
}
}[/mw_shl_code] |
|