7275|18

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

利用单片机IO口模拟串口与另一个单片机通信 [复制链接]

用的是AT89S52由于只有一个串口不够用,要用IO口模拟一个串口另一个口作为与计算机通信用
用模拟的口与另一个单片机通信(也用IO)
发送数据的程序如下:
; **********************************
;********
INPUT: CLR C
MOV TXD,C
LCALL DEL833
MOV R3,#8
REP: RRC A
MOV TXD ,C
LCALL DEL833
DJNZ R3,REP
SETB C
MOV TXD,C
LCALL DEL833
RET
接收数据的程序如下:
;********?
OUTPUT: JB RXD, $
LCALL DEL833
MOV R3,#8
OUT: MOV C ,RXD
RRC A
LCALL DEL833
DJNZ R3,OUT
JNB RXD
RET
调试的时候数据能够正常的发送出去
但是好像老是检测不到起始位,无法正常接收
不知道问题在哪儿烦劳高手指教

最新回复

我用过,完全可以的,采用双线可以,三线,其中触发中断,也可以的,哈哈 波特率,可以用定时器中断即可  详情 回复 发表于 2011-8-13 16:12
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这种方法不好,串口是要硬件支持的,完全用软件,很难控制波特率。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
还真没有这样用过
如果真的有需求,为何不用2个串口的单片机
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
既然双向都用IO,就不必 完全使用串行协议了。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
我曾经写过一个模拟串口的,一个单片机只模拟一个串口。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
一个单片机模拟一个串口,另一个用串口接收是可以的,能够进入中断
要是另一个用IO口模拟的话,就是这个同步问题怎么解决
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 jennyvenus 的回复:
既然双向都用IO,就不必 完全使用串行协议了。

按照串行协议怎么实现啊,两个单片机通信怎么同步啊
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
模拟一个spi通讯,一个用sck,一个输入,一个输出。在sck的下降沿收发数据!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(中级)

9
 
引用 7 楼 galle 的回复:
模拟一个spi通讯,一个用sck,一个输入,一个输出。在sck的下降沿收发数据!

这个听我们同学说过的,两个MCU都用三根线么
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

10
 
起始位挂到中断上,用边缘触发
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
模拟串口要占用单片机的资源,能够实现的
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 
sck作同步!一个作输入,一个作输出,输入输出同时完成!
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

13
 
模拟串口这用法,基本上大家都用过,要么精确计算,要不直接拿示波器看。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

14
 
你的时间处理的不准确.

检测到下降沿后等待1.5位时间的接收BIT0,然后每隔1位时间接收一位的数据.
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

15
 
OUTPUT: JB RXD, $  
LCALL DELAY1250        ;; 此处延时1250微秒,不是833微秒
MOV R3,#8
OUT: MOV C ,RXD
RRC A
LCALL DEL833
DJNZ R3,OUT
JNB RXD  
RET
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 11 楼 galle 的回复:
sck作同步!一个作输入,一个作输出,输入输出同时完成!

怎么实现,有没有具体的代码拜读一下
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

17
 
为什么不是883微秒,不是要双方波特率都系统吗
引用 14 楼 great_bug 的回复:
OUTPUT: JB RXD, $  
LCALL DELAY1250 ;; 此处延时1250微秒,不是833微秒
MOV R3,#8
OUT: MOV C ,RXD
RRC A
LCALL DEL833
DJNZ R3,OUT
JNB RXD  
RET
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

18
 
打错了,应该是波特率要相同吧
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

19
 

我用过,完全可以的,采用双线可以,三线,其中触发中断,也可以的,哈哈

波特率,可以用定时器中断即可

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表