|
最近做一个AD转化并且串行传输到PC的设备
使用C51编写了下边的程序
不知道为什么,显示出来的是不正常的结果。
#include
#include
unsigned char xdata *ADC; //定义ADC0809端口指针
unsigned char data *ADCdata; //定义ADC0809数据缓冲器指针
unsigned char i; //定义8路通道
unsigned char tmp;
void main(void)
{
unsigned int a; //等待时间变量
/* 进行AD转换 */
ADC=0x7fff; //定义ADC0809
ADCdata=0x70; //定义数据缓冲器地址
for(i=0;i<8;i++)
{
*ADC=i; //启动ADC0809
for(a=0; a<50000; a++); //延时一段时间
tmp=*ADC; //读取A/D转换结果
*ADCdata=tmp; //结果值存储到数据缓冲器
ADCdata++; //数据缓冲器指针地址加1
for(a=0; a<50000; a++); //延时一段时间
}
/* 进行串口传输 */
SCON=0x50; //串口方式1,允许接受
TMOD=0x20; //定时器1定时方式2
TCON=0x40;//设定时器1开始计数
TH1=0xE6;//12MHZ1200波特率
TL1=0xE6;
TI=1;
TR1=1;//启动定时器
ADCdata=0x70; //定义数据缓冲器地址
while(1)
{
for(a=0; a<50000; a++); //延时一段时间
for(a=0; a<50000; a++); //延时一段时间
printf("各个通道数据如下所示:\n");
for(i=0;i<8;i++)
{
printf("%d\n",*(ADCdata+i));
}
//显示通道的数据
}
}
|
|