阅读:3849回复:3
用过TLC0832的大侠请帮我看看这是怎么回事?
我做了一个TLC0832进行AD转换的程序,可是不知道为什么,0通道的数据老是不对,我下面的程序运行时结果总是0FFH.如果在主程序里只进行通道1 的转换,结果是正确的,加上通道0后就不行了,只用通道0 也是不对,有做过的高手请点小弟,多谢!
#include <absacc.h> #include <reg52.h> #include <intrins.h> #define uchar unsigned char sbit ADCS = 0x90^0 ; //L1 lighter sbit ADCLK = 0x90^1 ; sbit ADSO = 0x90^2 ; sbit ADSI = 0x90^3 ; // ********************************************** void delayus(uchar us) { uchar i; for( ; us; us--) { for( i = 10; i; i-- ) ; } return; } // ********************************************** uchar readAD( uchar channel ) { uchar i,ch1,ch2; convert: delayus( 100 ); ADSI = 1; ADSO = 1; ADCLK = 1; ADCS = 0; _nop_(); ADCS = 1; ADCLK = 0; ADCS = 0; //start AD _nop_(); ADSI = 1; //start bit _nop_(); ADCLK = 1; //1 0->1 _nop_(); ADCLK = 0; ADSI = 1; //SGL=1 (单极性对地) _nop_(); ADCLK= 1; _nop_(); ADCLK = 0; if( channel & 0x01 ) ADSI = 1; else ADSI = 0; //通道选择 _nop_(); ADCLK= 1; _nop_(); ADCLK = 0; _nop_(); ADCLK = 1; _nop_(); ADCLK = 0; for( i=8; i; i-- ) // d7 d6 ... d0 { _nop_(); ch1 = ch1 << 1; if( ADSO ) ch1++; ADCLK = 1; _nop_(); ADCLK =0; } ch2 = 0x0; if( ch1 & 0x01 ) ch2 = 0x80; for( i=7; i; i-- ) // d0 d1 ... d7 { ch2 = ch2 >> 1; if( ADSO ) ch2 = ch2 | 0x80; ADCLK = 1; _nop_(); ADCLK = 0; } _nop_(); ADCLK = 1; _nop_(); ADCLK = 0; _nop_(); ADCLK = 1; _nop_(); ADCLK = 0; _nop_(); ADCLK = 1; _nop_(); ADCLK = 0; _nop_(); ADCS = 1; if( ch1 == ch2 ) return ch1; else goto convert; } // ********************************************** main() { uchar ch[10],i; while(1) { i=0; ch[i++] = readAD( 0x00 ); //此处用0X00和0X01进行0和1两个通道交替转换,结果除第一次外全是 //0FFH,如果全用0X00只用0通道也是一样,只有只用通道1才是正确的 ch[i++] = readAD( 0x01 ); ch[i++] = readAD( 0x00 ); ch[i++] = readAD( 0x01 ); ch[i++] = readAD( 0x00 ); ch[i++] = readAD( 0x01 ); ch[i++] = readAD( 0x00 ); ch[i++] = readAD( 0x01 ); ch[i++] = readAD( 0x00 ); ch[i++] = readAD( 0x01 ); } } |
|
最新喜欢:drizzl... |
沙发#
发布于:2004-08-10 07:58
检查一下电路,也许是通道0的输入有问题?或者换一个A/D试试看,程序应该没什么问题的。
|
|
板凳#
发布于:2005-07-29 01:09
_nop_(); 这句全部都是没用的,delayus( 100 ); 也没用。
|
|
地板#
发布于:2005-07-29 16:09
下面是引用raymanii于2005-07-29 01:09发表的: 这是用来延时的,怎么会没用??? |
|