控制/MCU
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)与发送有关的寄存器
(2)发送状态与控制寄存器
(3)接收状态与控制寄存器
(4)波特率寄存器
(5)根据时钟和配置选择波特率
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 函数实现成功!
全部0条评论
快来发表一下你的评论吧 !