爱玲
获得 0 次赞
帮助过0人
如上图,单片机与AD1674的连接。。AD1674的CE操作使能端,连接74LS00的6引脚,通过WR/RD控制。AD1674的片选CS通过译码器与单片机高地址连接。A0/A7连接单片机低地址的D0/D1。。。下面是我写的程序,有详细注释,请问哪里有问题,怎么采集的数据都是0000呢。 sbit ad_1674_status=P3^3; #define ad_1674_start XBYTE[0x2000]//开始工作,通过单片机总线法编写 #define ad_1674_readhbyte XBYTE[0x2001]//读取高八位 #define ad_1674_readlbyte XBYTE[0x2003]//读取低四位 uchar hbyte,lbyte; void adc_convert(void)//开始转换 { ad_1674_start=0xff;//开始转换 while(ad_1674_status==1);//等待转化完成 hbyte=ad_1674_readhbyte;//读 lbyte=ad_1674_readlbyte;//读 delay(111); } void main(void) { uint MSB,LSB,adc_res; uint ad_weight; uint w1,w2,w3,w4; while(1) { adc_convert(); MSB=(unsigned int)(hbyte4);//低四位右移四位(读取的是八位的高四位数据,低四位为0000,)移动构成12位 adc_res=MSB+LSB;//构成12位数据 ad_weight=(adc_res/4096)*10000 ;//获得AD值2^12=4096.。。AD1674输入采用0-10v,扩大1000倍,方便得到数据 w1=ad_weight/1000;// w2=ad_weight%1000/100;// w3=ad_weight%1000%100/10;// w4=ad_weight%1000%100%10;// }
问题是这样的,单片机的P2口P2.5/P2.6/P2.7连接了74LS138译码器,译码器y7和单片机P3.6WR引脚通过或非门74LS02,输出DIS_CLK。这个DIS_CLK作为74LS164串入并出的时钟线,74LS164的数据输入端1和2连接单片机的P0.0。。。74LS164驱动一个数码管(共阳数码管)。。。我需要通过单片机总线和WR自动产生时序的方法通知数码管。如何编程,请大神指点。 sbit dat=P0^0; #define dis_play_addrece 0xe000//通过译码器得到的y7地址 unsigned char xdata *reg_add;//定义一个指针,得到地址以及给地址写数据 void out_simuseri(uchar data_buf)// { uchar i,s;// reg_add=dis_clk_addrece;//把地址给指针,选通y7,置y7为0. s=data_buf;//传送过来,需要在数码管上显示的数字 for(i=0;i>1; } }//这样DIS_CLK就可以从低到高变化,164就能移动数据了??? 请大神帮忙分析下,程序是有错的。。。