大家帮我看看这个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?
[解决办法]
示波器看一下发送的波形,关键看看波特率是否准确。其他就靠串口精灵来看了。