单片机的数据通信有两种方式:并行通信和串行通信。并行通信指数据字节的各位同时发送或接收;而串行通信是数据字长距离传输数据节一位一位按顺序发送或接收。并行通信传输线多,适用于短距离、快速度的通信;面串行通信仅需单线传输信息,适用于长距离传输数据,由于每次传送一位,所以传输速度比较慢。串行通信又分异步和同步两种方式,其中异步串行通信是最常用的方式。本文主要通过两个实例介绍单片机的异步串行通信功能和基本使用方法。
一、串行通信基本知识
ATmega8单片机带有一个全双工的同步/异步串行收发模块USART,模块由时钟发生器、数据发送器和接收器、控制寄存器等部分组成。异步串行通信的接线方式见下图,其中RXD为接收端,TXD为发送端。数据通信以帧为传输单位,每一帧包含1位起始位0、8位或9位数据、1位奇偶校验位和1位停止位1。
传输格式见下图。
下面介绍与USART相关的几个寄存器,为了节省篇幅,只对编程中要用到的相关内容进行介绍。
1.数据寄存器UDR 数据寄存器UDR用来存放要发射或者接收的数据,UDR可读可写,初始值为0x00。
2.控制和状态寄存器UCSRA.UCSRB、UCSRC
UCSRA的定义见下表。
UCSRA的初始值为0x20。
RXC位为USART接收完成标志位,数据哲器中有未读出的数据时RXC置位,否则清零。接收器禁止时,数据寄存器被刷新,导致RXC清零。RXC标志可用来产生接收结束中断。
TXC位为USART发送完成标志位,发送移位缓冲器中的数据被送出,且当发送缓冲器(UDR)为空时TXC置位。执行发送结束中断时TXC标志自动清零,也可以通过写1进行清除操作。TXC标志可用来产生发送结束中断。
UDRE位数据寄存器空标志位,标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE为1说明缓冲器为空,已准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断。复位后UDRE置位,表明发送器已经就绪。
UCSRB的定义见下表。
UCSRB的初始值为0x00。
RENC位为数据接收允许标志位,置位后将启动USART接收器。RXD引脚的通用端口功能被USART功能所取代。
TXNC位为发送数据允许标志位,置位后将启动USART发送器。TXD引脚的通用端口功能被USART功能所取代。TXEN清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。
CSRC的定义如下表。
UCSRC的初始值为0x86。
UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。
URSEL位为寄存器选择标志位,通过该位选择访问UCSRC寄存器或UBRRH寄存器。当读UCSRC时,该位为1;当写UCSRC时,该位必须写入1。
UMSEL位为模式选择标志位,通过这一位来选择同步或异步工作模式。UMSEL=O为异步模式,UMSEL=1为同步模式。
UPM1~O位为奇偶校验模式,这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数据时,发送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与UPM0所设置的值进行比较。如果不匹配,那么就将UCSRA中的PE置位。校验方式见下表。
USBS位为停止位选择标志位,通过这一位可以设置发射帧中停止位的位数。接收器忽略这一位的设置。USBS=0为1位停止位,USBS=1为2位停止位。
UCSZ1~0位为字符长度标志位,UCSZ1~0与UCSRB寄存器的UCSZ2位结合在一起可以设置数据帧包含的数据位数(字符长度)具体设置见下表。
UCSZ2 | UCSZ1 | UCSZ0 | 字符长度 |
0 | 0 | 0 | 5位 |
0 | 0 | 1 | 6位 |
O | 1 | 0 | 7位 |
0 | 1 | 1 | 8位 |
1 | 1 | 1 | 9位 |
3.波特率寄存器UBRRL和UBRRH
UBRRL和UBRRH的初始值均为Ox00。
UBRRH的最高位URSEL为寄存器选择标志位,用于选择确定UCSRC寄存器和UBRRH寄存器的操作。如果读UBRRH寄存器,该位为0。当写UBRRH寄存器时,该位必须写入0。
寄存器UBRRH的低4位和寄存器UBRRL的8位构成一个12位的UBRR寄存器,用于USART传送或接收波特率(BAUD)的设置。
波特率是信号传递的速率,在二进制信号中其值等于每秒钟传送多少位二进数。在异步通信正常模式下波特率的计算公式为BAUD=fosc/16(UBRRH),式中fosc为单片机系统时钟频率。
二、串口的应用实验
本文通过两个实验来介绍串口的应用,两个实验都是计算机和ATmega8单片机串口通信的实例。
实验一PC控制电源开关
1.实验电路
实验板上与本实验相关的电路见下图,这个实验是通过计算机对实验板上继电器K1、K2进行控制,即通过计算机用串行通信控制.ATmega8的(PD6、PD7)脚的输出状态。
2.程序设计
本实验的程序由上位机(计算机)程序和下位机(单片机)程序两部分组成。串口通信采用8位数据位,1位停止位,无校验位。波特率为9600。
上位机程序是安装在计算机上的串口应用程序,主要作用是向RS-232C端口发送控制信号、接收和处理返回信号。上位机程序由笔者用VB语言编写,在编写和使用时均要使用MSComm通信控件。软件的界面如下图所示,当用鼠标单击某一开关按钮时,其上面的圆形指示灯状态就会发生变化,红色表示电源打开,黑色表示电源关闭,对应单片机控制的继电器也会发生相应的变化。程序界面上的串口指示灯作串口工作状态指示,串口通信正常时状态为绿色,反之为黑色。软件还可以对使用的串口进行选择。
下位机程序如下:
于只有两路输出,因此实际上只要控制PD6、PD7就可以了。点击“开关1”按钮可以改变PD6的输出状态,点击“开关2”按钮可以改变PD7的输出状态。点击“全部开启”按钮PD6、PD7均输出高电平1;点击“全部关闭”按钮PD6、PD7均输出低电平0。PD6、PD7的输出电平决定继电器K1、K2的工作状态。
3.控制实验
先将程序目标文件写入单片机,再接好串口通信线,通信线的接线方法见上图。打开实验板的电源,运行上位机程序文件夹中的电源开关控制器.exe可执行文件,如果出现缺少控件的提示,只先执行一下install.bat即可。点击上位机软件上的命令按钮,我们发现实验板上的发光二极管VD5、VD6发光状态会随之发生相应的变化,与之对应的继电器的工作状态也会发生相应的变化。
如果我们把继电器的触点串联在电源插座上,再将家用电器的插头插在这个电源插座上就可以用计算机对家用电器的开关进行控制了。
实验二串口通信
1.实验电路
实验板上与本实验相关的电路见上图,这个实验主要用来演示计算机与单片机收发字符串的实验。计算机通过软件“串口调试助手”将字符串发送给单片机,单片机将收到的字符串在LCD显示屏上显示,并自动将字符串回发给计算机。
2.程序设计
计算机上的程序使用“串口调试助手”,用来通过串口发送和接收字符串。这个实验中串口传递的是字符的ASC码,一个字符的ASC码正好是8位二进制数,所以一帧信号即可传递一个字符。 单片机程序中的主程序如下:
上一篇:基于单片机利用无字库12864液晶模块自制日历
下一篇:ATMega16内部EEPROM存储器的应用
推荐阅读最新更新时间:2024-03-16 13:09