C8051F121在天线测试系统中的应用源码

该博客详细介绍了C8051F121微控制器在天线测试系统中的应用,通过C语言实现了角度数据的处理和串口0发送。内容包括定时器延时函数、看门狗功能、串口数据格式化以及不同方位角的数据更新。博客还展示了如何根据限位状态调整角度计数值,并提供了完整的源码示例。
摘要由CSDN通过智能技术生成

MAIN.C

 

#include "stddef.h"

 ex_ void    Init_Config (void);

 EX_ ULONG     AZ_CP_COUNT ;
 EX_ ULONG     EL_CP_COUNT ;
 EX_ ULONG    RV_CP_COUNT ;
 EX_ ULONG    SD_CP_COUNT ;

UCHAR   UART_BUFFER[14]  = {0xff,0,0,0,0,0,0,0,0,0,0,0,0,0xfe};
UCHAR   UART_SOUT_BIT    = 15;
 
 

 


/*********************************************************************************** 
* 函数名称:delay; 

* 函数功能描述:定时器延时子函数; 
*               
* 输入参数:none; 

* 返回数据:none; 

* 注意:    none; 
************************************************************************************/ 

void delay(unsigned int time)
{
 while(time--);
}

/*********************************************************************************** 
* 函数名称:WatchDog; 

* 函数功能描述:UART_SOUT_BIT 
*               
* 输入参数:NONE; 

* 返回数据:none; 

* 注意:   none; 
************************************************************************************/ 
void WatchDog()
{
   DOG=~DOG;
   delay(200);
   DOG=~DOG;
    delay(200);
}

 

/*********************************************************************************** 
* 函数名称:UART_SBUF0(); 

* 函数功能描述:串口0发送数据; 
*               
* 输入参数:发送数据; 

* 返回数据:none; 

* 注意:   none; 
************************************************************************************/ 


void UART_SBUF0()
{
    uchar SFRPAGE_save = SFRPAGE;       // Save the current SFRPAGE
 ULONG pCOUNT=0;
 uchar pD=0;
 uchar i =0;
 uchar EndFlag=0xfe;
 char * pStr=UART_BUFFER;
    SFRPAGE=UART0_PAGE;

 /**************方位***************/


 if(UART_SOUT_BIT&0x01)
 {
  pCOUNT=AZ_CP_COUNT;
  
  UART_BUFFER[pD+1]=0;
  if(AZ_LIMIT_CW) //顺限位
   UART_BUFFER[pD+1]|=0x40;
  if(AZ_LIMIT_CC) //逆限位
   UART_BUFFER[pD+1]|=0x80;
  
  i=pCOUNT&0xff ;
  if(i>0xfd)
   {
    UART_BUFFER[pD+3]=0xff-i;
    UART_BUFFER[pD+1] |=0x10;
    }
    else
    UART_BUFFER[pD+3]=i;
  i=(pCOUNT>>8)&0xff ;
   if(i>0xfd)
   {
    UART_BUFFER[pD+2]=0xff-i;
    UART_BUFFER[pD+2]|=0x20;
    }
    else
    UART_BUFFER[pD+2]=i;

  UART_BUFFER[pD+1]|=((pCOUNT>>16)&0x0f);
  pD+=3;
 }


/**************府仰***************/
 if(UART_SOUT_BIT&0x02)
 {
  pCOUNT=EL_CP_COUNT;
  
  UART_BUFFER[pD+1]=0;
  if(EL_LIMIT_UP) //方位限位
   UART_BUFFER[pD+1]|=0x40;
     
  if(EL_LIMIT_DN) //方位限位
   UART_BUFFER[pD+1]|=0x80;

  i=pCOUNT&0xff ;
  if(i>0xfd)
   {
    UART_BUFFER[pD+3]=0xff-i;
    UART_BUFFER[pD+1] |=0x10;
    }
    else
    UART_BUFFER[pD+3]=i;
  i=(pCOUNT>>8)&0xff ;
   if(i>0xfd)
   {
    UART_BUFFER[pD+2]=0xff-i;
    UART_BUFFER[pD+2]|=0x20;
    }
    else
    UART_BUFFER[pD+2]=i;
 
  UART_BUFFER[pD+1]|=((pCOUNT>>16)&0x0f);
  pD+=3;
   }
/**************接收***************/
 if(UART_SOUT_BIT&0x04)
 {
  pCOUNT=RV_CP_COUNT;
  
  UART_BUFFER[pD+1]=0;
  if(RV_LIMIT_CW) //方位限位
   UART_BUFFER[pD+1]|=0x40;
    
  if(RV_LIMIT_CC) //方位限位
   UART_BUFFER[pD+1]|=0x80;


  i=pCOUNT&0xff ;
  if(i>0xfd)
   {
    UART_BUFFER[pD+3]=0xff-i;
    UART_BUFFER[pD+1] |=0x10;
    }
    else
    UART_BUFFER[pD+3]=i;
  i=(pCOUNT>>8)&0xff ;
   if(i>0xfd)
   {
    UART_BUFFER[pD+2]=0xff-i;
    UART_BUFFER[pD+2]|=0x20;
    }
    else
    UART_BUFFER[pD+2]=i;
 
  UART_BUFFER[pD+1]|=((pCOUNT>>16)&0x0f);
  pD+=3;
  }
/**************发射***************/
 if(UART_SOUT_BIT&0x08)
 {
  pCOUNT=SD_CP_COUNT;

     UART_BUFFER[pD+1]=0;
  if(SD_LIMIT_CW) //方位限位
   UART_BUFFER[pD+1]|=0x40;
  if(SD_LIMIT_CC) //方位限位
   UART_BUFFER[pD+1]|=0x80;

  i=pCOUNT&0xff ;
  if(i>0xfd)
   {
    UART_BUFFER[pD+3]=0xff-i;
    UART_BUFFER[pD+1] |=0x10;
    }
    else
    UART_BUFFER[pD+3]=i;
  i=(pCOUNT>>8)&0xff ;
   if(i>0xfd)
   {
    UART_BUFFER[pD+2]=0xff-i;
    UART_BUFFER[pD+2]|=0x20;
    }
    else
    UART_BUFFER[pD+2]=i;         
 
  UART_BUFFER[pD+1]|=((pCOUNT>>16)&0x0f);
  pD+=3;
   }
 
  UART_BUFFER[++pD]|=0xfe;
/***************************结束*******************************/
 
   do
  { 
   
     SBUF0=*pStr;
     while(TI0==0);
     TI0=0;
  
   }
   while(EndFlag!=*pStr++);
  
 
 SFRPAGE = SFRPAGE_save;             // Restore the SFRPAGE   


}

void main()

  Init_Config ();                       // 初始化硬件

 EA = 1;                               // 允许全局中断
   

 while(1)
 {


  if(UART_SOUT_BIT)UART_SBUF0();      /*向上位机发送角度*/
  if(ASK)UART_SOUT_BIT=0;             /*角度返回 0自动返回 1问答返回*/

      delay(40000);
    delay(10000);
     delay(10000);
     WatchDog();
 }


}

 

STDDEF.H

 

 

#ifndef __CONFIG_C__
#define __CONFIG_C__

#include "c8051f120.h"
#include "intrins.h"
#include "stdio.h"
#include "STRING.H"
#include "math.h"
#include "stdlib.h"

/************custom**********/

#define uchar unsigned char
#define uint  unsigned  int
#define ulong unsigned long
#define UCHAR unsigned char
#define UINT  unsigned  int
#define ULONG unsigned long
#define EX_   extern
#define ex_   extern

/************SETUP 看门狗端口**********/

sbit DOG=   P1^0;

/************SETUP 问

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值