囧小错吧 关注:136贴子:6,649
  • 5回复贴,共1

51单片机A/D转换程序求解释!

取消只看楼主收藏回复

只给程序中的几行核心代码:
int addr=0x7ff8,b;
for(n=0;n<8;n++)
{
b=addr+n;
XBYTE[b]=0; //启动A/D转换
while(!INT0);
while(INT0); //等待A/D转换
a[n]=XBYTE[b];
}
我不理解的是那两个while循环!当启动A/D后,WR写信号发出,当转换完成后,ADC0809发出信号给int0,然后单片机发出读信号RD给ADC0809的OE。第一个while信号是把int0变成高电平吗?第二个while循环是等待转换结束ADC0809发出EOC信号?还有,第二个while(INT0)一定要有吗?为什么有些程序里在启动AD和读取AD的代码中间只有一个while(!INT0)?最后一个问题,关于XBYTE,请问这是数组还是什么,它的具体用法是什么?


IP属地:江苏1楼2013-12-12 12:55回复
    求指导


    IP属地:江苏2楼2013-12-12 12:56
    回复
      这是全的代码:
      #include<reg51.h>
      #include"absacc.h"
      bit flag;
      unsigned char a[8],counter;
      void t0_ser() interrupt1 using 1
      {
      TLO=0XB0;
      TH0=0X3C;
      countor++;
      if(countor==5)
      {
      countor=0;
      flag=1;
      }
      }
      void samp()
      {
      char n;
      int addr=0x7ff8,b;
      for(n=0;n<8;n++)
      {
      b=addr+n;
      XBYTE[b]=0; //启动A/D转换
      while(!INT0);
      while(INT0); //等待A/D转换
      a[n]=XBYTE[b];
      }
      }
      void main()
      {
      TMOD=0X01;
      TL0=0XB0;
      TH0=0X3C;
      ET0=1;
      EA=1;
      TR0=1;
      while(1)
      {
      if(flag)
      {
      flag=0;
      samp();
      }
      }


      IP属地:江苏3楼2013-12-12 22:55
      回复
        经过一晚上的努力,这两个while循环我已经明白了。不过XBYTE[]的用法还是不明白,甚至连它是什么都不知道。主要是书上什么解释都没有就直接用了。小错姐姐,你就解释一下这个吧!


        IP属地:江苏4楼2013-12-14 01:14
        回复
          请问小错同学,当51单片机同时外扩RAM和ROM时,用C语言编写访问外部RAM或外部ROM的程序,为什么数据不会送错地方?就是和单片机那三个引脚PSEN,WR,RD有关的,具体访问时在一个周期的时序是怎样的?


          IP属地:江苏7楼2013-12-16 12:10
          回复
            挺清楚的。我想再问下,当访问外部ROM(比如“读”)和外部RAM时,用C语言编程该怎么编?比如上面的XBYTE就是访问外部RAM的,能再多举几个例子吗?


            IP属地:江苏11楼2013-12-17 22:32
            回复