完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题说明:
在我们使用51单片机时会发现他就只有一个RX跟TX,但是要实现一个完整的数据采集、上传与管理,一个串口是完全不够的(采集装置一般需要一对串口,而通讯装置也需要一对串口)那么问题就产生了,51单片机只提供一个串口,我们应该怎么办?
#define uchar unsigned char #define RXD P1_0 //接收脚 #define TXD P1_1 //发送脚 #define WRDYN 44 //写延时 #define RDDYN 43 //读延时 //延时程序* void Delay2cp(unsigned char i) { while(--i); //i=1,两个指令周期。 } //往串口发送一个字节 void WByte(uchar input) { uchar i=8; TXD=(bit)0; //发送启始位 Delay2cp(39); //发送8位数据位 while(i--) { TXD=(bit)(input&0x01); //先传低位 Delay2cp(36); input=input>>1; } //发送校验位(无) TXD=(bit)1; //发送结束位 Delay2cp(46); } //从串口接收一个字节 uchar RByte(void) { uchar Output=0; uchar i=8; uchar temp=RDDYN; //接收8位数据位 Delay2cp(RDDYN*1.5); //此处注意,等过起始位 while(i--) { Output >>=1; if(RXD) Output |=0x80; //先收低位 Delay2cp(35); //(96-26)/2,循环共占用26个指令周期 } while(--temp) //在指定的时间内搜寻结束位。 { Delay2cp(1); if(RXD)break; //收到结束位便退出 } return Output; } 方法二: 计数法 该方法通过单片机的时钟计数来产生准确的波特率来实现串口模拟。该方法较为准确,只要波特率正确就可以实现通讯。(只有发送部分) void S2INI(void) { TMOD |=0x02; //计数器0,方式2 TH0=0xA0; //预值为256-96=140,十六进制A0 TL0=TH0; TR0=1; //开始计数 TF0=0; }//计数器初始化 void WaitTF0( void ) { while(!TF0); TF0=0; }//查询计数器溢出标志位 //向串口发送一个字节数据,过程同上 void WByte(uchar input) { uchar i=8; TR0=1; TXD=(bit)0; WaitTF0(); while(i--) { TXD=(bit)(input&0x01); WaitTF0(); input=input>>1; } TXD=(bit)1; WaitTF0(); TR0=0; } 方法三:中断法 与计数法大同小异,就不解释了。(只有接收) #define TM0_FLAG P1_2 //设传输标志位 //计数器及中断初始化 void S2INI(void) { TMOD |=0x02; //计数器0,方式2 TH0=0xA0; //预值为256-96=140,十六进制A0 TL0=TH0; TR0=0; //在发送或接收才开始使用 TF0=0; ET0=1; //允许定时器0中断 EA=1; //中断允许总开关 } //接收一个字符 uchar RByte() { uchar Output=0; uchar i=8; TR0=1; //启动Timer0 TL0=TH0; WaitTF0(); //等过起始位 //接收8位数据位 while(i--) { Output >>=1; if(RXD) Output |=0x80; //先收低位 WaitTF0(); //位间延时 } while(!TM0_FLAG) if(RXD) break; TR0=0; //停止Timer0 return Output; } //中断1处理程序 void IntTimer0() interrupt 1 { TM0_FLAG=1; //设置标志位。 } //查询传输标志位 void WaitTF0( void ) { while(!TM0_FLAG) ; TM0_FLAG=0; //清标志位 } |
|
|
|
只有小组成员才能发言,加入小组>>
2555 浏览 0 评论
1155浏览 2评论
758浏览 1评论
509浏览 0评论
270浏览 0评论
443浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 12:42 , Processed in 1.390521 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号