proteus仿真uart串口实验

news2025/2/13 21:41:14

    串口通信在单片机开发中是一种很常见的通信方式,一般所说的串口是对应rs232标准,对应有gnd,vcc,rx,tx四根数据线。其中rx,tx分别是接收、发送端口,而在实际接线中,我们需要注意,rx接另一端tx,tx接另一端的rx。在51单片机中,rx对应P3.0端口,tx对应P3.1端口。    

    串口终端在proteus中,是在Virtual Instruments Mode的VIRTUAL TERMINAL。 

    要仿真串口通信,我们需要了解串口内部结构,这里给出单片机手册中关于串口内部逻辑使用到的寄存器列表:

    我们要重点关注的是如下四个寄存器:

    SCON:串口控制寄存器

    PCON:电源控制寄存器

    SBUF:缓存数据寄存器 

    IE:串口中断寄存器

    一般,串口工作模式有如下四种方式:

    0)同步移位寄存器

    1)8位UART,波特率可变

    2)9位UART,波特率固定

    3)9位UART,波特率可变

    在串口实验中,主要使用工作模式1)8位UART,波特率可变。这种工作模式具体内容如下所示:

  我们的串口工作模式,主要由SCON这个寄存器变量来设置。 而SCON寄存器描述如下:

    这里也引出了关于SCON值得的设置,和设置之后波特率的计算方法,这里波特率的计算关系到定时器1的溢出率,这个溢出率又和6T(SMOD=1)/12T(SMOD=0)的工作模式有关,我们看如下所示的串口工作内部结构:

    综合以上描述,波特率的计算就是 baud_rate =  \frac{2^{SMOD}}{32} * \frac{ SYSclk}{12 * (256 - TH1)}

    SYSclk是系统时钟,也就是晶振的频率,如果晶振是12M,这里就是12 * 10^6

    这个晶振的频率和波特率的大小,以及TH1的初始值,关系到后面仿真的时候,在visual terminal中是否会乱码和不显示内容。因为如果存在误差,那么最后收到的数据就会错位,在显示的时候,就会乱码或者不显示。

    一般,我们晶振大概是12M,但是实际上,可能会设置为11.0592M,这样,我们在设置了TH1初始值为0xFD=253之后,那么这个时候波特率根据上面的计算公式,可以得出,正好是9600。

    

    如下所示的代码,是一个使用proteus仿真51单片机结合visual terminal串口终端显示单片机发送的字符串aaa并显示的程序。

#include <reg51.h> 
        
void uart_init(void);
void uart_send_byte(unsigned char c);
void delay(void);
void uart_send_string(unsigned char *str);

void main(void)
{
  uart_init();                
  while(1)
  {
    uart_send_string("aaa\r\n");
    delay();                     
  }
}

void uart_init(void)
{
 SCON=0x50;      
 PCON=0x00;      
 TMOD=0x20;   
 TH1=TL1=0xFD; 
 TR1=1;          
 ES=1;          
 EA=1;          
}

void uart_send_data(unsigned char c) 
{
 SBUF=c;                
 while(!TI);  
 TI=0;          
}

void uart_send_string(unsigned char *str)
{
  while (*str)
  {
	uart_send_data(*str++);                   
  }
}

void delay(void)
{
 unsigned char a,b;
 for(a=0;a<100;a++)
  for(b=0;b<100;b++);
} 

    这段代码最麻烦的在于uart_init()串口初始化部分,这里的值,可以通过我们的单片机下载程序stc-isp工具来生成:

    如上图所示,这里是根据波特率9600,系统时钟频率11.0592M,以及uart数据位 8位,波特率发生器 定时器1(8位自动重载)生成的代码,我们实际中没有使用PCON,所以代码里面设置的是0x00。 

    仿真效果如下所示:

在进行仿真的时候,可能不会出现terminal显示框, 可以在菜单栏debug->virtual terminal来让它显示:

    如果visual terminal显示的是乱码,我们就需要根据实际情况修改单片机时钟频率,双击单片机,在弹出框中设置合适的频率,这个频率也不是随便设置的,而是根据代码中TH1以及波特率的值来设置,计算公式在前面已经给出过,如下所示:

    其实整个串口通信代码很简单,但是需要理解初始化中的代码,我们需要了解它的内部结构,以及工作原理。 关于串口通信,在实际中,我们需要关注波特率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/863872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

buildroot使用介绍

buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样&#xff0c;通过buildroot配置&#xff0c;menuconfig修改&#xff0c;编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包…

恒盛策略:创业板交易规则?

创业板是指中国证监会于2009年11月创立的一种股票商场&#xff0c;是为了鼓励和支撑中小企业发展所建立的。相比于主板&#xff0c;创业板的公司一般融资规模较小&#xff0c;危险较高&#xff0c;但也具有高成长性和出资价值。而创业板买卖规则&#xff0c;则是指这个商场内的…

智谷星图赵俊:让人才和区块链产业“双向奔赴”丨对话MVP

区块链产业需要什么样的人才&#xff1f;赵俊很有发言权。 赵俊是北京智谷星图科技有限公司的技术总监&#xff0c;也是FISCO BCOS官方认证讲师。他2017年接触区块链&#xff0c;随后选择人才培育领域深耕。“为区块链行业引进更多人才这件事很有价值&#xff0c;跟我的职业理…

数据结构初阶--二叉树的链式结构

目录 一.二叉树链式结构的概念 二.二叉树链式结构的功能实现 2.1.链式二叉树的定义 2.2.链式二叉树的构建 2.3.链式二叉树的遍历 2.3.1.先序遍历 2.3.2.中序遍历 2.3.3.后序遍历 2.3.4.层序遍历 2.4.链式二叉树的求二叉树的结点数量 法一&#xff1a;计数法 法二&a…

[保研/考研机试] KY135 又一版 A+B 浙江大学复试上机题 C++实现

题目链接&#xff1a; KY135 又一版 AB https://www.nowcoder.com/share/jump/437195121691736185698 描述 输入两个不超过整型定义的非负10进制整数A和B(<231-1)&#xff0c;输出AB的m (1 < m <10)进制数。 输入描述&#xff1a; 输入格式&#xff1a;测试输入包…

鸿蒙开发学习笔记1——真机运行hello world

问题背景 学习任何语言和框架的第一步&#xff0c;永远都是跑通熟悉的“hello world”&#xff0c;本文将介绍鸿蒙开发如何跑通“hello world”。 问题分析 一、构建第一个ArkTS应用&#xff08;fa模型&#xff09; 说明&#xff1a;请使用DevEco Studio V3.0.0.601 Beta1及…

安装Tomac服务器——安装步骤以及易出现问题的解决方法

文章目录 前言 一、下载Tomcat及解压 1、选择下载版本&#xff08;本文选择tomcat 8版本为例&#xff09; 2、解压安装包 二、配置环境 1、在电脑搜索栏里面搜索环境变量即可 2、点击高级系统设置->环境变量->新建系统变量 1) 新建系统变量&#xff0c;变量名为…

c#在设计时调试自定义 Windows 窗体控件

private string demoStringValue null; [Browsable(true)] public string DemoString {get{return this.demoStringValue;}set{demoStringValue value;} } 参考链接 在设计时调试自定义控件 - Windows Forms .NET Framework | Microsoft Learnhttps://learn.microsoft.com/z…

PACS系统选型及组成

PACS系统软件选型 目前PACS系统的软件架构选型上看&#xff0c;主要有C/S和B/S两种形式。 C/S架构&#xff0c;即Client /Server&#xff08;客户机/服务器&#xff09;架构&#xff0c;将运算任务合理分配到客户机端和服务器端&#xff0c;降低了整个系统的通信开销&#xf…

数据结构刷题训练:队列实现栈

目录 前言 1. 题目&#xff1a;使用队列实现栈 2. 思路 3. 分析 3.1 创建栈 3.2入栈 3.3 出栈 3.4 栈顶数据 3.5 判空和 “ 栈 ” 的销毁 4. 题解 总结 前言 我们已经学习了栈和队列&#xff0c;也都实现了它们各自的底层接口&#xff0c;那么接下我们就要开始栈和队列的专项刷…

在SPSS中实现数据转置

在使用SPSS开展数据分析的过程中&#xff0c;有时候不可避免需要对数据进行转置处理。 例如Kendall协同系数检验和组内相关系数&#xff08;ICC&#xff09;检验这两种方法都可以检验定量数据的一致性程度&#xff0c;但是这两种方法对数据的要求不同。 组内相关系数&#xf…

ArcGIS Pro 基础安装与配置介绍

ArcGIS Pro ArcGIS Pro作为ESRI面向新时代的GIS产品&#xff0c;它在原有的ArcGIS平台上继承了传统桌面软件&#xff08;ArcMap&#xff09;的强大的数据管理、制图、空间分析等能力&#xff0c;还具有其独有的特色功能&#xff0c;例如二三维融合、大数据、矢量切片制作及发布…

Blazor 简单组件(2):B_row/B_col 12分隔布局 简单开发

文章目录 前言12分隔布局开发B_col.razorB_col.razor.cssB_row.razorB_row.razor.css 使用案例 前言 Blazor 简单组件(0)&#xff1a;简单介绍 12分隔布局开发 B_col.razor if (Offset ! "0") {<div style" grid-column-start: span (Offset)">&l…

solr迁移到另一个solr中(docker单机)

背景介绍 solr数据迁移&#xff0c;或者版本升级&#xff0c;需要用到迁移&#xff0c;此处记录一下迁移方法以及过程中遇到的问题。我这边使用的是docker环境&#xff0c;非docker部署的应该也是一样的。 solr部署教程 准备工作 ● solrA 版本&#xff1a; 8.11.2 (已有so…

数据分析两件套ClickHouse+Metabase(一)

ClickHouse篇 安装ClickHouse ClickHouse有中文文档, 安装简单 -> 文档 官方提供了四种包的安装方式, deb/rpm/tgz/docker, 自行选择适合自己操作系统的安装方式 这里我们选deb的方式, 其他方式看文档 sudo apt-get install -y apt-transport-https ca-certificates dirm…

三款快速删除未使用CSS代码的工具

针对历史项目或项目中有引入CSS框架&#xff08;如Bootstrap&#xff09;&#xff0c;可能会存在大量的 CSS 样式未被使用。这可能产生一些不良的影响&#xff0c;如&#xff1a; 性能问题&#xff1a; 未使用的CSS会增加页面的加载时间&#xff0c;因为浏览器需要下载并解析…

Field Symbol与数据引用的几个应用

这俩货都是指针。在动态编程里用。 但是从好理解的角度来看&#xff0c;都给他们理解成数据对象。 都得指向其他的数据对象。不过field symbol指的是其他的数据对象内存地址的值。而数据引用只是指向内存地址。 1.Field symbol 当Field Symbol指向了其他的数据对象&#xf…

Java集合知识回顾:从分类到工具类,掌握精髓

文章目录 1. 集合的分类2. Collection 接口3. Map 接口4. 泛型5. Collections 工具类总结 在Java编程世界中&#xff0c;集合是一项极为重要的知识&#xff0c;为我们的程序设计提供了强大的数据结构和处理手段。在本篇文章中&#xff0c;我们将回顾集合的分类以及相关的重要概…

微信小程序实现双向滑动快捷选择价格(价格区间)

实现样子 提示&#xff1a;效果可以自己自定义&#xff0c;自己将文字样式更改为自己项目属性即可 实现达到方法 1、左边为最低价&#xff0c;右边为最高价格&#xff0c;可以拖动左边最低价选择价格。拖动右边为最高价。 2、当两个价格重合时&#xff0c;继续拖动&#xff0…

Vue+SpringBoot项目开发:后台登陆功能的实现(二)

写在开始:一个搬砖程序员的随缘记录文章目录 一、SpringBoot项目的搭建二、数据库配置1、新建数据库2、新建用户表 三、SpringBoot项目的配置 一、SpringBoot项目的搭建 项目搭建传送门&#xff1a;从零开始&#xff0c;SpringBoot项目快速搭建 二、数据库配置 1、新建数据库…