四、串口通信
1.基本概念
通信中最重要的两个方面:
信息表示和解析方法;
信息的传输方法。
通信双方事先需要约定好信息的表示方法和解析方法,做到一致,否则信息不能有效传递。
信号的传输方法是指经过编码后的通信信息如何在传输介质上传输的过程。
通信过程分为3个步骤:
1、首先发送方先按照信息编码方式对有效信息进行编码(编程成可以在通信线路上传输的信号形态)
2、然后编码后的信息在传输介质上进行传输,输送给接收方;
3、最后接收方接收到编码信息后进行解码,解码后得到可以理解的有效信息。
2.串口通信
串口通信的特点:
异步、电平信号、串行
异步:串口通信的发送方和接收方之间是没有统一的时钟信号的。
电平信号:串口通信出现的时间较早,速率较低,传输的距离较近,所以干扰还不太明显,因此当时使用了电平信号传输。后期出现的传输协议都改成差分信号传输了。
串行通信:串口通信每次同时只能传输1个二进制位。
RS232电平和TTL电平
电平信号是用信号线电平减去参考线电平得到电压差,这个电压差决定了传输值是1还是0
电平信号是多少V时代表1,多少V时代表0不是固定的,取决于电平标准。
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下两种:
1、TTL电平:+5V表示1,0V表示0(电平信号)
2、RS232电平:-3-15V表示1,+3+15V表示0(电平信号)
波特率
串口的波特率越高,速度越快,但是相应干扰越多,越不稳定,能传输的距离就越短;波特率低,干扰相对较少,但是速度慢。所以,要根据实际情况选择合适的波特率,常用的有115200;9200;4800。
起始位 数据位 奇偶校验位 停止位
起始位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。
数据位是本次通信真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(一般可选的有6、7、8、9,99%情况下我们都是选择8位数据位。因为我们一般通过串口发送的文字信息都是ASCII码编码的,而ASCII码中一个字符刚好编码为8位。)
奇偶校验位是用来给数据位进行奇偶校验(把待校验的有效数据逐个位的加起来,总和为奇数,奇偶校验位就为1,总和为偶数,奇偶校验位就为0)的,可以在一定程度上防止位反转。
停止位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。常见的有1位停止位,1.5位停止位,2位停止位等。99%情况下都是用1位停止位。
3.硬件电路
51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。
简单双向串口通信有两根通信线(发送端TXD和接收端RXD),TXD与RXD要交叉连接,当只需单向的数据传输时,可以直接一根通信线。
4.串口接线
第一种:
直接使用USB转TTL串口线连接到单片机的UART引脚上。
第二种:
通过D89标准的USB转串口线
5.串口和中断系统
串口的中断系统和定时器类似,也有寄存器
6.发送数据
注意:发送完数据之后必须要有延时,不然很容易出错。
7.接受数据
补充:
在串口工具显示中,可以选择是以字符形式显示,还是十六进制的形式来显示,比如字符a,是就显示字符a,还是说显示对应的十六进制数61。
区分文本模式和hex模式
五、LED点阵屏
1.介绍
LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。
LED点阵屏分类:
按颜色:单色、双色、全彩
按像素:88、1616等(大规模的LED点阵通常由很多个小点阵拼接而成)
2.显示原理
LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已
LED点阵屏与数码管一样,有共阴和共阳两种接法,不同的接法对应的电路结构不同
LED点阵屏需要进行逐行或逐列扫描,才能使所有LED同时显示
3.移位寄存器(74HC595)
与38译码器相似,74HC595是串行输入并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。(不过寄存器是并行输出)
SERCLK提供上升沿(输入控制引脚)
SER做数据缓存
最后有RCLK控制并行输出(输出控制引脚)
OE (使能)高电平时禁止输出(高阻态)。
4.显示图像
六、DS1302实时时钟
1.介绍
何为实时时钟
real time clock,真实时间,就是所谓的xx年x月x日x时x分x秒星期x
RTC是SoC中一个内部外设,RTC有自己独立的晶振提供RTC时钟源,内部有一些寄存器用来记录时间(年月日时分秒星期)。一般情况下为了在系统关机时时间仍然在走,还会给RTC提供一个电池供电。
RTC在早期的单片机应用中是外置的,后来因为这个功能比较基础比较常用,比较高端的单片机或者SOC就将RTC直接内置了,所以我这里就当RTC是内部外设,但其实在操作上,没有本质的区别。
2.引脚
RST 复位
I/O 数据线
SCLK 串行时钟
Vcc2为主电源,VCC1为后备电源。
X1和X2是振荡源,外接11.0592kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。
3.寄存器和时序
注意:
1、从最低位开始传送数据。(是不是说不管是主到从,还是从到主,都是最低位开始)
2、时序图中有的信号是高低电平的形式,但是有的是以方框的形式表示的,这代表它可能是高电平,也可能是低电平,一般都是数据信号的时序表示,里面放的是要发送或者接收的数据。
4.BCD码
BCD码其实就是看起来很像十进制数的十六进制数。意思就是:BCD码本质上是十六进制数,但是因为他没有ABCDEF,所以看起来很像十进制数。
对于上面提到的寄存器定义表,其实没太看明白。
实际上,要读哪个寄存器的数据,读出来的就是要的数据,比如读秒读出来的8位二进制数为:00000011,用十六进制表示就是0x03,代表的就是当前处于第3秒。
如果要写入8秒,那么就写入0x08即可。
小补充:
如何拆分十进制的各个位?比如21,则21/10得到十位数,21%10得到个位数;
十六进制如何拆分数据?比如0x21,>>七位可获取高位,&上0x01可获得低位。