《新概念51单片机C语言教程-入门、提高、开发、扩展全攻略》杂录1--单片机双机通信

1、单片机的双机通信有短距离和长距离之分,1m之内的通信称为短距离,100m左右的通信叫长距离。若要更长的距离通信,如几十或几千米,就需要借助其他无线设备方可实现。通常单片机通信可以有以下4种实现方式:TTL电平通信(双机串行口直接互联)、RS-232C通信、RS-422A通信、RS-485通信等,不同的传输方式各有自己的特点。

2、TTL电平通信时,直接将单片机A的TXD端接单片机的RXD端,单片机的RXD端接单片机的TXD端。需要强调的是,两个单片机系统必须共地,即把它们的系统电源地线要连接在一起。
3、RS-232C是EIA(美国电子工业协会)1969年制定的通信标准。RS-232C定义了数据终端(DTE)与数据通信设备(DCE)之间的物理接口标准。
4、RS-232C引脚定义:

引脚号名称名称缩写信号方向说明
1frame groundFG 屏蔽地线
2transmitted dataTXD从DTE至DCE传送数据线
3received dataRXD从DCE至DTE接受数据线
4request to sendRTS从DTE至DCE请求发送
5clear to sendCTS从DCE至DTE允许发送
6data set readyDSR从DCE至DTE数据设备(DCE)准备好
7signal groundSG 信号逻辑地线
8data carrier  detectDCD从DCE至DTE数据载波检测
9reserved  备用
10reserved  备用
11unassigned  未定义
12secondary data carrier detectDCD从DCE至DTE数据载波检测(二次通道)
13secondary clear to sendCTS从DCE至DTE允许发送(二次通道)
14secondary transmintted dataTXD从DTE至DCE传送数据(二次通道)
15transmit clockTXC从DCE至DTE传送时钟
16secondary received dataRXD从DCE至DTE接受数据线(二次通道)
17received clockRXC从DTE至DCE接受时钟
18unassigned  未定义
19secondary request sendRTS从DTE至DCE请求发送(二次通道)
20data terminal readyDTR从DTE至DCE数据终端准备好
21signal quality detectSQD从DCE至DTE信号质量检测
22ring indicatorRI从DCE至DTE振铃指示
23data rate selectDRS从DTE至DCE数据速率选择。它是针对21引脚改变的答应
24external transmit clock 从DTE至DCE外部发送时钟
25unassigned  未定义

但我们用RS232C标准进行两个单片机之间通信时,只需要用到三条线:RXD、TXD和GND。
4、RS232C电平传输数据时,相比TTL电平距离要远,RS-232C总线标准电容允许接受电容允许值的约束,使用时传输距离一般不要超过15m(线路好时也不要超过30m)。其最高传输速率为20kbps。RS-232C总线标准要求收、发方必须共地。
5、如果两个单片机通信时都使用串口方式1,需要特别注意,必须保证两单片机系统的通信波特率完全一致,否则必定收不到数据。
6、当写双向数据传输程序时,需要注意一点,在发送数据时一定要把串口中断关闭,否则同样也会进入串口中断服务程序,进而影响程序的正常工作。
7、我写的单片机间的单向传输的程序:
发送:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint del)
{
        uint i,j;
        for(i=0;i<del;i++)
                for(j=0;j<1827;j++)
                        ;
}
void send(uint key_num)
{
    SBUF=key_num;
    while(!TI);
    TI=0;
}
void main()
{
    uchar a=87;
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
    TR1=1;
    SM0=0;
    SM1=1;
    EA=1;
    ES=1;
    while(1)
    {
        //发送数字
        send(21);
        delay(10);
    }
}
接收:
#include <reg52.h>
#include "lcd12864.h"
#define uchar unsigned char
#define uint unsigned int
uchar shi,ge;
uint temp;
void delay(uint del)
{
        uint i,j;
        for(i=0;i<del;i++)
                for(j=0;j<1827;j++)
                        ;
}
void display_shu(uchar a)
   //显示数字
{
    write_com(0x80);
    shi=a/10;
    ge=a%10;
    write_data(shi+0x30);
    write_data(ge+0x30);
    delay(1);
}
void display_word(uchar a)//显示字母
{
    write_com(0x80);
    write_data(a);
    delay(1);
}
void main()
{
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
    TR1=1;
    REN=1;
    SM0=0;
    SM1=1;
    EA=1;
    ES=1;
//初始化12864LCD
        CH = 0;
        LCD12864_delay(1);
        lcdinit();
        LCD12864_delay(10);
        while(1);
}
void ser() interrupt 4
{
    uchar a;
    RI=0;
    a=SBUF;
    display_shu(a);
}
我本来想着传送数据,可是到后来才发现,这个串口只能发送8位的数据。还有就是在多次发送时,存在一些问题,不知有没有高手可以指点一下。关于多次发送和发送汉字。
8、单片机构成的多机系统采用总线型主从式结构。所谓主从式,即在数个单片机中,有一个是主机,其余的是从机,从机要服从主机的调度、支配。51单片机的串行口方式2和方式3适用于这种主从式通信结构。当然,采用不同的通信标准时,还需进行相应的点评转换,有时还要对信号进行光电隔离。在实际的多机应用系统中,才有RS-485串行标准总线进行数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值