Cómo implementar el programa de microcontrolador para tm7705
Utilice ADD7705 para muestrear datos y comunicarse con 51 microcontroladores. La conexión de hardware es: P3.1 proporciona pulsos de datos y está conectado al pin SCLK de P3.0, está conectado a DOUT y DIN. a una resistencia pull-up, usando el modo 1 del puerto serie 51 para funcionar, el programa es el siguiente: #include#includesbitAD7705_DATA=P3^0;//AD7705input&outputdatasbitAD7705_CLK=P3^1;//AD7705CLKsbitAD7705_DRDY=P2^7;//. AD7705datareadysbitDIS=P4^1;unsignedintdata_out;unsignedcharre organizar(unsignedchara) {unsignedchari,b;b=a&0x01;for(i=1;i>1;b=b+(a&0x01);}return(b);}/*** ************* ************************************* **/voidDelayms(unsignedcharms)//relays{unsignedchari; while(ms--){for(i=0;i<124;i++);}}/************** **************** ********************************** ***/voidWriteToReg_ADC(unsignedchara){SBUF=a; while(! TI);TI=0;}/*************************** ***************** *************************/voidAD7705_Init(){WriteToReg_ADC(0x04) ;//escribir 0x20 al registro de comunicación para elegir el canal 0//y registrar el reloj para el siguiente tono para escribir WriteToReg_ADC(0x20);//0x04 a CLR, 2,4576 MHz, 50 Hz.WriteToReg_ADC (0x08);//escribir 0x10 al registro de comunicación para elegir el canal 0//y configurar el registro para el siguiente tono para escribir WriteToReg_ADC (0 x62);//0x44, 1, bufferoff, FSYNC=0 y auto- calibración}/********************* **************************** **************/unsignedintReadWord(){unsignedcharhigh8,low8 ;unsignedintout;mientras(AD7705_DRDY);SCON=0x10;mientras(!RI);alto8=SBUF;RI=0;mientras( !RI);low8=SBUF;REN=0;out=rearrange(high8);out=out <<8;out=out+rearrange(low8);return(out);}main(){AD7705_Init();mientras (1){DIS=0;Delayms(80);DIS=1;Delayms(80); WriteToReg_ADC(0x1c);data_out=ReadWord();}}El problema es que AD7705 no parece estar funcionando y el pin DRDY siempre está presente
Alto nivel, espero que los expertos puedan darme algún consejo. ¡Gracias de antemano! Complemento a la pregunta: El modo de puerto serie usa el modo 0. Lo escribí mal. Este programa fue el primero. Ahora se ha cambiado para usar puertos de E/S para controlar el pin de reinicio y el pin de selección de chip del AD7705. reloj analógico, pero el resultado sigue siendo el mismo, de esa manera, DRDY no tiene un nivel bajo y el AD7705 no parece funcionar: lo ayudaré a responder el informe 2008-11-1419:171.51. El modo de puerto serie 1 tiene un bit de parada. Cada vez que se envía un byte, se generarán al menos nueve pulsos de reloj. El AD7705 solo necesita ocho pulsos de reloj por cada byte enviado o recibido (uno más causará caos. Múltiples pulsos destruirán la sincronización de comunicación. Se debe usar el modo 0 del puerto serie). 2. Se recomienda encarecidamente utilizar una línea de puerto de E/S para controlar el pin RESET del AD7705. Siempre que la comunicación no se pueda sincronizar, el envío de un pulso de reinicio puede lograr una comunicación síncrona. 3.P3.0 está conectado a DOUT y DIN. Si todo es normal, este diseño es bueno, sin embargo, una vez que la comunicación no se sincroniza, el microcontrolador AD7705 y 51 enviarán datos a la línea de datos al mismo tiempo, lo que provocará conflictos. Puede causar daños al chip. Se recomienda que DOUT y DIN se enrutan por separado (aunque hay muchos cables para hacer el programa de prueba AD7705, y el AVR tiene una interfaz SPI directa).