双机(51单片机)串行通信最基本的方法


有网友求助双机串行通信的方法,做而论道以前曾经发表过这方面的博文,但是当时没有配发电路图,不太好理解和仿制。
做而论道过去一直使用硬件的仿真器,在最近,把 PROTEUS 软件逐渐的熟悉起来了,用这个“纸上谈兵”的东西,也有一定的好处,就是便于和没有硬件条件的网友进行交流。
下面是一个最基本、最简单的串口通信电路,图中的两个单片机,使用同一个程序,双机的硬件配置也完全相同。双机(51单片机)串行通信最基本的方法 - 非著名博主 - 电子信息角落
图片链接: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
;----------------------------------------

做成了本实验,只是说明电路、软件基本上都可以正常工作。如果真正的用到实际工作中,传输信息,还需要编制通信协议。

比如说想要传输四个数据字节,那么在前面,应该先发送一些字节,来呼叫对方,待对方正确回答了,再向对方传送有效的数据,最后再向对方传送一些校验信息,等到收到对方的确认信息之后,一次通信,才算结束。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页