当前位置: 代码迷 >> 单片机 >> 大家帮小弟我看看这个IO口模拟串口程序有什么有关问题
  详细解决方案

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

热度:66   发布时间:2016-04-28 15:10:10.0
大家帮我看看这个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?

------解决方案--------------------
示波器看一下发送的波形,关键看看波特率是否准确。其他就靠串口精灵来看了。
  相关解决方案