论坛风格切换切换到宽版
  • 4267阅读
  • 4回复

今天用ADC0809做了个AD转换不工作 [复制链接]

上一主题 下一主题
离线bg5baw
 
发帖
698
只看楼主 倒序阅读 0楼 发表于: 2006-03-22
下面是我的测试代码:单片机用89s52.ad芯片用adc0809(旧片),输出通过单片机p1口用8只发光管显示,输入端输入电压,数据输出端没有反应.不知何原因,请大家帮助分析.





#include <at89x52.h>


//adc0809,ad转测试程序.



unsigned char getdata;
int i;



void delay(i);//廷时程序





sbit st=p3^0;//位定义;

sbit oe=p3^2;//位定义;

sbit eoc=p3^1;//转换检测位定义;

sbit clk=p3^3;//时钟位定义;





void main(void)

{

st=0;

oe=0;//转换销存

et0=1;//开t0中断

et1=1;//开t1中断

ea=1;//开总中断

tmod=0x12;

th0=216;//t0初值

tl0=216;//t0初值

th1=0x3c;//t1初值

tl1=0xb1;//t1初值

tr1=1;//开始计数

tr0=0;//t0晳不计数

st=1;
delay(600);
st=0;//st 0--1--0初始

while(1)

  {

    if(eoc==1)//检测是否转换结束

    {

      oe=1;//如结束送出转换后的数

      getdata=p0;
      p1=getdata;//送数到p1口
            delay(600);
      oe=0;//ad重心开始,第二次循环

     
      delay(600);
     

     

      st=1;
            delay(600);

      st=0;

    }

  }

}



void t0(void) interrupt 1 using 0

{
//空


}



void t1(void) interrupt 3 using 0

{
clk=~clk;//中断方式产生给ad0809芯片用的时钟
th1=0x3c;//初值重装

tl1=0xb1;




}

void delay(int i)//延时
{

while(i!=0)
  i--;

}
离线bg5baw
发帖
698
只看该作者 1楼 发表于: 2006-03-22
问题已经解决,原因是ad的时钟太慢;
离线Sullivan
发帖
4817
只看该作者 2楼 发表于: 2006-03-25
写写你的调试经历,不要解决了问题就留个空帖子在这里。。。。
离线BG6AGB
发帖
915
只看该作者 3楼 发表于: 2006-03-26
只看到时钟不能高于1.2m,倒没见到不能低于多少的说明。
离线bg5baw
发帖
698
只看该作者 4楼 发表于: 2006-03-26
'
只看到时钟不能高于1.2m,倒没见到不能低于多少的说明。
'

我也认为时钟低些稳定性还会好一些,所以就没有往这方面考虑,结果是走了不少的弯路,一直认为不工作的原因是时序搞错了,程序改了一遍又一遍,就是出不了数据,后来还认为可能是旧片原因,或是本来就是坏的,就去买个新片,但这片子新的问了多家,还真是不容量买到,就空手而回,回家后还是心不甘.抱着不到黄河心不死的精神,又开始用外时钟试试,又用单片自身的定时中断试试,无意中修改了th1.tl1,就正常了.原来是时钟关系.