双机(51单片机)串行通信最基本的方法
2016-01-25 11:39
239 查看
有网友求助双机串行通信的方法,做而论道以前曾经发表过这方面的博文,但是当时没有配发电路图,不太好理解和仿制。
做而论道过去一直使用硬件的仿真器,在最近,把 PROTEUS 软件逐渐的熟悉起来了,用这个“纸上谈兵”的东西,也有一定的好处,就是便于和没有硬件条件的网友进行交流。
下面是一个最基本、最简单的串口通信电路,图中的两个单片机,使用同一个程序,双机的硬件配置也完全相同。
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/719a2589b2501aaca5c272ed.html
在程序控制下,本方拨码开关的信息,可以在对方的LED上显示。
编制软件时,使用了汇编语言,针对按键和串行通信,都采用了中断方式,这样就可以取得最快的反应速度。
在实际的硬件实验中,双方都显得十分灵敏。
两个单片机,使用同一个程序,源代码如下:
;----------------------------------------
ORG 0000H
SJMP START
ORG 0003H
LJMP INT0_INT
ORG 0023H
LJMP UART_INT
;----------------------------------------
START:
MOV SP, #60H
MOV SCON,#50H ;方式1,8-n-1
MOV TMOD,#20H
MOV TH1, #0FDH ;波特率设置
MOV TL1, #0FDH ; 9600@11.0592MHz
SETB TR1
SETB IT0 ;P3.2下降沿触发中断
SETB EX0
SETB ES ;开放中断
SETB EA
SJMP $
;----------------------------------------
INT0_INT:
MOV P2, #0FFH
MOV A, P2 ;读出的拨码开关信息
; MOV P0, A ;调试的时候,可在本方显示,以证明中断正常
; JB TI, $
MOV SBUF,A ;向串口发送
RETI
;----------------------------------------
UART_INT:
JB TI, _FA_
MOV A, SBUF ;读出串口收到的信息
MOV P0, A ;送到P0口进行显示
CLR RI
RETI
;--------------------
_FA_:
CLR TI
RETI
;----------------------------------------
END
;----------------------------------------
做成了本实验,只是说明电路、软件基本上都可以正常工作。如果真正的用到实际工作中,传输信息,还需要编制通信协议。
比如说想要传输四个数据字节,那么在前面,应该先发送一些字节,来呼叫对方,待对方正确回答了,再向对方传送有效的数据,最后再向对方传送一些校验信息,等到收到对方的确认信息之后,一次通信,才算结束。
做而论道过去一直使用硬件的仿真器,在最近,把 PROTEUS 软件逐渐的熟悉起来了,用这个“纸上谈兵”的东西,也有一定的好处,就是便于和没有硬件条件的网友进行交流。
下面是一个最基本、最简单的串口通信电路,图中的两个单片机,使用同一个程序,双机的硬件配置也完全相同。
图片链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/719a2589b2501aaca5c272ed.html
在程序控制下,本方拨码开关的信息,可以在对方的LED上显示。
编制软件时,使用了汇编语言,针对按键和串行通信,都采用了中断方式,这样就可以取得最快的反应速度。
在实际的硬件实验中,双方都显得十分灵敏。
两个单片机,使用同一个程序,源代码如下:
;----------------------------------------
ORG 0000H
SJMP START
ORG 0003H
LJMP INT0_INT
ORG 0023H
LJMP UART_INT
;----------------------------------------
START:
MOV SP, #60H
MOV SCON,#50H ;方式1,8-n-1
MOV TMOD,#20H
MOV TH1, #0FDH ;波特率设置
MOV TL1, #0FDH ; 9600@11.0592MHz
SETB TR1
SETB IT0 ;P3.2下降沿触发中断
SETB EX0
SETB ES ;开放中断
SETB EA
SJMP $
;----------------------------------------
INT0_INT:
MOV P2, #0FFH
MOV A, P2 ;读出的拨码开关信息
; MOV P0, A ;调试的时候,可在本方显示,以证明中断正常
; JB TI, $
MOV SBUF,A ;向串口发送
RETI
;----------------------------------------
UART_INT:
JB TI, _FA_
MOV A, SBUF ;读出串口收到的信息
MOV P0, A ;送到P0口进行显示
CLR RI
RETI
;--------------------
_FA_:
CLR TI
RETI
;----------------------------------------
END
;----------------------------------------
做成了本实验,只是说明电路、软件基本上都可以正常工作。如果真正的用到实际工作中,传输信息,还需要编制通信协议。
比如说想要传输四个数据字节,那么在前面,应该先发送一些字节,来呼叫对方,待对方正确回答了,再向对方传送有效的数据,最后再向对方传送一些校验信息,等到收到对方的确认信息之后,一次通信,才算结束。
相关文章推荐
- 设计模式之:代理模式
- 学习JavaScript事件流和事件处理程序
- 设计脉宽占空比50%,25%可调的脉冲发生器
- 为地震死难者默哀!为灾区人民祈福!
- 查表指令中计算偏移量的简便方法
- P1口外接8个LED,通过按键控制,实现左右移动的流水灯
- Android常用控件之ProgressBar系列
- 关于view.getTop(),view.getRight()....
- Linux重新挂载磁盘
- 线程间协作的两种方式
- BroadcastReceiver应用详解——广播
- Android在相册中过滤GIF图片
- 张荆亚先生的诗作
- 四字节除以三字节无符号数除法程序
- 单片机编程:找出最大数,并存入BIG单元中
- 单片机编程:求8个无符号数的平均值
- 一个串口通信发送的程序,51汇编的
- 两道单片机编程题--求最大值和数据传送
- MCS-51系列单片机指令如何判断字节数
- 几道单片机编程题