您的位置首页百科知识

tm7705怎么实现单片机程序

tm7705怎么实现单片机程序

的有关信息介绍如下:

tm7705怎么实现单片机程序

利用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^1;unsignedintdata_out;unsignedcharrearrange(unsignedchara){unsignedchari,b;b=a&0x01;for(i=1;i>1;b=b+(a&0x01);}return(b);}/*******************************************************/voidDelayms(unsignedcharms)//relayms{unsignedchari;while(ms--){for(i=0;i<124;i++);}}/****************************************************************/voidWriteToReg_ADC(unsignedchara){SBUF=a;while(!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,low8;unsignedintout;while(AD7705_DRDY);SCON=0x10;while(!RI);high8=SBUF;RI=0;while(!RI);low8=SBUF;REN=0;out=rearrange(high8);out=out<<8;out=out+rearrange(low8);return(out);}main(){AD7705_Init();while(1){DIS=0;Delayms(80);DIS=1;Delayms(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接口。