中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

单片机论坛

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 单片机论坛 → 浏览主题: 还是关于单片机通讯的问题如何设定停止位?
发表新帖 回复该主题
回帖:18个,阅读:1961 [上一页] [1] [2] [下一页]
* 帖子主题:

还是关于单片机通讯的问题如何设定停止位?

分享到
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/12/27 15:39:29
#0楼
现在想用单片机与一个仪器通讯

这个仪器有这个的协议:

9600, n, 8, 2
由单片机发送的数如下:  129,129,82,0,0,0,83,0

我在串口调试工具中同样发这串数据,就不会有应答,而将停止位设为2后通讯正常

现在请教的就是,单片机上如何设定才会达到停止位的要求?

谢谢
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/12/27 16:20:13
#1楼
我用的单片机是stc12c5a60s2

的串口2来处理的这个发送的

是否在设置是要用9位发送?
1022
shimaoruming
文章数:241
年度积分:50
历史总积分:1022
注册时间:2011/10/20
发站内信
发表于:2011/12/27 16:21:07
#2楼
路过
品牌电机专售,型号齐全,价格优惠!
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/12/27 19:15:17
#3楼
用PC机做上位机很容易设置停止位,也得到了正确的结果,仪器也有了正确有数据回传

同样如果用PC机来监测单片机发送的信号,也可以证实单片机发出的数据正确

有人告诉我在每发一个数据后等一个bit的时间约0.1ms但实际上我是等了250*250=62500US再发下一个数据

可结果还是没有见到数据回传!

请路过的大侠帮帮忙,谢谢
1294
yhm2005
文章数:41
年度积分:77
历史总积分:1294
注册时间:2006/6/10
发站内信
发表于:2011/12/27 19:19:57
#4楼
你不是8个字节,说的意思是让你在每个字节发送后延迟一点时间
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/12/27 19:25:08
#5楼
是8个字节呀
129=81H
其实以前也用同类的单片机对同类的仪器做过通讯,也没有问题

但这次却不行了!

用的是同样的程序,但以前用伟福6000编译时的仿真不记得是哪个了

不知这个仿真器的选用会不会是问题的原因?
1294
yhm2005
文章数:41
年度积分:77
历史总积分:1294
注册时间:2006/6/10
发站内信
发表于:2011/12/28 15:25:45
#6楼
就是在字符之间插入适当的时间间隔
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/12/28 17:18:57
#7楼
我把我所有的程序贴出来看看:

;下面为用串口2发送仪表协议数据,用中断回收前面8个数放在37H~3EH,其它的数即使回来也不收
;**************************************************************
;==============================================================
YBs2con: ;用s2con发送数据到仪表中!r01234
       mov dptr,#YBSEND ;装入发送数据列表
anl s2con,#11111101B ;#not s2ti ;屏蔽清空s2ti表示可发送!
mov r0,#00H ;指针设为0
mov r1,#08H ;总共送的字节数
   sendagain:
mov A,r0 ;指针向下移一位
movc A,@A+dptr ;查找计列表的数据
lcall senddata
inc r0
djnz r1,sendagain ;没有发完则向再继续发送下一位
   ret
;===============================
YBSEND: ;要发送的仪表的协议数据
;db 80H,80H,52H,00H,00H,00H,52H,00H
db 129,129,82,0,0,0,83,0 ;一号表一通道
;===============================
senddata: ;用到r234,引用R1
mov s2buf,A ;发送字节到串口2

;要加入防止编译检查时出现死循环的时间控制
mov R6,#05H ;这里约为0.3S
   YBLOOP3:
MOV R5,#0ffH
   YBLOOP2:
MOV R4,#0ffH
   YBLOOP1:
;TI —— 串口发送中断标志位。
;发送完数据,硬件使TI置1,软件清0(CLR TI)
mov Acc,s2con ;将数据串口2的控制寄存器内容送到Acc中
jb acc.1,YBsended ;acc=s2con的第1位是s2ti,如是0则跳去重新检测
;s2ti等于0时,继续检查!直到是1
;则表示发送完成chks2ti
DJNZ R4,YBLOOP1 ;两周期
DJNZ R5,YBLOOP2
DJNZ R6,YBLOOP3
;按道理不会阻止加或缩短时间才对!

   YBsended:
nop ;等一个空周期,一个软件清0的过程
anl s2con,#11111101B ;#not s2ti ;屏蔽清空s2ti为下次发送准备
;可能下机位反应不过来,要等一定的时间,约为10ms
;而最后一个就不用等

cjne r1,#01H,senddelay ;最后一个!不用等待,快快去开中断
       sjmp send_exit
;300ms的时间按理论上讲实太长了,但可惜也不知多少是合适
;要加入延时才能处理?
   senddelay: ;据说执行快几十倍,所以加长时间!
mov r3,#250 ;加长时间是为了仪表能接收并处理,要等实际测试定出
   sendlop2:
mov r4,#250
   sendlop1:
nop
djnz r4,sendlop1
djnz r3,sendlop2 ;
   send_exit:
   ret
;============================


[此贴子已经被作者于2011/12/28 17:20:18编辑过]
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/12/28 17:29:18
#8楼
因为现在而言我的单片机就是主机,每隔几秒钟单片机会向仪器发送要求读数的数据

所以发送是主动的
为了在编译时不会出现死循环加入了一定的时间限制
时长约为300ms,发送一个字节不可能了吧?

后面每个字节间还有约  50ms的时间
我真搞不懂为什么不行!时间只有长没有短的了

试了不行才是气人的地方

1294
yhm2005
文章数:41
年度积分:77
历史总积分:1294
注册时间:2006/6/10
发站内信
发表于:2011/12/28 19:21:37
#9楼
字节间50ms的间隔是不是长了些


[此贴子已经被作者于2011/12/28 19:22:11编辑过]
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004