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

📄 send_ofs.c

📁 单片机C源程序souce
💻 C
字号:
#include "ext_temp.h"
extern unsigned char toasc(unsigned char m);
extern SendDSP(void);
extern unsigned char *char_to_asc(unsigned char m,bit ch);
extern unsigned long mul_div(unsigned char a[16],unsigned long divisor);
extern WriteCont(unsigned char CMD,unsigned char addr,unsigned char DataArray[],unsigned char offset);
extern wdt(void);

extern send_ofs(void)
    {
    unsigned char num[16];//做除法用
	long xdata temp;
	unsigned char par,*b;
	char i;

    wdt();


 	  // **********数据转换算法
 	  temp =ay_par-az_par; 
	  if (temp>=500000000)//大于500000000就为负值
	     {
		 temp=1000000000-temp;//得到负值的正数
		 c_flag=1;
		 }
	  else
	     c_flag=0;
	     
/*      temp -=500000000;   
	  if (temp<0) //如果是负数,将转换成正数,再运算
	      {
	      c_flag=1;//负数
		  temp=temp^0xffffffff;
		  temp++; //取反加1
		  }
	  else
	      c_flag=0;//正数和0
/************对数组赋值,准备作除法运算
***temp左移23位再除5^9
***
***************************************/
	  temp=temp<<3;//先左移3位,相当于*8
	  for(i=10;i>2;i=i-2)//左移20位
	    {
	     par=temp;
		 num[i]=par&0x0f;
		 num[i-1]=par>>4;
		 temp=temp>>8;
		}
//	   a[1]=temp;a[0]=0;//
	 for(i=11;i<16;i++)
	    num[i]=0x00;
	 num[1]=0;num[0]=0;
     num[2]=0;

	 temp=mul_div(num,1953125);//除5^9

	 if (c_flag) //temp是负值,将得到的值取负号
	    {
	    temp=temp^0xffffffff;
		temp=temp+1;//取反加1
		}
	//重组$BDOFS帧
	  rdata[0]='$';rdata[1]='B';
	  rdata[2]='D';rdata[3]='O';
	  rdata[4]='F';rdata[5]='S';
	  rdata[6]=',';

		par =temp;
		b=char_to_asc(par,1);
		rdata[13]=*b++;
		rdata[14]=*b;
		par =temp>>8;
		b=char_to_asc(par,1);
		rdata[11]=*b++;
		rdata[12]=*b;
		par =temp>>16;
		b=char_to_asc(par,1);
		rdata[9]=*b++;
		rdata[10]=*b;
		par =temp>>24;
		b=char_to_asc(par,1);
		rdata[7]=*b++;
		rdata[8]=*b;
	rdata[15]=',';
	for (i=0;i<4;i++)
	    pps_asc[i]=rdata[i+9];//提取PPS部分值

	for (i=16;i<=23;i++)
	   rdata[i]=0x30;//0
	rdata[24]=0x0d;
	rdata[25]=0x0a;

/***************存取OFS帧*****************/
	WriteCont(0x02,0x60,rdata,0);
	WriteCont(0x02,0x70,rdata,16);
	WriteCont(0x02,0x80,rdata,32);
/*******************************************/
    temp = ay_par;
    for(i=3;i>=0;i--)
	   {
	   num[i]=temp;
	   temp=temp>>8;
	   }
   temp = az_par;
    for(i=7;i>=4;i--)
	   {
	   num[i]=temp;
	   temp=temp>>8;
	   } 
	WriteCont(0x02,0xA0,num,0);
       
/*********************************/
	RXLen =26;
    
//**发送经DSP
	SendDSP(); 
  
     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -