当前位置: 首页 > news >正文

51单片机使用uart串口和助手简单调试

基础知识

参考
特殊功能寄存器PCON(控制波特率是否加倍SMOD)、TMOD(T0,T1计时器的功能方式)、TCON(T0,T1计时器的控制)、串口中断、SCON(串口数据控制寄存器)
关闭定时器1中断,设置波特率需要占用定时器1
接收数据和发送数据需要使用特殊功能寄存器SBUF作为暂存
其中TI和RI作为数据发送和接收的标志,需要在程序中手动复位
在这里插入图片描述

程序代码

主程序

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;void delay_ms(int ms);void UART_SendByte(unsigned char Byte);void uartSendString(char *pS);void UsartInit()
{SCON=0X50;			//设置为工作方式1      TMOD=0X20;			//设置计数器工作方式2PCON=0X00;			//波特率加倍,最高位控制是否加倍TH1=0XFa;				//计数器初始值设置,注意波特率是4800的TL1=0XFa;ES=1;						//打开接收中断串口EA=1;						//打开总中断TR1=1;					//打开计数器
}void main()
{	UsartInit();  //	串口初始化while(1){delay_ms(1000);uartSendString("masgjlkj\n");}while(1);		
}void UART_SendByte(unsigned char Byte)
{SBUF = Byte;while (!TI);TI = 0;
}void uartSendString(char *pS)
{while (*pS)                      //检测字符串结束标志{UART_SendByte(*pS++);         //发送当前字符}
}
void Usart() interrupt 4
{if (RI == 1)					//如果接收标志位为1,接收到了数据{P2 = ~SBUF;				//读取数据,取反后输出到LEDUART_SendByte(SBUF);	//将受到的数据发回串口RI = 0;					//接收标志位清0}}

延时程序

若想使用准确的时间延时,可以测量实际的时间,

# include <reg52.h>
#include <intrins.h>void delay_ms(int ms){int i,j;for(j=0;j<=ms;j++){for(i=0;i<=1000;i++)  //若使用12mhz的51单片机的1个nop是1us,一个机械周期_nop_();}
}

实际操作中的发送(通过使用串口助手查看)

在延时函数中的循环使用100,才能保证发送数据频率基本是1s一次,测试单片机输出如下
在这里插入图片描述
下面是选择错误的波特率后,虽然显示,但数据没有可读性
在这里插入图片描述

http://www.lryc.cn/news/332364.html

相关文章:

  • Python网络爬虫(五):b站弹幕
  • Docker环境安装Postgresql数据库Posrgresql 15.6
  • 当代软件专业大学生与青年在新质生产力背景下的发展探究
  • MATLAB——知识点备忘
  • C++入门(以c为基础)——学习笔记2
  • 设计模式-单例模式(懒汉式)
  • 算法| ss 回溯
  • 基于R语言绘制-散点小提琴图
  • Arduino开发 esp32cam+opencv人脸识别距离+语音提醒
  • LeNet卷积神经网络
  • Python常用算法思想--回溯算法思想详解【附源码】
  • Day5-Hive的结构和优化、数据文件存储格式
  • 01 计算机网络发展与分类
  • ubuntu安装sublime3并设置中文
  • python调用阿里云短信配置
  • MySQL 8.0.13安装配置教程
  • 【idea快捷键】idea开发java过程中常用的快捷键
  • 2024年腾讯云GPU云服务器配置价格表(内存/系统盘/地域)
  • 重构数据访问层-优化数据访问的开发
  • 云计算概述报告
  • C++:线程库的使用
  • 机器学习模型:决策树笔记
  • 20.2k stars项目搭建私人网盘界面美功能全
  • 卷积篇 | YOLOv8改进之引入全维度动态卷积ODConv | 即插即用
  • Pytorch实用教程:torch.from_numpy(X_train)和torch.from_numpy(X_train).float()的区别
  • 深度学习pytorch好用网站分享
  • C语言 | Leetcode C语言题解之第2题两数相加
  • Oracle基础
  • 从0到1实现RPC | 04 负载均衡和静态注册中心
  • 卷积神经网络-池化层