关于单片机向串口发送AD转换结果的程序

我写了一个51单片机的程序,想要把AD转换的结果发送给串口。可是试验了一下,单片机接收不到转换数据,用示波器测了一下,好像是AD转换芯片没有输出,不知道是不是我程序上的问... 我写了一个51单片机的程序,想要把AD转换的结果发送给串口。可是试验了一下,单片机接收不到转换数据,用示波器测了一下,好像是AD转换芯片没有输出,不知道是不是我程序上的问题,希望大神帮忙看看。我用的AD芯片是tm7707
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCLK=P1^0;
sbit DIO=P1^1;
sbit RESET=P1^2;
sbit CS=P1^3;
sbit DRDY=P1^4;
uchar *intp;
uchar idata date8[24];

void write_byte1(uchar date) //写一字节数据
{
uchar i;
CS=0; //CS拉低,
for(i=0;i<8;i++)
{
SCLK=0; //SCLK拉低准备写数据
_nop_();
if(date&0x80)
DIO=1;
else
DIO=0;
SCLK=1; //SCLK拉高,写入一位数据
date<<=1;
} CS=1; //写完一个字节后CS拉高。
}

uchar read_byte1 ( ) //读一字节数据
{
uchar j,b1;
CS=0;
for(j=0;j<8;j++)
{
SCLK=0;
b1=(b1<<1)|DIO;
SCLK=1;
} return b1;
}

void save_data(void)
{
uchar i0,i1;
intp=date8;

while(DRDY); //等待DRDT为低时,可读出数据
write_byte1(0x38); //向通信寄存器写入数据,选择通道1作为有效,将下一个操作设为读数据寄存器。
for(i1=0;i1<3;i1++) //连续存储一个数据。
{
*intp=read_byte1();
intp++;
}
CS=1;

}

void init( ) //初始化
{
RESET=1;
SCLK=1;
CS=1;
DRDY=1;
}

void System_Init()
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
TR1 = 1;
}
展开
 我来答
WXS732
推荐于2017-09-01 · 超过26用户采纳过TA的回答
知道答主
回答量:76
采纳率:100%
帮助的人:14.8万
展开全部
兄弟:不知道你玩不玩32 ,有个32 的在工程上用过,直接刷程序,串口连接电脑就可以输出AD 转换的结果。如果不玩32 的话。
首先第一步排查: 排查单片机能不能正确显示 你测试到的 AD 信号,显示正确不?
比如给他 3V 电压 ,用数码管显示出来。
第二: 串口发送,找个能正确发送数据的代码 ,直接把 ,你检查的数值给这个变量,让串口发送,
一步一步找问题,你绝对能解决的。我把AD0809 的代码给你用数码管测试

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code LEDData[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
sbit OE = P1^0;
sbit EOC = P1^1;
sbit ST = P1^2;
sbit CLK = P1^3;
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void Display_Result(uchar d)
{
P2 = 0xf7;
P0 = LEDData[d%10];
DelayMS(5);
P2 = 0xfb;
P0 = LEDData[d%100/10];
DelayMS(5);
P2 = 0xfd;
P0 = LEDData[d/100];
DelayMS(5);
}
void main()
{
TMOD = 0x02;
TH0 = 0x14;
TL0 = 0x00;
IE = 0x82;
TR0 = 1;
P1 = 0x3f;
while(1)
{
ST = 0;
ST = 1;
ST = 0;
while(EOC == 0);
OE = 1;
Display_Result(P3);
OE = 0;
}
}
void Timer0_INT() interrupt 1
{
CLK = !CLK;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式