您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC单片机与PC机的串行数据交换 正文
PIC单片机与PC机的串行数据交换

PIC单片机与PC机的串行数据交换

点击数:7313 次   录入时间:03-04 11:57:28   整理:http://www.55dianzi.com   PIC单片机

    一、前言

    美国MICroChip公司的PIC系列单片机是一种新型的CMOS工艺单片机,其中,有许多单片机内部带有异步通讯模块,如PIC16F877等系列芯片。单片机虽然在使用中可等同于一个CPU,但是在许多需要大量计算的运用中,还必须借助微机(PC)的强大数据处理能力,这样就必须通过通信电路实现 PIC单片机与微机间的可靠数据传输。不论PIC单片机内有没有提供串行口,在实现串行通信时都必须通过自己设计硬件电路和编写通信软件来实现,而PIC 单片机要完成较复杂的软件功能时,需利用其内部相关的特殊功能寄存器来实现。下面介绍PIC16F877与微机间进行异步串行通讯的实现方法,同时给出与微机间进行异步串行通讯的硬件接口电路、程序流程框图、单片机内通信程序等。

    二、PIC16877与PC机间进行数据交换的实现

    要实现PIC16F877与PC机间进行数据交换,在编写程序时首先要设置好USART异步通讯模块工作模式及相关寄存器,现分别介绍如下。

    1PIC16F877的USART异步工作设置简介

    PIC16F877的USART与其他具有USART的PIC单片机一样,可以被设置成为与PC机进行全双工异步通讯,它是一种利用PORTC口的 RC6和RC7两个引脚作为通讯的2线制串行通讯接口。为了把PORTC口的RC6和RC7两个引脚分别设置成串行通讯接口的发送(TX)脚和接收(RX)脚,必须要把USART的接收状态和控制寄存器RCSTA的bit7(SPEN)位和TRISC寄存器的bit7置“1”,把TRISC寄存器的 bit6置“0”。为了使USART分别工作于接收或发送状态,就必须设置相应的状态寄存器和控制寄存器。在设置接收器时,要注意接收脚对接收信号的采样。接收脚RX上的数据被采样3次,通过一个三中取二逻辑检测电路来判断RX脚上的电平是高还是低,以作为采样取值。另外,要使USART工作在异步通讯方式,就必须要设置通讯的传送、接收速率即波特率,USART的波特率设置是通过控制独立的一个8位波特率发生器BRG实现的。

    在异步工作方式下,串行通讯接口USART 采用标准的不归0(NRZ)格式(即1位起始位、8位或9位数据位及1位停止位),最常用的数据格式是8位。PIC16F877片内的8位波特率发生器 BRG可以用来驱动振荡器的时钟,产生标准的波特率频率。PIC16F877的USART发送和接收顺序是从最低位(LSB)开始。USART发送器和接收器在功能上是完全独立的,但是它们所用的数据格式和波特率必须是相同的。波特率发生器可以根据发送状态和控制寄存器TXSTA的bit2(BRGH)位设置产生2种不同的移位速度:对系统时钟16分频和64分频的波特率时钟,即设置该位在异步通讯模式为1时表示通讯为高速,为0时表示通讯为低速。要使 USART工作于异步通讯模式,可通过对发送状态和控制寄存器TXSTA的bit4(SYNC)位设置清“0”。

    由上简述可知:PIC16F877 的USART异步工作设置主要包括对以下部件的设置:波特率发生器BRG、采样电路、异步发送器、异步接收器等。但PIC16F877的USART异步工作有2点需要说明:一是USART硬件不支持奇偶效验,但可以用软件实现(并可作为第9位数据传输);二是在CPU处于休眠工作方式时,USART不能工作在异步通讯方式。

    2USART波特率发生器BRG设置

    在异步通讯方式下,波特率发生器BRG 需要设置一个初值,以使BRG输出一个合适的波特率。在BRG设置时,其工作在高速还是低速是由发送状态寄存器和控制寄存器TXSTA的 bit2(BRCH)位进行设置的。在PIC16F877内部时钟工作模式下,设置BRG波特率寄存器SPBRG在低速和高速初值的计算公式如下:
  BRGH=0(低速)
  异步波特率=FOSC/(64(X+1))
  BRGH=1(高速)
  波特率=FOSC/(16(X+1))
  其中,X为SPBRG寄存器的值(0~255)。

    实际应用中,上式用于高速方式(BRGH=1)下计算波特率可以减小误差。另外,在向波特率寄存器SPBRG写入一个新值时会使BRG定时器复位(清零),由此就可保证波特率发生器BRG不需要等到定时器溢出后就可输出新的波特率。

    3USART异步通讯的寄存器设置

    实现USART异步通讯的寄存器主要有:发送状态寄存器和控制寄存器TXSTA、接收状态和控制寄存器RCSTA、波特率发生器存器SPBRG、发送数据寄存器TXREG、接收数据寄存器RCREG、外围接口中断使能寄存器PIE1和外围接口标志寄存器PIR1等。

    (1) 发送状态和控制寄存器TXSTA

    25.gif

      bit7  CSRC:异步方式未用;
  bit6  TX9:发送数据长度选择位。1=选择9位数据;0=选择8位数据;
  bit5  TXEN:发送允许位。1=允许发送;0=关闭发送;
  bit4  SYNC:USART同步/异步方式选择位。1=选择同步方式;0=选择异步方式;
  bit3  此位未用;
  bit2  BRGH:高速波特率使能位。1=高速;0=低速;
  bit1  TRMT:发送移位寄存器(TSR)“空”标志位。1=TSR空;0=TSR满;
  bit0  TX9D:发送数据的第9位。

    (2)接收状态和控制寄存器RCSTA

    26.gif

      bit6  RX9:接收数据长度选择位。1=选择接收9位数据;0=选择接收8位数据;
  bit5  SREN:单字节接收允许位。异步方式此位未用;
  Bit4  CREN:连续接收选择位。1=允许连续接收;0=禁止连续接收;
  bit3  ADDEN:地址匹配检测使能位。
    1=允许地址匹配检测,允许中断并且当RSR的D8被置1时读接收缓冲器数据;
  0=禁止地址匹配检测,接收所有字节,第9位被看作奇偶效验位;
  bit2  FERR:帧格式错标志位。
  1=帧格式错(读RCREG寄存器可对该位刷新并且准备接收下一个有效位);
  0=无帧格式错;
  bit1  OERR:越位溢出错标志位。
  1=有溢出错,清CREN位可将此位清零;0=无溢出错;
  bit0  RX9D:接收数据的第9位,可作奇偶效验位。

    (3) 外围接口中断使能寄存器PIE1 

    27.gif
   
    bit5  RCIE:串行异步通讯接口接收中断使能位。
      1=允许USART接收中断;0=禁止USART接收中断;
      bit4  TXIE:串行异步通讯接口发送中断使能位。
      1=允许USART发送中断;0=禁止USART发送中断。
  其余位在异步通讯中未用。

    (4)外围接口中断标志寄存器PIR1

    28.gif

          bit5  RCIF:异步串行通讯(USART)接口接收中断标志位;
      1= USART接收缓冲区满;0= USART接收缓冲区空;
      bit4  TXIF:异步串行通讯(USART)接口发送中断标志位;
      1= USART发送缓冲区空;0= USART发送缓冲区满。
  其余位在异步通讯中未用。

    (5) 其他寄存器

    波特率发生器存器SPBRG的设置请参考USRTA波特率发生器BRG的设置内容,在设置该寄存器就是根据单片机工作时钟频率确定传输数据的波特率,只要将其初值写入SPBRG寄存器即可。

    发送数据寄存器TXREG是将单片机需要发送的数据存放的寄存器,在单片机未发送之前就必须要将备发送的数据装入该寄存器。接收数据寄存器RCREG是将单片机接收到外界数据后存放数据的寄存器,在单片机确定接收的数据无误后,将其数据存放到该寄存器中。

    29.gif

   



www.55dianzi.com

    4PIC16F877单片机与PC机实现电平转换

    PC机的串行接口是符合EIA RS-232C规范的外部总线标准接口。RS-232C采用的是负逻辑,即逻辑"1":-5~-15 V;逻辑"0":+5~+15 V。而CMOS电平为:逻辑“1”:4.99 V,逻辑“0”:0.01 V;TTL电平的逻辑“1”和“0”则分别为2.4 V和0.4 V。因此在用RS-232C总线进行串行通信时需外接电路实现电平转换。在发送端用驱动器将TTL或CMOS电平转换为RS-232C电平,在接收端用接收器将RS-232C电平再转换为TTL或CMOS电平。这里选用了MAXIM公司的MAX232来作电平转换。MAX232属于MAXIM公司的通用串行接收/发送驱动器芯片。其外围电路简单,只需外接4个0.1 μF的电容即可,其系统硬件电路如图1所示。图中MAX232将PIC16F877的TX输出的TTL电平信号转换为RS-232C电平,输入到PC机,并将PC机输出的RS-232C电平转换为TTL电平,输出到PIC16F877单片机的RX引脚。

[1] [2]  下一页


本文关键字:单片机  PIC单片机单片机-工控设备 - PIC单片机