PIC单片机之EUSART串行通信接口

发布者:ching80790最新更新时间:2016-11-07 来源: eefocus关键字:PIC单片机  EUSART  串行通信接口 手机看文章 扫描二维码
随时随地手机看文章
PIC 单片机的EUSART是一种串行通信接口,我们可以利用他让不同设备之间传输数据,我们来讲讲我们最常用的串行异步接收和发送。

管脚

  串行异步接收和发送。如果只要两个引脚,一个是接收RX 一个是发送TX。

数据格式

   我们先来讲讲TX是如何发送出数据的,数据格式具体是什么样的。

  

    

     如果我们要向其他设备发送个大写字母A。将是什么样的呢。"A"这个字母对应的ASCII码是65,对应的八位二进制数则是 01000100。TX就将对应的二进制码发送出去。

     发送时用高电平来代表1,用低电平代表0. 那不发送数据的时候管脚就一直为高电平。

启动位和停止位

      怎么区分现在是在发送数据还是在常态呢?所以在每次发送一个字节的数据之前TX脚都会先输出一小段的低电平。来告诉对方,我要发送数据了这一小段低电平便是启动位(起始位)。

    如果我们发送的不仅仅只有一个字节,而是好几个字节,两个数据之间总要有个间隔吧!要不然分不清谁跟谁。所以每发送完一个字节的数据,TX脚就会输出一小段的高电平这便是停止位。

  波特率

      在数据发送中每个位的时间都要事先定好,而且发送和接收的双方都必须事先知道并设置好。那这个时间是怎么确定的呢?这就牵扯的一个东西波特率。在这里波特率=比特率。比特率也就是 一秒钟发送多少位的数据。如果要一秒钟发送为9600个位,我们将波特率设置为9600。1/9600约等于0.0001s 也就是每个位的发送时间。

 

小端发送

    如果 发送大写字母“ A ”也就是发送二进制数 “01000100”,串行通信是从低位开始发送。

下图为字母”A”数据发送的时序图.

实例:我们可以利用PC机的串口和单片机进行异步串行通信,单片机接收到什么样的数据,就在给PC机发送数据,波特率为115200。不过单片机输出的TTL信号,需TTL转232.PC机才能接收。有关这方面的硬件设计网上很多故不赘述。

在官方的数据手册有对应配置步骤,不过我将根据我的实例来讲解其实也是大同小异。

1,配置端口

   1.1配置备用功能

      我们可以看单片机的引脚图,第13和第6脚都标有TX说明这两个引脚是可以作为EUSART数据输出。第12和第5脚都标有RX说明这两个引脚是都可以作为EUSART数据输入的。但是同时只有一个引脚作为RX或者TX。不可以同时有两个RX或TX。RX与TX的选择是通过APFCON。我们这里选择13脚作为TX,选择12脚作为RX.配置如下:

       APFCONbits.TXCKSEL = 1;//RA0

       APFCONbits.RXDTSEL = 1;//RA1

       

 

   1.2将RX脚配置位数字输入。

      我们可以看第12脚上标有AN1,说明该引脚还带有模拟输入的功能。所以我们必须将其设置为数字输入。配置如下:

      TRISA1 = 1;//RA1 RX input

      ANSELAbits.ANSA1=0;

 2 配置波特率 

      如何设置波特率为115200呢,这里我们必须先要知道计算公式。在官方的数据手册中有给我们提供表格。到底选择那个公式由SYNC,BRG16,BRGH这三个位的配置决定。

我们选在异步通信模式故SYNC为0;

波特率发生器位,可以选择8位或者16位。不过选择16位。波特率的精度会更高。所以选择16位。BRG16为1.

我们这里选择高速的波特率BRGH为1;

配置如下:

    TXSTAbits.BRGH   =1; //high speed

    BAUDCONbits.BRG16  =1; //16bit Baud rate Generator is used

TXSTAbits.SYNC   =0; //Asynchronous mode

 

   我们可以得出我们的计算公式为 波特率=FOSC/[4(n+1)];

我们的波特率为115200,时钟定为32MHz。计算出n的值。

115200=32MHz/[4(n+1)];可以得到n=68.444 即n=0x44;

将0x44存入到SPBRGH和SPBRGL中,配置如下

 SPBRGH = 0x00;//

 SPBRGL = 0x44;// Baud rate 115200

3,配置接收中断

   实际可以根据自己的需求配置是否用中断接收。不过这里设置为中断接收,配置如下。

    PIE1bits.RCIE = 1; //enables the USART Receive interrupt

    INTCONbits.PEIE = 1;

INTCONbits.GIE  = 1;

4,开启串口的功能

    开启接收,开启发送,开启串口功能,配置如下:

    RCSTAbits.CREN = 1;//Enables receiver

    TXSTAbits.TXEN = 1;//Transmit enabled

RCSTAbits.SPEN   =1; //serial port enable

实例代码:单片机型PIC16LF1823,开发环境MPLAB X IDE.

#include

 

__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON

                   &CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//这个要放到上一行去

__CONFIG(PLLEN_OFF&LVP_OFF) ;

unsigned char RC_DATA;

unsigned char RC_FLAG;

void init_fosc(void)

{

 OSCCON = 0xF0;//32MHz

}

void init_eusart()

{

    APFCONbits.TXCKSEL = 1;//RA0

    APFCONbits.RXDTSEL = 1;//RA1

    TRISA1 = 1;//RA1 RX input

    ANSELAbits.ANSA1=0;

 

    SPBRGH = 0x00;//

    SPBRGL = 0x44;// Baud rate 115200

 

    TXSTAbits.BRGH   =1; //high speed

    BAUDCONbits.BRG16  =1; //16bit Baud rate Generator is used

    TXSTAbits.SYNC   =0; //Asynchronous mode

 

    PIE1bits.RCIE = 1; //enables the USART Receive interrupt

    INTCONbits.PEIE = 1;

    INTCONbits.GIE  = 1;

 

    RCSTAbits.CREN = 1;//Enables receiver

    TXSTAbits.TXEN = 1;//Transmit enabled

    RCSTAbits.SPEN   =1; //serial port enable

 

}

void tx_eusart(unsigned char tx_data)

{

    TXREG = tx_data;

    while(TRMT==0);// loop

 

}

void interrupt isr(void)

{

     if (RCIE && RCIF) {

        RC_DATA=RCREG;

        RC_FLAG=1;

        LATA2 = 1;

    }

 

}

 

/*

 * 

 */

int main(int argc, char** argv) {

 

    init_fosc();

    init_eusart();

    RC_FLAG=0;

    TRISA2 = 0;

    LATA2 = 0;

    while(1)

    {

      if(RC_FLAG > 0)

       {

        tx_eusart(RC_DATA);

        RC_FLAG=0;

        LATA2=0;

       }

 

    }

}

【转】PIC单片机之EUSART串行通信接口 - 月光照耀太阳 - 月光传送者

 【转】PIC单片机之EUSART串行通信接口 - 月光照耀太阳 - 月光传送者

注意异步通信的back-to-back与单字节操作时的区别。

【转】PIC单片机之EUSART串行通信接口 - 月光照耀太阳 - 月光传送者

 图示是3个字节内容在RX上面的,需要注意,使用上面程序无法完成操作。

关键字:PIC单片机  EUSART  串行通信接口 引用地址:PIC单片机之EUSART串行通信接口

上一篇:基于PIC32的RFID防盗系统设计
下一篇:PIC 单片机之AD转换

推荐阅读最新更新时间:2024-03-16 15:19

pic单片机多路ad切换程序与循环程序设计
pic单片机是最重要的单片机种类之一,对于pic单片机,小编曾带来诸多介绍,如pic单片机的优势、pic单片机选型等。而在本文中,小编将为大家介绍两种pic单片机程序:一是pic单片机多路ad切换程序,二是pic单片机循环程序。如果你对这两类程序存在一定兴趣,不妨继续往下阅读。 一、pic单片机简介 pic单片机(Peripheral Interface Controller)是一种用来开发和控制外围设备的集成电路(IC)。一种具有分散作用(多任务)功能的CPU。与人类相比,大脑就是CPU,PIC 共享的部分相当于人的神经系统。PIC 单片机是一个小的计算机。PIC单片机有计算功能和记忆内存像CPU并由软件控制运行。然而,处理
[单片机]
<font color='red'>pic单片机</font>多路ad切换程序与循环程序设计
pic单片机定时器/计数器模块
前言 在单片机中,对于广大初学者来说,定时器、计数器此章节不仅应用广泛,而且还是单片机入门的敲门砖。在此,笔者就以此章节为重点,对定时器/计数器学习做出基本介绍。 -------------------------------------------------------------------------------------------------** 提示:以下是本篇文章正文内容,下面案例仅供参考 定时器/计数器模块的基本用途 如今,在许多世界著名的半导体制造公司开发型号繁多的单片机芯片内部,定时器/计时器模块是一种基本上普遍配置的常用外围设备模块,区别仅在于:配备的数量和规格不同(如:规格是否附带预分频器和
[单片机]
PIC单片机内部EEPROM读写程序
#INCLUDE P16F877.inc W_TEMP EQU 20H ; 实际上20H、A0H、120H和1A0H STATUS_TEMP EQU 21H ;在体0中建立保护单元 PCLATH_TEMP EQU 22H ;在体0中建立保护单元 ORG 000H GOTO A1 ORG 004H;定时中断入口地址 GOTO ZD01; ORG 0CH Q1 ADDWF PCL,1 RETLW 00C0H ;0 RETLW 00F9H ;1 RETLW 00A4H ;2 RETLW 00B0H ;3 RETLW
[单片机]
PIC单片机编程 (点灯程序)
IO口控制 方向寄存器 TRISA~TRISAE 比如 TRISB=0x00; // 1为输入,0为输出,这样就把portB端口全部设为输出 数据寄存器 PORTA~PORTE 比如 PORTB=0x01; // 1为置高,0为置低,这样就把portB1口置高,其它portB口置低 例:点灯程序 #include pic.h __CONFIG (0x3B31);// pic单片机需要进行寄存器配置,详见手册 void main() { TRISD=0xfe; // 把RD1端口设为输出 PORTD=0x01; // 把RD1端口置高 //RD1=1;
[单片机]
PIC单片机之中断程序
什么是中断程序呢? 形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。 中断事件 什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。 讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如
[单片机]
详解PIC单片机的应用设计技巧
  美国微芯公司(Microch{p Technology Inc.)开发的CM0S工艺PIC系列8位单片机(RISC微控制器),特别是采用内置第二代Flash存储器(40年存储寿命)的微控制器在快速应用方面具有独到之处。由于其易用性和高可靠性,该系列微控制器稳居8位单片机全球出货量之首。PIC系列单片机具有指令集简洁、简单易学、速度高、功能强、功耗低、价格低廉、体积小巧、适用性好及抗干扰能力强等特点,大量应用于汽车电气控制、电机控制、工业控制仪表和仪表、通信、家电、玩具、低功耗的测控应用等领域,在国内越来越受到广大设计者的欢迎,微芯公司的单片机已经成为目前单片机世界的主流产品。   PIC 8位单片机内已经包含运算器、存储器、
[单片机]
详解<font color='red'>PIC单片机</font>的应用设计技巧
基于PIC单片机的数字可调稳压电源(1.3-25v)PROTEUS仿真+源程序
程序如下: list p=12c672 ; list directive to define processor #include p12c672.inc ; processor specific variable definitions w_temp EQU 0x70 status_temp EQU 0x71 pclath_temp EQU 0x72 reg0 EQU 0x75 reg1 EQU 0x76 advalue EQU 0x77 advflag EQU 0x78 bank
[单片机]
基于<font color='red'>PIC单片机</font>的数字可调稳压电源(1.3-25v)PROTEUS仿真+源程序
基于PIC单片机的智能低电阻测量仪
引言  低电阻测凰仪按其测试电流的大小可分为两类:一类测试电流较大,主要用于接插件、开关、导体等产品的直流低电阻的测量,另-类测试电流很小(一般为1mA左右),用于电雷管、点火具或其他危险易爆场合的接插件、开关等元器件的直流低电阻的测量。该种测量仪对安全性能要求很高,必须增加多种保护电路。在PCB吸设计布线时也要考虑安全性和可靠性。89年至今,我们不断改进完善电路设计,设计生产了四个型号的低电阻测量仪,这里介绍的是最新的DZC-4型智能旺电阻测量仪。  一、 总体方案和技术指标  仪器可分为五个部分:电源供应、精密恒流源、精密电压放大器、A/D转换器、单片机控制器。见图l主要技术指标:    1、测试范围:0~20
[单片机]
基于<font color='red'>PIC单片机</font>的智能低电阻测量仪
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved