欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

大家帮小弟我看看这个io口模拟串口程序有什么有关问题

更新时间: 2014-01-05 03:14:13 责任编辑: Author_N1

 

大家帮我看看这个IO口模拟串口程序有什么问题
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit txd=P1^0;
sbit rxd=P1^1;
uint input,flag;

void wait()   //数据传输等待
{
while(!flag);
flag=0;
}

void init() //初始化程序
{
flag=0;
TMOD=0X02;    //定时器0,工作方式2:8位自动重装
TH0=0xC0;   //256-96=0xa0;(波特率9600:1000000/9600/(12/11.0592)us)
TL0=0XC0;   
TR0=0;
TF0=0;
}

void rece()

uchar i=8;
TH0=0XA0;
TL0=0XA0;

TR0=1;   //开起定时器等待起始位
input=0;
wait();
while(i--)  //接收8位数据
{
input>>=1;   //将收到的数据往低位推
if(rxd==1)
input|=0x80;
else
input|=0x00;
wait();
}
while(!flag)   //检验停止位
{
if(rxd)
break;
}

TR0=0;
P0=input;
}
void send(char output)
{
uchar j=8;
TH0=0XA0;
TL0=0XA0;

txd=(bit)0;  //发送起始位
TR0=1;
wait();

while(j--)  //发送8未数据
{
txd=(bit)(output&0x01);
output>>=1;
wait();
}  //发送停止位
txd=(bit)1;
wait();
TR0=0;
}

void main()
{
init();
while(1)
{
if(rxd==0)
rece(); //电脑用串口调试发送数据,然后在p0口的led上显示
send(P0);  //将P0口数据反馈回电脑,并在串口调试上显示

}
}
void ser() interrupt 1
{
flag=1;
}



电脑上没有显示返回值,led也不变化,这是怎么回事

--参考方法--
没看到你在哪里开了中断,是不是中断没开,挂在while(!flag)那里了?
--参考方法--
TH0=0xC0;    //256-96=0xa0;(波特率9600:1000000/9600/(12/11.0592)us)
TL0=0XC0;    
你都写了0xA0,怎么赋值是0xC0?

--参考方法--
示波器看一下发送的波形,关键看看波特率是否准确。其他就靠串口精灵来看了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:13
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19868/
本文WWW.DOC100.NET DOC100.NET版权所有。