📄 jiema.c
字号:
/*
*********************************************************************************************************
* jiema.c
* 实时内核
*
* (c) Copyright 2003-9-10: pearmani
* 版权所有
*
* MCU-51 专用代码
* KEIL C51大模式编译
*
* 文件名jiema.c
* 作者 :caochengfu
* 改编 :
*********************************************************************************************************
*/
//2004-2-14 17:22修改报警的高速球
//操作:90 set on n shot 进入设置红外报警设置点的操作
//0513完成主程序
//0514-8:30-9:00,测试发码,发送接收100%成功
//0519-8:30线扫,检验是否改正确,加线扫控制命令
//增加了地址判断
//520 增加了5个命令 线扫命令等
//0523 修改了巡航点的存储
//0523 修改了时间的初始化设置
//0524 耐杰解码
//0526 基本完成耐杰解码
//0526 完成帕尔高的解码框架
// 0529测试解码器收到的数据与协议对不上号,请求支援x
//0604 完成pelco的d协议的普通解码,他的巡航队列由大解码器完成,测试的硬件地址设为1
//0604 1:30 作一下耐杰的解码验证
//0605 完成pelco的p协议的验证
//0910 解决巡航队的看守位问题
#include "extern.h"
/*
*********************************************************************************************************
*名称:TASK f_dummy(void)
*功能:呼唤码处理
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数:无
*创建人: DaiWei
*创建时间:2003-8-16 10:51
*修改时间:
*********************************************************************************************************
*/
void OS_send_stop()
{
sendone=0;sendtwo=0xf0;
sendthree=0;
f_sendbytes();
}
uchar os_ascii_hex(uchar x)
{
uchar i;
x=x-0x30;
if(x>9)
{
i=x-7;
x=i;
}
return x;
}
TASK f_dummy(void)
{
sendtwo=0;
sendthree=0;
}
void f_naijie(void);
/*
*********************************************************************************************************
*名称:void f_delay_10ms(void)
*功能:延时10毫秒
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数:无
*创建人: DaiWei
*创建时间:2003-8-21 10:13
*修改时间:
*********************************************************************************************************
*/
void f_delay_10ms(void)
{
uchar i=0;
for(i=0;i<10;i++)
{
feed_dog=~feed_dog;
}
}
/*
*********************************************************************************************************
*名称:void f_recieve(void) interrupt 4
*功能:串口中断服务程序
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数:
f_rx();//红苹果协议接受函数
f_naijie(); //DEMO协议接受函数
f_pal_d_jiebao()//PROCOL_D协议接受函数
f_pal_p_jiema();//PROCOL_P协议接受函数
f_adopt_jiema(); //曼码,同轴协议接受函数
*创建人: DaiWei
*创建时间:2003-8-21 10:13
*修改时间:
*********************************************************************************************************
*/
void os_add_stop_fun()
{
return;
}
void os_add_data_trans()
{
uchar xdata i=0;
uchar xdata j=0;
uchar xdata k=0;
if(test_521_flag==0)
{
return;
}
if(sendtwo==0xf0)
{
return;
}
switch(sendtwo)
{
case 0x19:
case 0x18:
case 0:
case 0xa0:
case 0x97: return;
}
switch(selection)
{
case 0: return;
case 4:
case 14: return;
default:
// runing_flag_add,
if(time_stop_add<100)
{
f_sendbytes();
runing_flag_add=1;
if( new_command_flag==1)
{
new_command_flag=0;
return;
}
time_stop_add++;
for(j=0;j<230;j++)
for(i=0;i<230;i++);
feed_dog=~feed_dog;
}
else
{
new_command_flag=0;
sendone=0;
sendtwo=0xf0;
sendthree=0xf0;
f_sendbytes();
}
break;
}
}
void f_left_yiwei(uchar j)
{
uchar xdata i,k=j;
for(i=j;i<8;i++)
{
pe[i-j]=pe[i];
}
i=7;
k=j;
for(j;j>0;j--)
{
pe[i--]=0;
}
i=k;
pearmain_position=pearmain_position-k;
pearmain_position=pearmain_position%9;
}
void f_clear_idle_flag()
{
msec=0;
trade_idle_msec=0;
trade_idle_run_brush_flag=1;
}
void f_recieve(void) interrupt 4
{
stop_code_flag=1;
time_stop_add=0;
sub_sendbyte=0;
test_521_flag=1;
brush_stop_flag=1;
TR2=0;
// pelco_stop1=1;
if(runing_flag_add==1)
{
new_command_flag=1;
}
else
{
new_command_flag=0;
}
switch(selection)
{
case 0:
case 14:break;
default: msec=0; iic_recieve_time=0;
break;
}
switch(selection)
{
case 0: test521(); break;
case 1: f_naijie();f_clear_idle_flag(); break;
case 2: f_pal_p_jiema();f_clear_idle_flag();break;
case 3: f_pal_d_jiebao();f_clear_idle_flag();break;
case 13: direction=1;philips_byphis(); f_clear_idle_flag(); break;
case 95: os_tongzhou_old_rx(); f_clear_idle_flag(); break;
case 6:
case 5: test521();f_clear_idle_flag();break;//os_tongzhou_old_rx1(); f_clear_idle_flag(); break;//12-18-2003ccf
case 7: os_samsung_recieve();f_clear_idle_flag();break;
case 8: os_phips_recieve();f_clear_idle_flag();break;
case 9: os_vicon_recieve();f_clear_idle_flag();break;
case 10: os_pansong_recieve();f_clear_idle_flag();break;
case 12: os_dijia_recieve();break;
// case 12: test521();f_clear_idle_flag();break;
case 11: os_de_dicated_micros_recieve();f_clear_idle_flag();break;
case 14: os_pearmain_old_procol();break;
case 15: ultrak();break;
case 115: os_nv_2050_procol_recieve();break;
case 97: direction=1;os_tongzhou_rx(); break;
case 99: direction=1;os_ad_recieve();break;
case 98: direction=1;os_vcltp_recieve();break;
case 4: f_adopt_jiema();break;
default: test521(); break;
}
ES0=1;
TR2=1;
}
/*
*********************************************************************************************************
*名称:TASK f_rx(void)
*功能:串口中断服务程序。;//红苹果协议接受函数
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数: f_jiebao();
f_sendbytes();
*创建人: DaiWei
*创建时间:2003-8-21 10:13
*修改时间:
*********************************************************************************************************
*/
//uchar idata *p=0x30;
extern bit runing_salvo_flag;
TASK f_rx1(void)
{
uchar a,b,i,n,j;
uchar abcd1[6];
uint x=0;
black_screen=0;
//TR0=0;
a=S0BUF;
RI=0;
TR2=0;
if((a&0xe0)==0xe0)
{//**
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}//**
if((a&0x20)==0x20)
{//**
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}//**
if((a&0xd0)==0xd0)
{//**
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}//**
SM2=0;
x=0;
while(!RI)
{
x++;
if(x>800)
{
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}
}
RI=0;
abcd1[0]=a;
a=S0BUF;
abcd1[1]=a;
x=0;
while(!RI)
{
x++;
if(x>800)
{
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}
}
RI=0;
a=S0BUF;
b=a&0x07;//
j=a>>4;
j=j-1-b;
i=abcd1[0]+b+3;
a=(abcd1[1]-1)/i;
x=100*abcd1[0]+10*a+j;
// x=x-1;
if(hard_address!=255)//地址判断
{
if(x!=0xff)
if(x!=hard_address)
{
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}
}
f_clear_idle_flag();
msec=0;
TR0=0;
for(n=0; n<b;n++)
{//**
x=0;
ES0=0;
while(!RI)
{
x++;
if(x>800)
{
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}
}
RI=0;
abcd1[n+2]=S0BUF;
}//**
SM2=1;
ES0=1;
if(direction==0)
{
if(abcd1[3]==0)
{
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}
}
TR0=1;
function = abcd1[3];
function1 = abcd1[4];
sub_sendbyte=0;
function2 = abcd1[5];
if(limited_max_code==1)
{
if(function<9)
{
if(function>4)
{
function2=0x2;
}
function1=2;
limited_max_code=0;
}
}
recieve_ok=1; //用来标志数据的接收移好,可以用来处理
f_jiebao();
if(direction==1)
{
if((call_team_flag==1)&&(runing_salvo_flag==1))
{
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}
if(sub_sendbyte==1)
{
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
return;
}
f_sendbytes();
}
ES0=1;
TR2=1;
TR0=1;
SM2=1;
EA=1;
ES0=1;
EA=1;
msec=0;
trade_idle_run_brush_flag=1;
iic_recieve_time=0;
black_screen=0;
}
/*
*********************************************************************************************************
*名称:TASK f_jiebao(void)
*功能:串口中断服务红苹果协议数据分析
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数: f_direction_jiebao();//控制电机,镜头数据分析
f_menu_jiebao();//控制菜单数据分析
*创建人: DaiWei
+*创建时间:2003-8-21 10:13
*修改时间:
*********************************************************************************************************
*/
TASK f_jiebao(void)
{
if(direction!=0)
{
f_direction_jiebao();
}
else
{
f_menu_jiebao();
f_dummy();
}
}
/*
*********************************************************************************
* 清除标志位
* set_team_flag 设置队列标志
* call_team_flag 巡航队列运行标志
* track_flag 轨迹跟踪标志
* run_pre_flag 跑预置点标志
*名称:TASK f_clear_flag(void)
*功能:清除标志位
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数: 无
*创建人: DaiWei
*创建时间:2003-8-21 10:13
*修改时间:
*********************************************************************************************************
*/
TASK f_clear_flag(void)
{
set_team_flag=0;
call_team_flag=0;
track_flag=0;
run_pre_flag=0;
// black_screen=0;
}
/*
**********************************************************************************
* 修改参数:sendone,sendthree,sendtwo
*名称:TASK f_sub_left(void)
*功能:* 左移子函数
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数: 无
*创建人: DaiWei
*创建时间:2003-8-21 10:13
*修改时间:
*********************************************************************************************************
* 修改时间:2003-5-21 11:05
*********************************************************************************
*/
TASK f_sub_left(void)
{
if(function1>0x80)
{
function1=0x80;
}
sendtwo=0xc2;
sendthree=function1;
sendfour=0;
}
/*
********************************************************************************
*左移函数
** 修改参数:sendone,sendthree,sendtwo
*名称:TASK f_left(void)
*功能:* 左移子函数,黑平左翼的功能
* 输入参数:无
*输出参数:无
*处理的数据:无
*调用的函数: f_clear_flag();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -