学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

关于atan的问题

关于atan的问题

今天用877单片机编写计算方位角的 程序(C)时 atan计算的值 一直不对(程序的最后4行)  那位能指教一下 谢谢
#include    <stdio.h>
#include "pic.h"
#include "math.h"
int ADx,ADy,ADz,dataresult;
double ADresult;
union adres              //共用体,用于存放AD转换结果
{int y1;
unsigned char adre[2];
}adresult;


void init_system(void)   //系统IO初始化
{
    TRISA=0Xff;
    TRISC=0X00;
}

void init_ad(void)       //AD初始化
{
    ADCON1=0x84;       //10000100   P227 选择AN0 AN1 AN3模拟输入其它数字 结果右对齐
  
    PIE1=0x00;
    PIE2=0x00;
    ADIE=1;            //AD中断允许
    PEIE=1;            //外围中断允许
}

void delay_10us(unsigned char x) {while(x--);}
void delay_ms(unsigned char cnt)
{
    unsigned char i=4;
    do
    {
          do
        {
               delay_10us(39);
          } while(--i);
    } while(--cnt);
}





void main(void)
{   
    init_system();            //系统初始化
    init_ad();                //AD初始化
    ei();                     //总中断允许
    ADCON0=0x81;       //10000001   32T  选择AN0 ADON
    ADGO=1;                   //启动AD转换
   
    adresult.adre[0]=ADRESL;
    adresult.adre[1]=ADRESH;
    ADx=adresult.y1-0x200;     //0x000-0x3ff 0x200为2.5伏
      ADCON0=0x89;       //10001001   32T  选择AN1 ADON
    ADGO=1;                   //启动AD转换
   
    adresult.adre[0]=ADRESL;
    adresult.adre[1]=ADRESH;
    ADy=adresult.y1-0x200;
   
    ADz=ADy/ADx;
    ADresult=atan(ADz);
    dataresult=(int)ADresult;
    delay_10us(2);
}

TOP

发新话题