zoukankan      html  css  js  c++  java
  • 初学51——串口通信

    51串口通信

    串行口控制寄存器

    SCON D7 D6 D5 D4 D3 D2 D1 D0
    98H SM0 SM1 SM2 REN TB8 RB8 TI RI

    SM1、SM0:串行口工作方式选择位

    SM0 SM1 方式 功能 波特率
    0 0 方式0 移位寄存器方式 f(osc) / 12
    0 1 方式1 8位异步通信方式 可变
    1 0 方式2 9位异步通信方式 f(osc)/32 或 f(osc)/64
    1 1 方式3 9位异步通信方式 可变

    SM2 : 多机通信控制位
    REN : 允许接受控制位
    TB8/RB8 : 发送/接受的第9数据位
    RI : 接收中断标志位

    电源控制寄存器PCON

    PCON D7 ...
    87H SMOD

    当SMOD位为1,则串行口方式1,方式2, 方式3的波特率加倍

    设置定时器初值

    (一般通过使用软件设置)
    T1的溢出率 = 波特率 x 32/2^SMOD
    T1 工作于方式二的溢出率可以表示为:
    T1的溢出率 = fosc/(12 x (256 - 初值))
    两个算式联立即可得到定时器的初值

    例程

    /* 定时器初始化 */
    void Sbuff_Init(void)
    {
        // 工作方式1
        SCON = 0x50;
        // 八位自动重装定时器
        TMOD = 0x20;
        // 初始化
        TL1 = 0xFD;
        TH1 = 0xFD;
        // 开定时器
        TR1 = 1;
        // 开中断
        EA = 1;
        ES = 1;
    
    }
    static char string[SIZE];
    void funins(void) interrupt 4
    {
    //  手动清空RI位
        RI = 0;
    //  将SBUF接受到的数据传入数组中
    	string[flag] = SBUF;
    //  测试代码,回显
    //	SBUF = string[flag];
    //	while(!TI);
    //	TI = 0;
    //	ES = 1;
    	flag++;
    	if (flag == 4)
    	{
    		flag = 0;
    	}
    }
    
    
  • 相关阅读:
    MySQL 数据库改名的简单方法
    Apache启用Gzip压缩
    安全的Web主机iptables防火墙脚本
    iptables
    Linux服务器维护统计连接数查看外部IP
    面试相关(新)
    hdu 4946 Area of Mushroom (凸包,去重点,水平排序,留共线点)
    凸包全解
    eclipse (android环境搭建)
    wins 软件安装
  • 原文地址:https://www.cnblogs.com/sophomores/p/12396528.html
Copyright © 2011-2022 走看看