专栏首页初学单片机问题:单片机软件仿真和实际运行速度不一样?

问题:单片机软件仿真和实际运行速度不一样?

如图,问题大概就是说初学单片机,用软件仿真出来的程序,在开发板上运行的效果比仿真的快,晶振都是一样的12M。还问到一个1T模式和12T模式的区别?

今天,我们就来说说这个问题,一看问出这样的问题就知道学单片机没几天,还不算是入门吧,还走了软件仿真的道路。

要说清这个问题,我们分几步来慢慢叨叨。

>>>>

传统单片机和增强单片机

传统单片机,也就是之前的Atmel公司的51单片机,现在好多高校也都还在用的芯片,最有代表的芯片就是AT89S51/52单片机。这个单片机内部资源不多,不带ADC/DAC ,不带PWM,供电电压范围4.5V-5.2V,最主要的是运行速度的问题,12M的晶振频率,但是执行最快的 一条指令也需要12个晶振周期才能完成,这也就是所谓的12分频。这样一来12M的晶振频率,到了指令周期就只有1MHz。这也就是在12M晶振下,传统51单片机的定时器每加1所需要的时间是1us(1MHz频率对应的周期是1us),在计算定时器初值时的依据就是出自这里啦。

所谓的增强型单片机,其实就是STC的51单片机,在STC最开始的芯片中,比如STC89C51,这些芯片和AT的芯片没多少区别,运行速度和资源情况都差不多。到了STC12系列以后,STC公司连命名都改了,内部资源和运行速度都有了很大的提升,另一个很大的改动就是引脚的排列方式,之前的STC芯片的引脚排列都是兼容传统的51单机的,到时STC12系列以后,引脚不再兼容传统单片机,而是有了自己独特的排列,特别是后续的STC15、STC8等系列单片机。

>>>>

1T和12T

1T和12T只有在STC12系列以后的单片机里才出现的。前面我们已经说到了,传统的单片机其实就是12T单片机,也就是晶振频率会被12分频后才是指令运行的频率。到时STC12系列以后的STC单片机出现1T模式,也就是有些指令的执行时只需要两个晶振周期就能执行完。理论上来说,这样的运行速度会比传统单片机快6倍,为什么加“理论”,因为不是所有的指令都快6倍,只是一部分,还有些是快4倍,快3倍的。具体的需要看STC官方数据手册,如下图。

仔细的小伙伴会看到在第5列的第一行里有个小括号(采用STC-Y2 CPU内核指令集),STC12用的就是这个内核,而到了STC15系列芯片用的是STC-Y5内核,STC8系列用的是STC-Y6内核,Y后面的数字越大,指令优化的越厉害,表现出来的就是运行的更快,STC-Y5内核的指令集里,大部分的汇编指令到时一个晶振周期就执行完成的了,也就是比传统单片机快12倍。

现在我在做单片机开发的时候,绝大部分都是采用的C语言开发,你还在用汇编,那我只能是膜拜你了。C语言编程的程序方便移植,好理解,容易入门,不需要去记住那些复杂的寄存器,但是确定也明显,就是效率不高,运行速度我们没办法准确的计算出来。编译器在把C语言代码转化为汇编语言的过程我们是没法控制的,这样编译出来的机器代码我们就没办法去计算时间的指令运行时间。

>>>>

软件仿真和实际开发板

仿真软件,外国老表开发的,STC国产(好吧,内核还是人家的)。不知道什么原因,我们不知道,也不敢问,在仿真软件里就是没有STC的单片机芯片可以选择,没有STC的单片机,我们只能选择传统51单片机,这样一来,仿真的时候,程序运行的速度是传统的12T模式,也就是晶振频率12分频后才是执行的实际频率。

单片机开发板运行时,因为提问小伙伴用的单片机是STC12系列的芯片,就算他运行在12T模式下,指令系统还是有优化,速度肯定比传统的指令集要快。更何况呢,他连1T和12T都分不清,运行在1T模式下也是有可能的,所以,今天的问题就来了。实际开发板运行速度肯定会比软件仿真快。

写在最后

在很久之前,我就写过一篇文字,就说了不建议初学单片机的菜鸟从软件仿真开始。现在还有多少高校的单片机课程还在是以仿真运行的呢,希望是没有了,但我想,仅仅是我想想。

其实,小代觉得,学单片机的最终是要自己设计属于自己的东西,比如自己的毕设,更或是亲手做一个小礼物俘获女神的芳心。但是自己写的代码永远都运行在软件里,没有实际电路,你又怎么可能会自己设计电路呢。你不自己看见过电阻,又怎么可能会知道一个长得很像电阻的电子元件它其实是二极管。

最最后,回到今天的问题上,当我们把软件仿真运行完美的代码移植到实际开发板上运行时,代码是需要做单片机的适配的,比如,采用代码方式实现的延时函数,比如IO端口的配置,比如某些中断的入口,比如某些寄存器的定义等等。在移植之前,还是得拿目标芯片的数据手册来看看。

本文分享自微信公众号 - 单片机技术宅(chuxue_MCU),作者:小代126

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 学单片机前要做好这些思想准备,不然你就白学了

    写出这部分,着实的好笑,为什么呢?大家就说这还要说,我要学单片机,肯定是做好思想准备了啊,但是实际呢,好多同学经常会问我说单片机难学吗?这么贵的开发板,有没有便...

    单片机技术宅
  • 每个初学者都会遇到的五个问题,不信来看

    有很多初学者有这样的困惑,单片机初学者感觉入门很难,学着学着,就会产生这样的疑问——自己辛辛苦苦学习单片机,将来有用吗? 单片机只是一个工具,重要的...

    单片机技术宅
  • 单片机初学者如何快速成为大神?老司机给你指路

    我们人类懂的是人类的语言(汉字),单片机它懂的是机器语言。人通过学习可以懂英语,德语,还可以学懂C语言,汇编语言。怎么用这些人类学会的语言转换为单片机懂的机器语...

    单片机技术宅
  • 初学单片机的误区

    寄存器不用全部记住,更不能死记硬背,小代玩单片机多年,还是只记住了最常用的几个寄存器的名称,具体的位设置的什么,还是没记住。在编程时需要配置寄存器的时候,可以上...

    单片机技术宅
  • 【leetcode第 165 场周赛】统计全为 1 的正方形子矩阵

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051
  • iOS系统生成二维码

    czjwarrior
  • PTA 人以群分(25 分)

    7-2 人以群分(25 分) 社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型...

    Kindear
  • 1722 最优乘车 未完成

    1722 最优乘车 1997年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解 题目描述 Des...

    attack
  • 前端axios下载excel,并解决axios返回header无法获取所有数据的问题

    需求:通过后端接口下载excel文件,后端没有文件地址,返回二进制流文件 实现:axios(ajax类似) 主要代码: axios:设置返回数据格式为blo...

    hbbliyong
  • 1019 集合论与图论

    1019 集合论与图论 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description    ...

    attack

扫码关注云+社区

领取腾讯云代金券