Microchip PIC系列8位单片机入门教程(3):UART串口的使用

控制/MCU

1878人已加入

描述

01第一节 知识点

1.关键点

(1)增强型通用同步/ 异步收发器(EUSART):增强型通用同步/ 异步收发器(Universal Synchronous Asynchronous Receiver Transmitter,EUSART)模块是两个串行I/O 模块之一。(通常,USART 也被称为串行通信接口或SCI。)可以将EUSART 配置为能与CRT终端和个人计算机等外设通信的全双工异步系统;也可以将它配置成能够和A/D 或D/A 集成电路、串行EEPROM 等外设通信的半双工同步系统。

(2)增强型USART 的引脚与PORTC 复用。为了将RC6/TX/CK 和RC7/RX/DT 配置为USART:
• SPEN (RCSTA<7>)位必须置1 ( = 1)
• TRISC<7>位必须置1 ( = 1)
• TRISC<6>位必须置1 ( = 1)

(3)增强型USART 模块的操作由以下3 个寄存器控制:
• 发送状态和控制寄存器(TXSTA)
• 接收状态和控制寄存器(RCSTA)
• 波特率控制寄存器(BAUDCON)

2.关键寄存器
(1)与发送有关的寄存器
PIC
(2)发送状态与控制寄存器
PIC
(3)接收状态与控制寄存器
PIC
(4)波特率寄存器
PIC
(5)根据时钟和配置选择波特率
PIC
PIC

02程序设计

1.首先我们新建一个.C 文件和一个.h 文件。
(1)usart_dr.h

#ifndef _USART_DR_H_
#define           _USART_DR_H_


#include // include processor files - each processor file is guarded. 


extern void usart_port_dir_init(void);
extern void usart_Config_init(void);
extern void usart_send_byte(unsigned char send_data);
extern void usart_send_string(unsigned char *send_data);
#endif           /*  _USART_DR_H_ */

这几个函数的含义是:
usartportdirinit(void); 端口初始化函数;usartConfiginit(void);UART外设配置函数;
usartsendbyte(unsigned char senddata); 发送一个字节函数;
void usartsendstring(unsigned char *senddata);发送一个字符串的函数。
(2) usartdr.c

#include "usart_dr.h"
#include




void usart_port_dir_init(void)
{  
    TRISCbits.RC6=1;
    TRISCbits.RC7=1;
}


void usart_Config_init(void)
{   //发送状态控制寄存器
    TXSTAbits.TX9=0; //选择八位发送
    TXSTAbits.TXEN=1; //发送使能
    TXSTAbits.SYNC=0; //异步模式
    TXSTAbits.BRGH=1; //高波特率选择位1
    TXSTAbits.TRMT=1; // 发送移位寄存器状态位 0-满,1空
     //接受状态控制寄存器
    RCSTAbits.SPEN=1; //串口使能
    RCSTAbits.RX9=0; //接受8位
    RCSTAbits.SREN=1; //接受使能
    RCSTAbits.CREN=1;//连续接受使能
    RCSTAbits.FERR=0; // 帧错误位
    RCSTAbits.OERR=0; // 溢出错误位
    //波特率控制寄存器
    BAUDCONbits.BRG16=1; //16位波特率寄存器使能位
    BAUDCONbits.RCIDL=1;//接收操作处于空闲状态
    BAUDCONbits.ABDEN=0; //禁止波特率检测

    //波特率生成寄存器115200=Fosc/[64*(n+1)]
    SPBRGH=0;
    SPBRG=86;

}
void usart_send_byte(unsigned char send_data)
{

    TXREG=send_data;
    while(!TRMT);
}
void usart_send_string(unsigned char *send_data)
{
    while(*send_data!='�')
    {
        usart_send_byte(*send_data);
        send_data++;
    }
}

具体的含义有注释,我就不解释了,这儿是基本的发送功能,没有使用中断功能。

(3)main.c

// 略配置字内容
#include
#include "usart_dr.h"
#define _XTAL_FREQ 40000000 //定义时钟为40MHz
int main(void)
{
   usart_port_dir_init();
   usart_Config_init();
    while(1)
    {
        usart_send_string("this is for you!tn");
        __delay_ms(1000);
    }
    return 0;
}

配置字和第一章点灯一样,我没有列出来。
这样基本的函数就实现了,可以测试了。
(4) printf打印输出函数实现细则:

//usart_dr.c 定义putch ,usart_dr.c 申明
/**
* 功能:uart 发送一个字节,printf 函数实现的基础函数
* 参数:无
*/
void putch(char data) {
while( ! TXIF)
continue;
TXREG = data;
}

我们在这儿实现这段代码是主要完成printf函数的使用。这样我们只要包含stdio.h 头文件就可以使用printf函数使用串口当做终端了。
在main函数中测试下。

printf("test for printf functionrtn"); // printf 函数实现成功!
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分