新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机的异步串行通信功能和基本使用方法

单片机的异步串行通信功能和基本使用方法

作者:时间:2012-10-09来源:网络收藏

  的数据通信有两种方式:并行通信和串行通信。并行通信指数据字节的各位同时发送或接收;而串行通信是数据字长距离传输数据节一位一位按顺序发送或接收。并行通信传输线多,适用于短距离、快速度的通信;面串行通信仅需单线传输信息,适用于长距离传输数据,由于每次传送一位,所以传输速度比较慢。串行通信又分异步和同步两种方式,其中是最常用的方式。本文主要通过两个实例介绍功能和基本使用方法。

  一、串行通信基本知识

  带有一个全双工的同步/异步串行收发模块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位结合在一起可以设置数据帧包含的数据位数(字符长度)具体设置见下表。

UCSZ2UCSZ1 UCSZ0 字符长度
0005位
0016位
O107位
0118位
1119位

  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为单片机系统时钟频率。

  二、串口的应用实验

  本文通过两个实验来介绍串口的应用,两个实验都是计算机和单片机串口通信的实例。

  实验一PC控制电源开关

  1.实验电路

  实验板上与本实验相关的电路见下图,这个实验是通过计算机对实验板上继电器K1、K2进行控制,即通过计算机用串行通信控制.的(PD6、PD7)脚的输出状态。

  2.程序设计

  本实验的程序由上位机(计算机)程序和下位机(单片机)程序两部分组成。串口通信采用8位数据位,1位停止位,无校验位。波特率为9600。

  上位机程序是安装在计算机上的串口应用程序,主要作用是向RS-232C端口发送控制信号、接收和处理返回信号。上位机程序由笔者用VB语言编写,在编写和使用时均要使用MSComm通信控件。软件的界面如下图所示,当用鼠标单击某一开关按钮时,其上面的圆形指示灯状态就会发生变化,红色表示电源打开,黑色表示电源关闭,对应单片机控制的继电器也会发生相应的变化。程序界面上的串口指示灯作串口工作状态指示,串口通信正常时状态为绿色,反之为黑色。软件还可以对使用的串口进行选择。

下位机程序如下:

  #includeiom8V.h>
  unsigned char temp:
  void mein(void)
  {
  DDRD=0xff;//设置D口为推
  挽1输出
  PORTD=0x00;
  OSCCAL=0xaa://校正内部RC
  振荡器频率,不同的芯片参数有差异
  UCSRB=0x18;//RXD、TXD4使能
  UBRR=51;//9600bit/s,8.0M
  UCSRC=0x86;//8位数据,1
  位停止位.无校验
  while(1)
  {
  while(!(UCSRA0x80));
  等待接受完整
  temp=UDR;//接收数据
  PORTD=temp;//将数据输
  出至D口
  while(!(UCSRA0x20));
  //等待移位寄存器空
  UDR=temp;//发送数据,
  让上位机检验串口是否工作
  }
  }

数字通信相关文章:数字通信原理


通信相关文章:通信原理



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭