首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-12-13 
大家帮我看看这个IO口模拟串口程序有什么问题#includereg52.h#define uint unsigned int#define uchar u

大家帮我看看这个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也不变化,这是怎么回事
大家帮小弟我看看这个IO口模拟串口程序有什么有关问题
[解决办法]
没看到你在哪里开了中断,是不是中断没开,挂在while(!flag)那里了?
[解决办法]
TH0=0xC0;   //256-96=0xa0;(波特率9600:1000000/9600/(12/11.0592)us)
TL0=0XC0;   
你都写了0xA0,怎么赋值是0xC0?

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

热点排行