全球旧事资料 分类
1,此外还有一个方向控制引脚,我们使用杜邦线将其连接到P17上去。RS485的另外一端,大家可以使用一个USB转485模块,用双绞线把开发板和模块上的A和B分别对应连起来,USB那头插入电脑,然后就可以进行通信了。学习了第13章的实用串口通信的方法和程序后,做这种串口通信的方法就很简单了,基本是一致的。我们使用实用串口通信的思路,做了一个简单的程序,通过串口调试助手下发任意个字符,单片机接收到后在末尾添加“回车换行”符后再送回,在调试助手上重新显示出来,先把程序贴出来。程序中需要注意的一点是:因为平常都是将485设置为接收状态,只有在发送数据的时候才将485改为发送状态,所以在UartWrite函数开头将485方向引脚拉高,函数退出前再拉低。但是这里有一个细节,就是单片机的发送和接收中断产生的时刻都是在停止位的一
f半上,也就是说每当停止位传送了一半的时候,RI或TI就已经置位并且马上进入中断
(如果中断使能的话)函数了,接收的时候自然不会存在问题,但发送的时候就不一样
了:当紧接这向SBUF写入一个字节数据时,UART硬件会在完成上一个停止位的发送
后,再开始新字节的发送,但如果此时不是继续发送下一个字节,而是已经发送完毕了,
要停止发送并将485方向引脚拉低以使485重新处于接收状态时就有问题了,因为这时候
最后的这个停止位实际只发送了一半,还没有完全完成,所以就有了UartWrite函数内
DelayX10us5这个操作,这是人为的增加了延时50us,这50us的时间正好让剩下的一
半停止位完成,那么这个时间自然就是由通信波特率决定的了,为波特率周期的一半。
RS485c文件程序源代码
i
cludereg52h
i
cludei
tri
sh
sbitRS485_DIRP17RS485方向选择引脚
bitflagO
ceTxd0单次发送完成标志,即发送完一个字节
bitcmdArrived0命令到达标志,即接收到上位机下发的命令
u
sig
edcharc
tRxd0
u
sig
edcharpdatabufRxd40串口接收缓冲区
voidCo
figUARTu
sig
edi
tbaud串口配置函数,baud为波特率

RS485_DIR0RS485设置为接收方向
SCON0x50配置串口为模式1
TMOD0x0F清零T1的控制位
TMOD0x20配置T1为模式2
TH1256110592001232baud计算T1重载值
TL1TH1初值等于重载值
ET10
禁止T1中断
ES1
使能串口中断
TR11
启动T1

u
sig
edcharUartReadu
sig
edcharbufu
sig
edcharle
串口数据读取函数,数
据接收指针buf,读取数据长度le
,返回值为实际读取到的数据长度

u
sig
edcharir
好听全球资料 返回顶部