如题所述
第1个回答 2011-12-19
给你发一个 我做得模拟串口发送程序吧,模拟成功。希望对你能有帮助。
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit Rxd=P1^0;
sbit Txd=P1^1;
uchar b[10]="fengfeng";
void delay(uint z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD=0x02;
P1=0xff;
TL0=0xa0; //波特率 9600
TH0=0xa0;
TR0=0;
TF0=0;
}
void send(uchar aa)
{
uint i=8;
TL0=0xa0; //波特率 9600
TH0=0xa0;
TR0=1;
Txd=(bit)1;
while(!TF0);
TF0=0;
Txd=(bit)0; //起始位
while(!TF0);
TF0=0;
while(i--)
{
Txd=(bit)(aa&0x01);
while(!TF0);
TF0=0;
aa=aa>>1;
}
Txd=(bit)1;
while(!TF0);
TF0=0;
Txd=(bit)1;
while(!TF0);
TF0=0;
TR1=0;
}
void Putstring(uchar *buf)
{
while(*buf!='\0')
{
send(*buf);
buf++;
delay(200);
}
}
void main()
{
init();
while(1)
{
// Putstring("I Love You!");
// delay(200);
send(0x11);
delay(1000);
send(0x12);
delay(1000);
send(0x13);
delay(1000);
send(0x14);
delay(1000);
}
}
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit Rxd=P1^0;
sbit Txd=P1^1;
uchar b[10]="fengfeng";
void delay(uint z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD=0x02;
P1=0xff;
TL0=0xa0; //波特率 9600
TH0=0xa0;
TR0=0;
TF0=0;
}
void send(uchar aa)
{
uint i=8;
TL0=0xa0; //波特率 9600
TH0=0xa0;
TR0=1;
Txd=(bit)1;
while(!TF0);
TF0=0;
Txd=(bit)0; //起始位
while(!TF0);
TF0=0;
while(i--)
{
Txd=(bit)(aa&0x01);
while(!TF0);
TF0=0;
aa=aa>>1;
}
Txd=(bit)1;
while(!TF0);
TF0=0;
Txd=(bit)1;
while(!TF0);
TF0=0;
TR1=0;
}
void Putstring(uchar *buf)
{
while(*buf!='\0')
{
send(*buf);
buf++;
delay(200);
}
}
void main()
{
init();
while(1)
{
// Putstring("I Love You!");
// delay(200);
send(0x11);
delay(1000);
send(0x12);
delay(1000);
send(0x13);
delay(1000);
send(0x14);
delay(1000);
}
}
第2个回答 2011-12-15
用一个普通IO口作为TXD发送口,外部中断口作为RXD接收口,就可以模拟串口通讯了。本回答被提问者采纳
第3个回答 2011-12-15
两个渠道:1选用双串口单片机;2用51单片机的任意两个串口模拟,网上有程序可以参考。
第4个回答 2013-11-29
模拟,太费事了。
扩充,就行了。
参考:
扩充,就行了。
参考:
第5个回答 2011-12-15
这个有点难,没有那么干的一半,尤其是51,就算IO模拟成功了,速度也会很慢,没有意义,个人感觉。