单片机串口发送的数据一直是00;求解

#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitCs0832=P1^0;sbitDi... #include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit Cs0832=P1^0;
sbit Di0832=P1^2;
sbit Do0832=P1^2;
sbit Clk0832=P1^1;
uchar read0832(uchar channel);
void delayms(int z);
uchar data2;
/*延时*/
void delayms(int z)
{
int x,y;
for (x=z;x>0;x--)
for(y=110;y>0;y--);

}

/*AD读取数据*/
uchar read0832(uchar channel)//读取数据
{
uchar i,data1,data2;
//开始信号
Cs0832=0;
Clk0832=0;
Di0832=1;
Clk0832=1;

//选择工作方式和通道
Clk0832=0;
Di0832=1; //单通道选择
Clk0832=1;
Clk0832=0;
Di0832=channel; //选择通道channel
Clk0832=1;

//释放总线读取数据
Clk0832=0;
Di0832=1;
for(i=0;i<8;i++)
{
Clk0832=1;
Clk0832=0;
if(Do0832)
{
data1|=0x80>>i;
}
}
for(i=0;i<8;i++)
{
if(Do0832)
{
data2|=0x01<<i;
}
Clk0832=1;
Clk0832=0;
}

//读取结束
Cs0832=1;
Clk0832=1;
Di0832=1;

if(data1==data2)
return(data2) ;
}

/*定时初始化*/
void time0()
{
TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1)
TH0=(65536-50000)/256; //50ms
TL0=(65536-50000)%256;
EA=1;
ES=1;
ET0=1;
TR0=1;
}

/*串口初始化*/
void UART_int()
{
TMOD|=0x20;
SCON=0x50;
TH0=0xfd; //波特率9600
TL0=0xfd;
TR1=1;
ES=0;
}

/*定时中断*/
void T0_time()interrupt 1
{
if(TI!=0)
{
TI=0;
delayms(50);
}

TH0=(65536-500000)/256; //重新装载初值
TL0=(65536-500000)%256;

SBUF=read0832(0);
}

void main()

{
time0();
UART_int();
while(1);
}
展开
 我来答
DoramiHe
2018-04-10 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25336 获赞数:59552
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
……
TMOD|=0x20;
SCON=0x50;
TH0=0xfd; //波特率9600--应该是TH1
TL0=0xfd; --------应该是TL1
TR1=1;
ES=0;

---------
另外:
SBUF=read0832(0);--数据来自read0832()

而:
……
//读取结束
……
if(data1==data2) //相等时
return(data2) ;//才返回值
}
那么,不相等时,函数返回的,是什么?
SBUF=read0832(0),你所发送的,究竟是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lycdl
高粉答主

2018-04-10 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:5396万
展开全部
/*串口初始化*/
void UART_int()
{
TMOD|=0x20;
SCON=0x50;
TH1=0xfd; //这是TH1,你写成TH0啦
TL1=0xfd;//这是TL1
TR1=1;
ES=0;
}
/*定时中断*/这个中断程序顺序不对
void T0_time()interrupt 1
{
TH0=(65536-500000)/256; //放在第一条
TL0=(65536-500000)%256;

// if(TI!=0)这都删掉,定时器中断怎么能判断TI呢?
//{
//TI=0;
//delayms(50);
//}

SBUF=read0832(0);
while(TI!=0);//用查询法发送
TI=0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2015-09-23 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.1万
采纳率:83%
帮助的人:8514万
展开全部
……
TMOD|=0x20;
SCON=0x50;
TH0=0xfd; //波特率9600--应该是TH1
TL0=0xfd; --------应该是TL1
TR1=1;
ES=0;

---------
另外:
SBUF=read0832(0);--数据来自read0832()

而:
……
//读取结束
……
if(data1==data2) //相等时
return(data2) ;//才返回值
}
那么,不相等时,函数返回的,是什么?
SBUF=read0832(0),你所发送的,究竟是什么?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式