利用ADD7705采样数据,与51
单片机通讯,硬件连接是:P3.1提供数据
脉冲,与AD7705的SCLK管脚连接,P3.0与DOUT,DIN相连,并接上拉电阻,利用51
串口方式1工作,程序如下:#include#includesbitAD7705_DATA=P3^0//AD7705input&outputdatasbitAD7705_CLK=P3^1//AD7705CLKsbitAD7705_DRDY=P2^7//AD7705datareadysbitDIS=P4^1unsignedintdata_outunsignedcharrearrange(unsignedchara){unsignedchari,bb=a&0x01for(i=1i>1b=b+(a&0x01)}return(b)}/*******************************************************/voidDelayms(unsignedcharms)//relayms{unsignedchariwhile(ms--){for(i=0i<124i++)}}/****************************************************************/voidWriteToReg_ADC(unsignedchara){SBUF=awhile(!TI)TI=0}/*************************************************************/voidAD7705_Init(){WriteToReg_ADC(0x04)//write0x20tocommunicationregistertochoosechannel0//andclockregisterforthenextonetowriteWriteToReg_ADC(0x20)//0x04toCLR,2.4576MHz,50Hz.WriteToReg_ADC(0x08)//write0x10tocommunicationregistertochoosechannel0//andsetupregisterforthenextonetowriteWriteToReg_ADC(0x62)//0x44,1,bufferoff,FSYNC=0,andself-calibration}/*************************************************************/unsignedintReadWord(){unsignedcharhigh8,low8unsignedintoutwhile(AD7705_DRDY)SCON=0x10while(!RI)high8=SBUFRI=0while(!RI)low8=SBUFREN=0out=rearrange(high8)out=out<<8out=out+rearrange(low8)return(out)}main(){AD7705_Init()while(1){DIS=0Delayms(80)DIS=1Delayms(80)WriteToReg_ADC(0x1c)data_out=ReadWord()}}问题是,AD7705好象没有工作,管脚DRDY一直处于高电平,希望高手指点先谢谢了!问题补充:串口方式是采用方式0,是我打错了,这个程序是最先的现在改为AD7705的复位引脚和片选引脚都用I/O口控制,采用模拟时钟,不过结果还是那样,DRDY没有低电平,AD7705似乎没有工作:我来帮他解答满意回答检举|2008-11-1419:171.51串口方式1有停止位,每次发送一个字节,将产生至少九个时钟脉冲。而AD7705每发送或接收一个字节只需要八个时钟脉冲(多一个就乱了),多发的脉冲将破坏通信的同步,应该用串口方式0吧。2.强烈建议用一个I/O口线去控制AD7705的RESET脚,每当通信没能同步时,发一个复位脉冲即可实现同步通信。3.P3.0与DOUT,DIN相连”,如果一切正常的话,这样设计挺好的;但是,一旦通信没能同步,出现AD7705与51单片机同时往数据线上发数据,引起冲突。可能会损害芯片。建议DOUT、DIN分开走线(尽管线多了点)。我是用AVR单片机做的AD7705测试程序,AVR直接有SPI接口。参考:仇国庆.AD7705/7706在仪器仪表中的应用[J].自动化与仪器仪表.2001.(6)
里面有很详细的讲解AD7705与AT89C51的接口电路以及接口程序。用protel画的图贴不上来
评论列表(0条)