1、先摆上我所使用的C51单片机开发板的原理图
c51串口的硬件电路
单片机的最小系统
假如说电路板上没有CH340芯片,我们就要使用TTL转USB模块来进行电平的转换,然后将模块的RX接单片机的TX,模块的TX接单片机的RX,来进行接线连接。
在连接好连线后,我们打开计算机管理,来查看端口是否存在,如果没有,我们需要下载CH340驱动,驱动的链接在下面
https://download.csdn.net/download/qq_27699199/87017256
安装后就可以识别了;;;;常见的失败的原因,需要检查自己的usb线是否带数据传送的功能,有些时候我们使用的usb线只有电源充电的功能,而没有通信的功能!!!!血的教训
以上是我们的前期的硬件和软件准备
2、keil软件的讲解
我将关于串口的程序放在了uart.c文件中了
该C文件中的uart初始化函数
/*******************************************************************************
* 函 数 名 : uart_init
* 函数功能 : 串口通信中断配置函数,通过设置TH和TL即可确定定时时间
* 输 入 : baud:波特率对应的TH、TL装载值
* 输 出 : 无
*******************************************************************************/
void uart_init(u8 baud)
{
SCON=0X50; //设置为工作方式1
TMOD|=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=RELOAD_COUNT; //计数器初始值设置
TL1=TH1;
ES=1; //关闭接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
TI=1; //发送中断标记位,如果使用printf函数的必须设置
}
下面是芯片手册中对于 串行口控制寄存器SCON 和 电源控制寄存器PCON寄存器的介绍,这里使用 |= 是为了不改变除了我们设置的位之外的其他的数据位,我们代码实际上是设置了8位UART波特率可变。
---------------------------------------------------------------------------------------分割线--------------------------
通过设置TH1和TL1的值来设置串口的波特率,TH1和TL1填一样的值
文章来源:https://www.toymoban.com/news/detail-434840.html
设置定时器1的计数值,按下表的预先值设置
3、printf的重定向
直接上代码:
注意,printf的重写需要增加#include <stdio.h>的头文件
写发送一个字节函数
//串口发送一个字节数据
void UART_Send(unsigned char Byte)
{
SBUF=Byte;
while(TI==0); //TI:串口1发送完成中断请求标志。需要软件清零。
TI=0;
}
puchar重写文章来源地址https://www.toymoban.com/news/detail-434840.html
//重定向printf
char putchar(char c)
{
UART_Send(c);
//TX1_write2buff(c);
return c;
}
之后就可以使用printf来使用串口了
printf具体的打印格式为
数据类型 | 打印格式 |
u8 | %d |
s8 | %d |
u16 | %d or %hu |
s16 | %d or %hd |
u32 | %u |
s32 | %d |
u64 | %llu |
s64 | %lld |
int | %d |
unsigned int | %u |
short int | %d or %hd |
long | %ld |
unsigned long | %lu |
long long | %lld |
unsigned long long | %llu |
char | %c |
char * | %s |
bool (#define stdbool.h) | %d |
unsigned int/int------>十六进制 | %0x |
unsigned long/long---->十六进制 | %0lx |
long long/unsigned long long ----->十六进制 | %0llx |
unsigned int/int------>八进制 | %0o |
unsigned long/long---->八进制 | %0lo |
long long/unsigned long long ----->八进制 | %0llo |
float | %f |
double | %f or %lf |
科学技术类型(必须转化为double类型) | %e |
限制输出字段宽度 | %x.yf (x:整数长度,y:小数点长度) |
到了这里,关于C51单片机串口发送数据的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!