#include "reg51.h" #include "intrins.h" #include "string.h" void Reset7705(void); void ad7705Init(); void Write(unsigned char dat); unsigned read7705(); sbit cs=P3^1; sbit reset=P3^2; sbit drdy=P3^3; sbit sclk=P3^4; sbit din=P3^6; sbit dout=P3^5; void Reset7705(void) { int tim,j; cs=0; tim=1000; reset=0; while(tim--); reset=1; sclk=1; for(j=0;j<1;j++) //*多于连续32个 din=1 使串口复位 { sclk=0; _nop_(); _nop_(); din =1; sclk=1; } //drdy=0; } //写入寄存器8位数据 void Write(unsigned char dat) {
unsigned i; for(i=0;i<8;i++) { sclk=0; _nop_(); _nop_(); if(dat&0x80) din=1; else din=0; sclk=1; dat=dat<<1; } }
void ad7705Init() { Write(0x20); Write(0x04); Write(0x10); Write(0x40); } unsigned read7705() { unsigned result=0; unsigned i,dout; while(drdy); Write(0x38); sclk=1; for(i=0;i<16;i++) { result<<=1; sclk=1; _nop_(); _nop_(); result+=(0x01&dout); sclk=0; _nop_(); _nop_(); } return result; } void main() { Reset7705(); ad7705Init(); read7705();//加while(1)似乎不对 }
/**************************************** 大家帮我看看这段程序,din 和dout都可以用示波器看到 din看起来还像数据,dout就是等间距的脉冲, 这肯定不转换后的输出量啊,哪里出了问题呢? ****************************************/
|