我是将adc0816采集的数据,经过8251扩展的串口传送到电脑显示出来,(其中8251的程序绝对正确)但是16通道采集的结果竟然一样 以下是我的程序,在程序中我采集了16个通道的数据,现在我传送进电脑的是0通道. #define _TEST_C_ #include "reg52.h" #include "stdlib.h" #include "absacc.h" #include "intrins.h" #include "test.h" #include "math.h" #define uchar unsigned char #define uint unsigned int #define COM8251 XBYTE[0x8601] #define DAT8251 XBYTE[0x8600]
#define IN0 XBYTE[0x8000] uchar data data_temp[6]={0x52,0x53,0x54,0x55,0x00,0x58}; uchar temp[6]={52,0x53,0x54,0x55,0x00,0x58}; uchar k; uchar data a; static uchar idata ad[16];
void initmcu(void); void wait(uchar p,q); void init8251();
void ad0816(uchar idata *x);
void Trans8251(void) interrupt 1 using 1 { TH0 = 0XFF; TL0 = 0XFF; ad0816(ad);//在8251中断中采集16通道数据 for(a=0x5A;a>0x30;a--) { while((COM8251&0x01)==0); { DAT8251=ad[0];//把0通道值传入电脑中 } } for(k=0;k<6;k { while((COM8251&0x02)==0); { temp[k]=DAT8251 } } } void main(void) { EA = 0; initmcu(); EA = 1; init8251(); //ad0816(ad); }
void init8251() { //wait(11,82);//8251工作速度慢,每送一个控制字,等待一会儿延时2ms COM8251 = 0x00; DAT8251 = 0x00; DAT8251 = 0x00; COM8251 = 0x40;//以上为8251复位部分 wait(11,82); COM8251 = 0x4e;//9600baud,1停止位,无校验,8位数据,X16 wait(11,82); COM8251 = 0x35; wait(11,82); }
void initmcu(void) { TMOD = 0x06; //9600波特11.0592MHz,方式2 TL0 = 0XFF; TH0 = 0XFF; IP = 0x02; ET0 = 1;TR0 = 1; }
void ad0816(uchar idata *x) { uchar i; uchar xdata *ad_adr; ad_adr=&IN0; for(i=0;i<16;i++) { *ad_adr=0; //启动转换从0通道开始 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); x=*ad_adr; ad_adr++; } }
void wait(uchar p,q) { uchar i,j; //(2*j+3)*i+4 for (i=p;i>0;i--) for (j=q;j>0;j--); } |