共2条
1/1 1 跳转至页
UART 模拟串口是否比硬件UART稳定性要差?
问
我使用MSP430F1121的TimeA模拟串口操作,使用32768Hz晶振,波特率使用2400bps。并使用RS485接口芯片。发现节点数一多(一般30个以上,距离在485的规定1200米范围之内)就出现问题(无法通讯);节点少的话都很正常。我用的RS485接口芯片是Sipex的400个节点的芯片哟!怎么会这样啊?
是不是模拟出来的串口电平幅度以及工作稳定性都比硬件的UART(即单片机自带的UART口)差啊? 答 1: 大家都没有这方面的经验吗?
杨工及刘工能提供一下这方面的认识吗? 答 2: 不能通讯的是不是因为距离太长信号衰减到较小的幅度了。
timer模拟的会比硬件uart差一些,它判断每一位是取位正中的状态,硬件uart每一位都有多数表决,抗干扰能力要好得多。发送时差别不大。 答 3: 用软件模拟要看波特率的偏差范围,超过一定误差范围可能会有出错数据.
软件模拟时序和指令周期有关,晶振也有一定偏差范围.
给个51的例子
软件设计中,89C51 单片机的P1.0 和P1.1 口分别
模拟串行通信的发送和接收,其接口程序主要由INPUT 发送子程序和
OUTPUT接收子程序组成。通信速率1200 bit /s,帧格式为N.8.1。发送时,
先发送一个起始位(低电平),接着按低位在先的顺序发送8 位数据,最后
发送停止位。接收时,先判断P1.1 接收端口是否有起始低电平出现,如有
则按低位在先的顺序接收8 位数,最后判断P1.1 口是否有停止高电平出现,
如有则完成一个数据接收,否则继续等待。其中软件编写要严格按照异步通
信的时序进行,每bit 位传送时间间隔按通信速率1200 bit /s计算为833μs。
其模拟串行通信程序清单见下,系统要求单片机晶振为6M。程序清单如下:
TXD EQU P1.0
RXD EQU P1.1 ;定义89C51 P1.0 为发送端,P1.1 为接收端
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV A, #30H
MOV R5,#N
SETB RXD ;P1.0 置高
TX: LCALL INPUT ;调用发送子程序,将寄存器A 中内容发给PC 机
;
SETB TXD ;P1.1 置高
MOV R0,#40H
RX: LCALL OUTPUT ;调用接收子程序,将接收的N 个数据存放在以40H开始的地址中
MOV R0,A
INC R0
DJNZ R5, RX ;N 个数据接收结束,则等待,否则转RX 继续接收
3
AJMP $
;**************延时833μs 子程序*****
DEL833: MOV R7 ,#205
MS11: DJNZ R7,MS11
RET
; **********************************
;******** 89C51发送数据给PC 机子程序****
INPUT: CLR C
MOV TXD,C ;发送起始位
LCALL DEL833 ;延时
MOV R3,#8
REP: RRC A
MOV TXD ,C
LCALL DEL833
DJNZ R3,REP ;发送8 位数据
SETB C ;发送停止位
MOV TXD,C
LCALL DEL833
RET
;********从PC 机接收数据子程序********
OUTPUT: JB RXD, $ ; 判断是否有起始位出现
LCALL DEL833
MOV R3,#8
OUT: MOV C ,RXD
RRC A
LCALL DEL833
DJNZ R3,OUT ; 接收8 位数据
JNB RXD ,$ ; 判断是否有停止位出现
RET 答 4: 谢谢了。
希望TI能出一些带USART的20脚的小型片子,这样我在使用中也放心多了。
是不是模拟出来的串口电平幅度以及工作稳定性都比硬件的UART(即单片机自带的UART口)差啊? 答 1: 大家都没有这方面的经验吗?
杨工及刘工能提供一下这方面的认识吗? 答 2: 不能通讯的是不是因为距离太长信号衰减到较小的幅度了。
timer模拟的会比硬件uart差一些,它判断每一位是取位正中的状态,硬件uart每一位都有多数表决,抗干扰能力要好得多。发送时差别不大。 答 3: 用软件模拟要看波特率的偏差范围,超过一定误差范围可能会有出错数据.
软件模拟时序和指令周期有关,晶振也有一定偏差范围.
给个51的例子
软件设计中,89C51 单片机的P1.0 和P1.1 口分别
模拟串行通信的发送和接收,其接口程序主要由INPUT 发送子程序和
OUTPUT接收子程序组成。通信速率1200 bit /s,帧格式为N.8.1。发送时,
先发送一个起始位(低电平),接着按低位在先的顺序发送8 位数据,最后
发送停止位。接收时,先判断P1.1 接收端口是否有起始低电平出现,如有
则按低位在先的顺序接收8 位数,最后判断P1.1 口是否有停止高电平出现,
如有则完成一个数据接收,否则继续等待。其中软件编写要严格按照异步通
信的时序进行,每bit 位传送时间间隔按通信速率1200 bit /s计算为833μs。
其模拟串行通信程序清单见下,系统要求单片机晶振为6M。程序清单如下:
TXD EQU P1.0
RXD EQU P1.1 ;定义89C51 P1.0 为发送端,P1.1 为接收端
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV A, #30H
MOV R5,#N
SETB RXD ;P1.0 置高
TX: LCALL INPUT ;调用发送子程序,将寄存器A 中内容发给PC 机
;
SETB TXD ;P1.1 置高
MOV R0,#40H
RX: LCALL OUTPUT ;调用接收子程序,将接收的N 个数据存放在以40H开始的地址中
MOV R0,A
INC R0
DJNZ R5, RX ;N 个数据接收结束,则等待,否则转RX 继续接收
3
AJMP $
;**************延时833μs 子程序*****
DEL833: MOV R7 ,#205
MS11: DJNZ R7,MS11
RET
; **********************************
;******** 89C51发送数据给PC 机子程序****
INPUT: CLR C
MOV TXD,C ;发送起始位
LCALL DEL833 ;延时
MOV R3,#8
REP: RRC A
MOV TXD ,C
LCALL DEL833
DJNZ R3,REP ;发送8 位数据
SETB C ;发送停止位
MOV TXD,C
LCALL DEL833
RET
;********从PC 机接收数据子程序********
OUTPUT: JB RXD, $ ; 判断是否有起始位出现
LCALL DEL833
MOV R3,#8
OUT: MOV C ,RXD
RRC A
LCALL DEL833
DJNZ R3,OUT ; 接收8 位数据
JNB RXD ,$ ; 判断是否有停止位出现
RET 答 4: 谢谢了。
希望TI能出一些带USART的20脚的小型片子,这样我在使用中也放心多了。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |