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 问