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

📄 jiema.c

📁 keil c open
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
*********************************************************************************************************
*                                               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 + -