今天用Proteus仿真的ADC0809。。。但实际0809不工作啊。。。。
[复制链接]
单片机的对应ST脚的P口接上0809时就被拉低了。Proteus仿真什么问题都没有。0809要注意什么问题么? 有两个问题:1,我希望设定的是500K,用定时器方式2也是设成255。可从P口出来的就是50K 啊。 2,ST脚被拉低,但不接0809时单片机P口是正常的。 之前ST,OE,EOC,CLK都用的是P1口,然后P3口读数据,P0口接上拉电阻后接的LED。。。。
现在AD出来的没变化。P0口是FF。 下边是程序。请高手帮忙分析一下啊。 #include"reg52.h" #define uchar unsigned char sbit ST=P1^2; sbit EOC=P1^1; sbit OE=P1^0; sbit CLK=P1^3; sbit C3=P1^4; sbit C2=P1^5; sbit C1=P1^6; uchar AD_DATA; //保存经AD转换后的数据 /**********延时函数************/ void delay(uchar i) { uchar j; while(i--) { for(j=125;j>0;j--) ; } } /*********系统初始化***********/ void init() { EA = 1; //开总中断 TMOD = 0x02; //设定定时器T0工作方式 TH0=255; //利用T0中断产生CLK信号 TL0=255; TR0=1; //启动定时器T0 ET0=1; ST=0; OE=0; } /***********T0中断服务程序************/ void t0(void) interrupt 1 using 0 { CLK=~CLK; } /***********AD转换函数**********/ void AD() { ST=0; C3=1; C2=1; C1=0; //选择通道IN0 delay(10); ST=1; //启动AD转换 delay(10); ST=0; while(0==EOC) ; OE=1; AD_DATA=P2; OE=0; P0=AD_DATA; } /*****************主函数**************/ void main() { init(); while(1) { AD(); } }
[ 本帖最后由 pippin 于 2010-9-4 16:33 编辑 ]
|