我的程序功能是输入模拟信号经ad1674转换成数字信号;89s52通过锁存器与ad1674连接,读取数字信号,在通过串行口输出到计算机。程序如下:
#include <absacc.h>
#include <reg52.h>
#define uint unsigned int
#define ADCOM4 XBYTE[0XBFFC]
#define ADL4 XBYTE[0XBFFF]
#define ADH4 XBYTE[0XBFFE]
sbit adbusy4=P3^3;
sbit r=P3^7;
uint result3,result4,ad;
int i;
char ad1;
uint read4(void) /*读取U4即AD1674的转换值*/
{
ADCOM4=0;
while(adbusy4==1);
return((uint)(ADH4<<4)+(ADL4&0X0F));
}
void adtxd(tx_data) /*串行口输出程序*/
{
ad=tx_data;
SCON= 0x40; /*串口方式1*/
PCON=0; /*SMOD=0*/
/*REN=1; /*允许接收*/
TMOD=0X20;
TH1=0XE6;
TL1=0XE6;
TR1=1; /*高八位*/
ad1=ad/256;
SBUF=ad1;
while(!TI);TI=0;
SBUF=ad%256; /*低八位*/
while(!TI);TI=0; /*等待发送完毕 */
}
void timer0(void)interrupt 1 using 1
{
i++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(i==1)
{
result3=read3();
adtxd(result3);
}
}
main()
{
i=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
do{}while(1);
}
当我给他输入500mv的模拟信号,通过串行口助手输出数字信号,发现输出的是0f ef 0f ef,很明显转换出问题了。可是不知道到底是什么原因呢,我个人觉得程序没有错误啊。另外我发现电路板上ad1674很热,其他芯片都没啥感觉的。ad转换结束的信号sts好像一直没出来,不知道什么原因。 |