微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 由AD7712(24位)模数转换到AT89S52中,串口助手显示AD_SDATA脚输出一直为1,求大侠探讨

由AD7712(24位)模数转换到AT89S52中,串口助手显示AD_SDATA脚输出一直为1,求大侠探讨

时间:10-02 整理:3721RD 点击:

代码见下楼


  1. #include <AT89x51.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long


  5. #define ENABLE_INT EA = 1
  6. #define DISABLE_INT EA = 0

  7. //AD7712
  8. sbit AD_SCLK = P0^7;
  9. sbit AD_A0 = P0^6;
  10. sbit AD_SDATA = P0^5;
  11. sbit AD_DRDY = P0^4;
  12. sbit AD_RFS = P0^3;
  13. sbit AD_TFS = P0^2;

  14. void Uart_send(uchar dat)
  15. {
  16.       DISABLE_INT;
  17.       SBUF = dat;
  18.          // while(TI==0);
  19.          // TI = 0;
  20.       ENABLE_INT;//?
  21. }

  22. void delay_nus(unsigned int n)
  23. {
  24.     unsigned int i;
  25.         for(i = n; i > 0; i--)
  26.         {
  27.             ;
  28.         }
  29. }
  30. unsigned long AD7712_read_dat()
  31. {     
  32.         ulong res = 0;
  33.         char index = 0;
  34.         ulong bit_dat;
  35.    
  36.         DISABLE_INT;
  37.        
  38.         AD_RFS = 1;
  39.         AD_SDATA = 1;
  40.         AD_A0 = 0;
  41.         AD_SCLK = 0;
  42.         AD_DRDY = 1;
  43.        
  44.         while(AD_DRDY);
  45.                 AD_A0 = 1;
  46.                 AD_RFS = 0;

  47.         for(index = 0;index < 24; index++)
  48.         {
  49.                 delay_nus(10);
  50.                 AD_SCLK = 1;
  51.                 delay_nus(10);
  52.                 bit_dat = AD_SDATA;
  53.                 Uart_send(bit_dat);//输出一直为1,未解决?
  54.                 delay_nus(10);
  55.                 AD_SCLK = 0;
  56.                 res <<= 1;
  57.                 res +=bit_dat;
  58.                 //Uart_send(res);//输出一直为11111111111,未解决
  59.         }
  60.         AD_RFS = 1;
  61.         AD_A0 = 0;
  62.         ENABLE_INT;
  63.         return res;
  64. }

  65. void main()
  66. {
  67.         ulong uart_adc_dat;
  68.         uint idx;
  69.         ulong adc_dat;

  70.         TMOD=0x20;  //TMOD=0010 0000B,定时器T1工作于方式2
  71.         SCON=0x40;  //SCON=0100 0000B,串口工作方式1
  72.         PCON=0x00;  //PCON=0000 0000B,波特率9600
  73.         TH1=0xfd;   //根据规定给定时器T1赋初值
  74.         TL1=0xfd;   //根据规定给定时器T1赋初值
  75.         TR1=1;      //启动定时器T1   
  76.         while(1)
  77.         {
  78.                 if(idx == 10)
  79.                   {
  80.                        idx = 0;
  81.                         adc_dat =AD7712_read_dat();

  82.                    }
  83.                   idx++;
  84.         delay_nus(400);          
  85.         }
  86. }

复制代码

求大侠

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top