第11章 UART串口通信 练习题
题目:
练习题1:
关于UART串口通信的基本原理和通信过程,书中已经有了较为详细的描述,在此仅仅作一些较为简单的描述。
关于UART串口通讯首先它是串行通讯。对于串行通讯这个概念是相较于并行通讯的。在串行通信中,信息为一位一位的进行传输,而对于并行通信则是几位几位的进行传输。相较串行通讯,并行通讯的传输效率比较高,但是它比较占用硬件资源即它在传输的时候需要多条的数据线路,而对于串行通讯,它仅仅需要一条数据路线即可。 对于UART通讯来说,首先它会有1位的检测位即低电平,通过一个周期的低电平就告诉单片机要有信息传输过来了。在接下来的8个周期中,在每个周期中给高电平和低电平,分别代表了相应位置上为高电平和低电平。而且传递的信息中,属于小端数。即从数字的第1位逐步到第8位。而最后也会一位的校验位为1,即持续一个周期的高电平。 在我描述的该过程之中的每个周期的持续时间为波特率分之一。
练习题2:
对于通过I/O来对UART通讯进行模拟,也就是基本上模拟一下练习题1中的通讯过成。需要注意的是,在单片机接受信号的时候一般取每个周期中中间时刻的电平信号。因为一开始的电平信号处于两个电平信号的交界处信号不是很稳定。所以要去取中间时刻的电平进行分析。
练习题3:
串口模块已经进行了集成化的处理,所以只需要对于相应的寄存器进行配置即可。简化了编程的复杂度,以及提升了编程的效率。关于具体的如何配置相应的寄存器,参考接下来的练习题5和练习题6即可。
练习题4:
对于字符和数字之间的转换,其实就是C语言里面char数据类型和8位整数之间的关系而已。实际上7位已经对于英文字符已经足够完成所以的编码,而第8位一般是取0的。
练习题5:
该练习题为通过串口发送数据来控制流水灯程序是否进行,我设计的为通过串口进行发送数据,如果该数据为偶数则流水灯正常电亮,如果该数据为奇数,小灯不发光。源码如下:
#include <reg52.h>
void BTLV(unsigned int baud);
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;void main()
{EA=1; //打开总中断BTLV(9600); //设置波特率为9600ENLED=0; //使能3-8译码器ADDR3=1;ADDR2=1;ADDR1=1;ADDR0=0;while(1){if(SBUF%2==0){ //如果是偶数,打开定时器0中断,ET0=1;}else{ //如果是基数关闭定时器中断,小灯熄灭P0=0xff; ET0=0; } }
}
void BTLV(unsigned int baud)
{SCON=0X50; //配置串口模式TMOD=0x21; //配置定时器模式寄存器TH0=0x00; //配置好定时器0的初值TL0=0x60;TH1=256-(11059200/12/32)/baud; //配置好定时器1的初值TL1=TH1;ET1=0; //关闭定时器1中断ET0=0; //打开定时器0中断ES=1; //打开串口中断TR1=1; //打开定时器1TR0=1; //打开定时器0
}
void Timer_0() interrupt 1
{static unsigned char i=0;TH0=0x00;TL0=0x60;P0=~(0x01<<i);i++;if(i==8)i=0;
}
void Timer_1() interrupt 4
{if(RI){RI=0;}if(TI){TI=0;}
}
效果:
串口_流水灯
练习题6:
和练习5类似,现在给出作者源码,方便大家理解程序(其实因为笔者比较懒而这两个程序又差不多)
/*
*******************************************************************************
* 《手把手教你学51单片机(C语言版)》
* 配套 KST-51 单片机开发板 示例源代码
*
* (c) 版权所有 2014 金沙滩工作室/清华大学出版社 保留所有权利
* 获取更多资料请访问:http://www.kingst.org
*
* 文件名:main.c
* 描 述:第11章 作业题6 UART串口控制蜂鸣器的开关
* 版本号:v1.0.0
* 备 注:只当接收到大写字符'B'后改变蜂鸣器的开/关状态
*******************************************************************************
*/#include <reg52.h>sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit BUZZ = P1^6;unsigned char code LedChar[] = { //数码管显示字符转换表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[7] = { //数码管+独立LED显示缓冲区0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
unsigned char T0RH = 0; //T0重载值的高字节
unsigned char T0RL = 0; //T0重载值的低字节
unsigned char RxdByte = 0; //串口接收到的字节
unsigned char flagBuzz = 0; //蜂鸣器控制标志void ConfigTimer0(unsigned int ms);
void ConfigUART(unsigned int baud);void main()
{EA = 1; //使能总中断ENLED = 0; //选择数码管和独立LEDADDR3 = 1;ConfigTimer0(1); //配置T0定时1msConfigUART(9600); //配置波特率为9600while (1){ //将接收字节在数码管上以十六进制形式显示出来LedBuff[0] = LedChar[RxdByte & 0x0F];LedBuff[1] = LedChar[RxdByte >> 4];}
}
/* 配置并启动T0,ms-T0定时时间 */
void ConfigTimer0(unsigned int ms)
{unsigned long tmp; //临时变量tmp = 11059200 / 12; //定时器计数频率tmp = (tmp * ms) / 1000; //计算所需的计数值tmp = 65536 - tmp; //计算定时器重载值tmp = tmp + 13; //补偿中断响应延时造成的误差T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节T0RL = (unsigned char)tmp;TMOD &= 0xF0; //清零T0的控制位TMOD |= 0x01; //配置T0为模式1TH0 = T0RH; //加载T0重载值TL0 = T0RL;ET0 = 1; //使能T0中断TR0 = 1; //启动T0
}
/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{SCON = 0x50; //配置串口为模式1TMOD &= 0x0F; //清零T1的控制位TMOD |= 0x20; //配置T1为模式2TH1 = 256 - (11059200/12/32)/baud; //计算T1重载值TL1 = TH1; //初值等于重载值ET1 = 0; //禁止T1中断ES = 1; //使能串口中断TR1 = 1; //启动T1
}
/* 按键扫描函数,需在定时中断中调用 */
void LedScan()
{static unsigned char i = 0; //动态扫描索引P0 = 0xFF; //关闭所有段选位,显示消隐P1 = (P1 & 0xF8) | i; //位选索引值赋值到P1口低3位P0 = LedBuff[i]; //缓冲区中索引位置的数据送到P0口if (i < 6) //索引递增循环,遍历整个缓冲区i++;elsei = 0;
}
/* T0中断服务函数,完成LED扫描 */
void InterruptTimer0() interrupt 1
{TH0 = T0RH; //重新加载重载值TL0 = T0RL;LedScan(); //LED扫描显示if (flagBuzz == 0)BUZZ = 1; //蜂鸣器关闭elseBUZZ = ~BUZZ; //蜂鸣器鸣叫
}
/* UART中断服务函数 */
void InterruptUART() interrupt 4
{if (RI) //接收到字节{RI = 0; //手动清零接收中断标志位RxdByte = SBUF; //接收到的数据保存到接收字节变量中SBUF = RxdByte; //接收到的数据又直接发回,叫作-"echo",//用以提示用户输入的信息是否已正确接收if (RxdByte == 'B') //接收到大写字母B时改变一次蜂鸣器控制标志{flagBuzz = !flagBuzz;}}if (TI) //字节发送完毕{TI = 0; //手动清零发送中断标志位}
}
效果:
串口_蜂鸣器
第11章 UART串口通信 练习题相关推荐
- 第11章 UART 串口通信(手把手教你学51单片机pdf部分)
手把手教你学51单片机-C语言版.pdf
- 【正点原子MP157连载】 第十六章 UART串口通信实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 正点原子linux串口驱动下载,【正点原子Linux连载】第二十一章UART串口通信实验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南 (amobbs.com 阿莫电子论坛)...
示例代码21.3.1 bsp_uart.h文件代码 1 #ifndef _BSP_UART_H 2 #define _BSP_UART_H 3 #include "imx6ul.h&q ...
- 单片机:11.UART串口通信
原文地址:https://blog.csdn.net/Qingzhusshuiyun/article/details/78236798 通信按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与 ...
- 【自学51单片机】11 -- UART串口通信
文章目录 1.串行通信的初步认识 2.USB转串口通信 3.UART串口通信的基本应用 3.1 通信的三种基本类型 3.2 UARM模块介绍 3.3编写UART串口步骤及程序 4.串口调试助手 5.通 ...
- NXP(I.MX6uLL) UART串口通信原理————这个未复习
参考:Linux NXP (I.MX6uLL) UART串口通信原理 作者:一只青木呀 发布时间: 2020-09-20 16:48:33 网址:https://blog.csdn.net/weixi ...
- 【正点原子FPGA连载】 第十七章 RS485串口通信实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...
- RS232与UART串口通信
通信,按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与传感器.存储芯片.外围控制芯片等技术紧密结合,成为整个单片机系统的"神经中枢".没有通信,单片机所实现的功能仅仅局 ...
- UART 串口通信实验
串口是"串行接口"的简称,即采用串行通信方式的接口.串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送,其特点是通信线路简单,但传输速度较慢.因此串口广泛应 ...
- UART串口通信浅谈之(一)--基础概述
通信按照传统的理解就是信息的传输与交换.UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用 ...
最新文章
- 命令行操作svn和git和git
- SIC插槽,WSIC插槽,XSIC插槽
- jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息
- 计算php代码执行时间长短的类(精确到毫秒)
- Vue项目中的初始化
- Win11如何更改盘符?Win11更改磁盘驱动器号的方法
- 所谓敏感(数字的敏感)
- 如何获取屏幕分辨率呢
- HTML5 桌面通知:Notification API的基础用法
- javascript 常用代码技巧大收集
- ahk键盘增强✨✨✨v1.1
- 恒生电子2018秋招笔经面经(开发岗)
- 登陆apple pay显示无法登录服务器,apple pay无法添加卡怎么办?未能连接到apple pay的解决方法...
- mysql和jdbc(韩)
- Android Q版本实现自动连接WiFi
- 中国药典 android,中国药典在线查询_中国药典v2.05.03安卓版
- 我的第一个JS组件-跨浏览器JS调试工具
- 现代经济感悟(4)-为什么一分钱一分货,两分货却要一块钱
- 剖析KCP以及KCP在游戏中是如何使用的
- matplotlib 绘图 中文乱码 0.5
热门文章
- 开启windows10系统组策略更新、开启Windows自动更新、关闭自动更新
- 小科普:浏览器的神玩法,将开启万能版浏览器?
- 关于矩阵相乘顺序的理解(跟旋转没关)
- 圣水盆景区是闾山最著名的景点
- Linux网络编程 -- Linux常用工具的使用(vim、gcc、gdb、makefile、shell)
- 8g内存一般占用多少_你到底需要多大内存?4G、8G还是16G
- html毕业论文参考文献,本科毕业论文参考文献规范格式
- 数据看板是什么,怎么做?
- @Transient注解
- android系统分区刷机包,安卓刷机最大最专业最齐全的安卓ROM刷机包资源