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)位必须置1 ( = 1)
• trisc位必须置1 ( = 1)
• trisc位必须置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#includevoid 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 //定义时钟为40mhzint 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 函数实现成功!
利晶全球首个Micro LED量产基地正式投产
浅析2017款MacBook Pro详细评测
电压比较器LM339构成的多功能光控开关电路
pwm调光程序,基于51单片机pwm调速调光程序
苹果 iPad mini 6 配置流出: LCD 视网膜屏、USB-C 接口、A14 处理器
Microchip PIC系列8位单片机入门教程(3):UART串口的使用
德国为什么从信息物理系统转向数字孪生体?
开关电源的整流桥并联,浮地驱动等十条基本电路原理图分析
苹果手机飞行模式到底有什么用 四大用途需要知道
示波器和探头带宽选择的重要性
电磁流量计在钢厂工业水计量中的应用
修复电池的方法,靠脉冲就可以吗
锂动力电池的介绍
什么是超导体
贴片电容的电压要怎么选择?
工业4.0渐成熟 业者要根据ERP系统的数据来采取行动
使用2AA电池和单个集成电源为数码相机供电
什么是热备份_热备份和冷备份的区别
日本信浓直流无刷电机怎么样 集高效与实用于一身
基于单片机的应用于视频监控的矩阵切换器设计