
单片机串口发送的数据一直是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);
} 展开
#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);
} 展开
2018-04-10 · 知道合伙人互联网行家
关注

展开全部
……
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),你所发送的,究竟是什么?
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),你所发送的,究竟是什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*串口初始化*/
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
……
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),你所发送的,究竟是什么?
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),你所发送的,究竟是什么?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询