zoukankan      html  css  js  c++  java
  • 80C51串行口

    串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度

    单工、半双工、全双工
    单工数据传输只支持数据在一个方向上传输
    半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信
    全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力

    奇/偶校验(ECC)
    传输的一组二进制代码的数位中“1”的个数是奇数或偶数

    传输距离与传输速率
    当传输线使用每0.3m有50PF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m

    80C51串行口
    80C51

    有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H

    SCON
    功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志
    SCON
    SM0和SM1为工作方式选择位,可选择四种工作方式
    SM

    SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信
    在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1

    REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收

    TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位
    在方式0和方式1中,该位未用

    RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位

    TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请

    RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请

    PCON
    只有一位SMOD与串行口工作有关
    PCON
    SMOD波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0

    中断源
    中断源

    举例

    void initUART()
    {
        TMOD = 0x20; //TI计数器 方式2
        TH1 = 0xf3; //初值 波特率4800 倍频
        TL1 = 0xf3;
        PCON = 0x80; //设置SMOD 倍频
        TR1 = 1; //打开定时器
        SCON = 0x50; //SCON寄存器
        ES = 1; //打开串口中断
        EA = 1; //打开总中断
    }
    
    void intUART() interrupt 4
    {
        u8 rdata;
    
        rdata = SBUF;
        RI = 0;
    
        SBUF = rdata;
        while(!TI);
        TI = 0;
    }
    
    int main()
    {                
        initUART();
    
        return 0;
    }

    51波特率初值设定:
    http://download.csdn.net/download/zhangxuechao_/9893735

  • 相关阅读:
    深入理解递归函数的调用过程
    关于字符串和字符数组的再讨论
    返回字符串的长度
    再写静态变量的有效范围
    一道关于返回指针和返回数组名的面试题
    关于TCP/IP的三次握手和四次挥手解释
    C++面向对象的编程(二)
    关于面试宝典中的检测并修改不适合的继承
    argc和argv
    基于C的文件操作(转)
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709632.html
Copyright © 2011-2022 走看看