产品选型

单片机avr arm 单片机计算性能大比拼(51, AVR, MIPS, ARM)

小编 2024-11-24 产品选型 23 0

单片机计算性能大比拼(51, AVR, MIPS, ARM)

写这篇文章纯属偶然,MCU benchmark有很多方法,且不同类型MCU benchmark方法完全不同,很难说谁好谁快? 不过,对电子爱好者来说,还是挺想知道“我所用的MCU”计算到底多快?本文,就从打酱油、非专业、大无畏精神出发,探讨入门级单片机计算性能到底如何、如何。

单片机能干的事儿很多啊,我通常用来:

控制个灯啊、空调啊、电视啊、小车啊神马的。

用传感器采集个温度啊、湿度啊、电压、电流、水流、人脸啊神马的。

显示输出:液晶、OLED、数码管;声音;电风扇神马的。

超低功耗:家里的中央控制系统基于树莓派,不到2W功耗。

便携。貌似自己做成的东西极少具有便携性。。。

在没有接触Arduino前都是用51倒腾,玩了有几年,觉得51是最适合电子爱好者用的芯片,简单、便宜、功能足够!但接触Arduino后才明白,原来还有这么个东东,比51先进得多,实在太好用了! 记得学51从二进制地址学起,不太好懂。后来用C开发经常问:“明明 c=a+b; print(c); 就行了,我干嘛要去学指令、寄存器、寻址?”高级语言屏蔽底层很多东西,让编程变得简单。并不是基础知识没用,这好比高等数学这道门槛(俺数学专业),你必须弄懂基础知识体系才能理解数学世界的美妙!但如果是经济学专业,不懂数学基础知识同样可以玩儿转经济学!你从中获得的乐趣跟你投入成正比。所以,我用单片机并不是科班那种需要弄懂MCU每个功能、每个模块,我用单片机就接接外设,完成我的想法而已。也许,只用到了单片机十分之一。说实话,极少使用单片机计算能力(话说这也不是单片机的强项呀),但如你要做个智能小车、四轴飞行器、PID控制,那就需要一定的计算能力了。

开始,只是简单想看看单片机运算有多快,偶然机会跟坛友交换了一块chipKIT Uno32(MIPS芯片),就想横向比较一下不同MCU的差别,于是就有了本文。其实,计算能力通过指令时钟周期来计算,科学准确,但对于不太精通底层知识的我,汇编犹如天书,真心看不懂啊!所以,还是用我自己的土办法测一下吧。

先说测试方法和原理:

只测试+、-、*、/、%五种操作符,uint8_t、uint16_t、uint32_t、uint64_t、float、double六种数据类型的性能。

首先测10000次空循环的时间,然后在循环中加入操作数,记录总的时间,减去空循环时间就是计算消耗的时间。

测试中由于有系统中断(Arduino、STM32都有Tick中断,51为计时也有中断),结果不会很准,话说也没指望它能有多准。。。

编译器优化参数 -O0,一开始测出来的运行时间都为“零”,彻底凌乱。研究之后方得知,编译器优化干掉空循环,需通过参数关闭优化。

不同芯片数据类型支持不一样,有些数据类型会缺失。例如Arduino Uno中的float和double是一样的,都是float;但32位架构MCU中的double是float宽度的两倍。

代码类似这样:

说个小故事。如不关闭测试优化选型,把全局变量定义成局部变量,加法、减法的测试时间为“零”,没错,10000次计算不到4微秒,这显然不可能。后来研究一番方得知编译器默认优化参数是-Os,很多计算直接优化了。。。。

测试用的板子:

传统的AT89C516,还有宏晶鼓吹的1T 51单片机(STC12C5A60S2)

Arduino UNO(ATmega 328),Arduino Due(Atmel SAM3X8E,ARM架构的)

chipKit Uno32(PIC32MX320F128 MIPS架构)

ST Nucleo F0(STM32F030R8),Nucleo F1(STM32F103RB),都是ARM架构的

测试用开发环境:

51谈不上什么优化参数,我用的uVision 2。晶振用22.1184M,据说这个片子可以跑到40M,我就呵呵一下好了。

Arduino IDE 1.6.9,图中2/3都是用Arduino环境,其中编译器参数需要修改platform.txt文件,默认是-Os(优化大小),改成-O0(完全不优化),这个要重启Arduino才能有效。。。

STM用的是MDK 5.16,HAL库。没办法,对STM32真不熟,能捣鼓出结果很不错了!mbed计时函数有问题,F0、F1芯片无法得出微秒级时间,只好用HAL,话说用CubeMX生成代码还真挺方便的。

计时方法:

51用TIMER0计时,这个太简单了,每计数 12/22.1184 微秒啊!

Arduino用系统micros(),根据两次记录的时间差,精度4微秒。

STM用HAL库函数提供的HAL_GetTick(),通过HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/10000); 把计数器设为100微秒,再快会对计算有影响。

硬件说明:

部分芯片带硬件乘、除法器,啊,那个性能好的没话说。

32位MCU处理8/16/32位效果都是32位,但要求不高的地方,8位也够。

结果通过串口返回,Arduino串口超简单、STM32用HAL库串口通信也还行,这51串口啊,我就不说了。

测试结果:

AT89C52(22.118M)STC 1T MCU(22.118M)Arduino UNO(-O0)Arduino Due(-O0)chipKIT Uno32(-O0)STM32F030(48M -O0)STM32F103(72M -O0)Base: 70619Base: 11773Base: 13836Base: 3815Base: 1378Base: 6000Base: 5600TEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_t +: 1.63us +: 0.36us +: 0.44us +: 0.34us +: 0.07us +: 0.33us +: 0.35us -: 2.17us -: 0.41us -: 0.56us -: 0.29us -: 0.07us -: 0.29us -: 0.37us *: 4.34us *: 0.59us *: 0.62us *: 0.36us *: 0.10us *: 0.33us *: 0.35us /: 4.34us /: 0.63us /: 5.47us /: 0.31us /: 0.22us /: 12.56us /: 0.35us %: 4.89us %: 0.68us %: 5.53us %: 0.48us %: 0.21us %: 12.60us %: 0.40usTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_t +: 3.26us +: 0.72us +: 0.88us +: 0.34us +: 0.07us +: 0.33us +: 0.35us -: 3.80us -: 0.77us -: 1.00us -: 0.29us -: 0.07us -: 0.30us -: 0.37us *: 22.81us *: 3.17us *: 1.38us *: 0.36us *: 0.10us *: 0.33us *: 0.35us /: 16.29us /: 2.49us /: 13.26us /: 0.31us /: 0.22us /: 12.56us /: 0.35us %: 16.29us %: 2.49us %: 13.20us %: 0.39us %: 0.21us %: 12.60us %: 0.47usTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_t +: 6.52us +: 1.45us +: 1.76us +: 0.40us +: 0.06us +: 0.29us +: 0.32us -: 7.06us -: 1.49us -: 2.01us -: 0.40us -: 0.06us -: 0.33us -: 0.32us *: 71.68us *: 9.73us *: 6.35us *: 0.33us *: 0.08us *: 0.29us *: 0.33us /: 314.97us /: 42.53us /: 37.79us /: 0.40us /: 0.21us /: 11.84us /: 0.35us %: 319.31us %: 43.26us %: 37.79us %: 0.45us %: 0.20us %: 11.84us %: 0.46usTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_t +: 5.59us +: 0.38us +: 0.18us +: 0.48us +: 0.31us -: 5.59us -: 0.38us -: 0.18us -: 0.42us -: 0.40us *: 24.71us *: 0.46us *: 0.22us *: 23.47us *: 0.36us /: 21.56us /: 2.39us /: 1.60us /: 66.51us /: 38.00us %: 21.94us %: 2.40us %: 1.50us %: 66.51us %: 37.95usTEST: floatTEST: floatTEST: floatTEST: floatTEST: floatTEST: floatTEST: float +: 118.69us +: 16.50us +: 9.56us +: 1.52us +: 0.97us +: 2.07us +: 1.24us -: 126.30us -: 17.54us -: 9.62us -: 1.52us -: 1.10us -: 2.22us -: 1.32us *: 21.18us *: 3.12us *: 5.84us *: 0.98us *: 1.05us *: 0.97us *: 0.70us /: 40.19us /: 6.15us /: 5.78us /: 1.25us /: 0.93us /: 1.05us /: 0.78usTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: double +: 118.69us +: 16.50us +: 9.56us +: 1.82us +: 1.40us +: 4.26us +: 2.51us -: 126.30us -: 17.54us -: 9.62us -: 1.87us -: 1.51us -: 4.66us -: 2.57us *: 21.18us *: 3.12us *: 5.84us *: 0.92us *: 1.37us *: 1.69us *: 1.11us /: 40.19us /: 6.15us /: 5.78us /: 1.39us /: 1.20us /: 1.33us /: 0.89us

分析

Base是空循环10000次的微秒数,不同单片机差别还是挺大的,MIPS完胜,Arduino Due也不错。

传统51,计算8位加、减法大概3个时钟周期;16位乘除法计算略慢;32位计算有点捉襟见肘了;浮点很奇怪,乘除比加减快,所以,可以用32位整数加减和浮点乘除来提高计算性能。

STC 1T单片机确实不错,性能可跟8位的AVR叫板,考虑它的价格比AVR便宜,还是有使用价值滴。

Arduino Uno作为Arduino的入门直选,计算能力还不错,32位加、减法都挺好,尤其浮点计算,还比51快一些;只是乘除法速度略慢。

Arduino Due采用32位ARM芯片,基本上是处理能力最强的Arduino板!32位整数计算不像Uno会往下掉,综合性能比Uno高5~10倍,尤其乘、除法,硬件计算就是快啊!

chipKIT把我震惊了,原来MIPS这么快,甩其它芯片几条街啊!(这是不开优化,开优化也甩几条街) MIPS整数能力超强,浮点计算略差,那也比Due快了近一倍!如果用Arduino开发需要高性能计算,chipKIT可以选。我用的是他们过时的产品,新产品系列性能更高,存储更大!

STM32F0是Cortex-M0架构的,不得不说其综合能力不低啊。这么说是因为它的价格,比Due、chipKit的ARM、PIC芯片便宜多得多,但性能并不是没得比。

STM32F1是

Cortex-M3架构,跟M0比多了硬件除法器,主频更高。基本上,STM32F1可以垄断单片机的市场了,我对它唯一的希望就是:“把手册做的简单些,好难懂的说!”

综上所述,对于单片机选用哪一款都是可以的,STM32F1系列虽然综合最好,但学习门槛高,不易入门;51芯片虽历史悠久,性能可圈可点,但在Arduino的冲击下真没什么价值了。业余爱好者追求的是简单操作、快速搭建,Arduino完美的社区资源是任何其它芯片比不了滴!所以,建议非专业爱好者还是用Arduino来搭建原型,需要速度上MIPS芯片的chipKit,总有满足你的!

以上分析的是无优化性能,有点不公平。因为,实际上没人会无优化的编译,那么打开优化是什么样子呢?请看下图 (Arduino支持-O3,但考虑AVR片上Flash空间紧张,还是用-Os来说,附件有完整-O3的结果)

Arduino UNO(-O0)Arduino UNO(-Os)Arduino Due(-O0)Arduino Due(-Os)chipKIT Uno32(-O0)chipKIT Uno32(-Os)STM32F030(48M -O0)STM32F030(48M -O3)STM32F103(72M -O0)STM32F103(72M -O3)Base: 13836Base: 4404Base: 3815Base: 716Base: 1378Base: 751Base: 6000Base: 2200Base: 5600Base: 1400TEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_tTEST: uint8_t +: 0.44us +: 0.18us +: 0.34us +: 0.03us +: 0.07us +: 0.02us +: 0.33us +: 0.12us +: 0.35us +: 0.06us -: 0.56us -: 0.18us -: 0.29us -: 0.15us -: 0.07us -: 0.02us -: 0.29us -: 0.12us -: 0.37us -: 0.05us *: 0.62us *: 0.25us *: 0.36us *: 0.06us *: 0.10us *: 0.03us *: 0.33us *: 0.10us *: 0.35us *: 0.06us /: 5.47us /: 5.09us /: 0.31us /: 0.05us /: 0.22us /: 0.15us /: 12.56us /: 11.64us /: 0.35us /: 0.07us %: 5.53us %: 5.15us %: 0.48us %: 0.15us %: 0.21us %: 0.13us %: 12.60us %: 11.64us %: 0.40us %: 0.10usTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_tTEST: uint16_t +: 0.88us +: 0.25us +: 0.34us +: 0.15us +: 0.07us +: 0.02us +: 0.33us +: 0.12us +: 0.35us +: 0.05us -: 1.00us -: 0.25us -: 0.29us -: 0.13us -: 0.07us -: 0.02us -: 0.30us -: 0.10us -: 0.37us -: 0.06us *: 1.38us *: 0.69us *: 0.36us *: 0.15us *: 0.10us *: 0.03us *: 0.33us *: 0.12us *: 0.35us *: 0.06us /: 13.26us /: 12.51us /: 0.31us /: 0.04us /: 0.22us /: 0.15us /: 12.56us /: 11.59us /: 0.35us /: 0.07us %: 13.20us %: 12.45us %: 0.39us %: 0.15us %: 0.21us %: 0.13us %: 12.60us %: 11.60us %: 0.47us %: 0.09usTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_tTEST: uint32_t +: 1.76us +: 0.50us +: 0.40us +: 0.11us +: 0.06us +: 0.01us +: 0.29us +: 0.03us +: 0.32us +: 0.03us -: 2.01us -: 0.50us -: 0.40us -: 0.05us -: 0.06us -: 0.01us -: 0.33us -: 0.02us -: 0.32us -: 0.03us *: 6.35us *: 4.84us *: 0.33us *: 0.01us *: 0.08us *: 0.02us *: 0.29us *: 0.03us *: 0.33us *: 0.03us /: 37.79us /: 36.28us /: 0.40us /: 0.08us /: 0.21us /: 0.13us /: 11.84us /: 11.54us /: 0.35us /: 0.04us %: 37.79us %: 36.15us %: 0.45us %: 0.04us %: 0.20us %: 0.13us %: 11.84us %: 11.55us %: 0.46us %: 0.06usTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_tTEST: uint64_t +: 5.59us +: 2.89us +: 0.38us +: 0.32us +: 0.18us +: 0.07us +: 0.48us +: 0.04us +: 0.31us +: 0.05us -: 5.59us -: 2.89us -: 0.38us -: 0.19us -: 0.18us -: 0.07us -: 0.42us -: 0.05us -: 0.40us -: 0.03us *: 24.71us *: 20.43us *: 0.46us *: 0.19us *: 0.22us *: 0.08us *: 23.47us *: 23.14us *: 0.36us *: 0.11us /: 21.56us /: 17.29us /: 2.39us /: 2.22us /: 1.60us /: 1.31us /: 66.51us /: 66.22us /: 38.00us /: 37.56us %: 21.94us %: 17.66us %: 2.40us %: 2.22us %: 1.50us %: 1.28us %: 66.51us %: 66.26us %: 37.95us %: 37.58usTEST: floatTEST: floatTEST: floatTEST: floatTEST: floatTEST: floatTEST: floatTEST: floatTEST: floatTEST: float +: 9.56us +: 8.43us +: 1.52us +: 1.29us +: 0.97us +: 0.88us +: 2.07us +: 1.77us +: 1.24us +: 0.91us -: 9.62us -: 8.49us -: 1.52us -: 1.29us -: 1.10us -: 1.07us -: 2.22us -: 1.92us -: 1.32us -: 1.01us *: 5.84us *: 4.71us *: 0.98us *: 0.82us *: 1.05us *: 1.00us *: 0.97us *: 0.65us *: 0.70us *: 0.40us /: 5.78us /: 4.65us /: 1.25us /: 1.02us /: 0.93us /: 1.02us /: 1.05us /: 0.76us /: 0.78us /: 0.40usTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: doubleTEST: double +: 9.56us +: 8.43us +: 1.82us +: 1.77us +: 1.40us +: 1.25us +: 4.26us +: 4.16us +: 2.51us +: 2.36us -: 9.62us -: 8.49us -: 1.87us -: 1.82us -: 1.51us -: 1.36us -: 4.66us -: 4.57us -: 2.57us -: 2.44us *: 5.84us *: 4.71us *: 0.92us *: 0.87us *: 1.37us *: 1.27us *: 1.69us *: 1.60us *: 1.11us *: 0.91us /: 5.78us /: 4.65us /: 1.39us /: 1.33us /: 1.20us /: 1.16us /: 1.33us /: 1.24us /: 0.89us /: 0.74us

哇,性能全部飙升啊!平均都有3~5倍的提升,这也说明MCU的速度很依赖编译器!

Arduino Due的性能比Uno快了近10倍,且Due的乘除性能不比STM32差,得益于ARM核心和硬件计算单元啊。

MIPS架构总体最快,32位性能灰常优异,仅浮点比STM32F103略慢。

STM32F103不愧是芯片之王,综合性能最好,尤其浮点处理能力!用于PID、四轴飞行器的计算很合适。

最后,真正的乐趣不是看谁跑得快,而是设计一段程序,让它能在完全不同的系统跑起来的那种成就感!这篇文章也是随手而写,测试内容并不是非常严谨,仅作参考。

扩展阅读:

在成文之前搜了下关于MCU的benchmark,才明白我可真是真井底之蛙!早有专业的测试算法工具,比如Dhrystone 。我也把他们在Arduino和MDK平台上都编译了一下,结果挺有意思的,具体结果就不贴了,大家可以自己试一下。如果真的想了解MCU的benchmark还得用这种成熟的方法,土方法只能娱乐而已。。。

Dhrystone

Arduino下可运行:https://github.com/ghalfacree/Arduino-Sketches/tree/master/Dhrystone

STM32下可运行:http://www.stm32duino.com/viewtopic.php?t=76

How to Effectively Measure MCU Efficiency

参考资料:

本文用到的代码和报告:http://pan.baidu.com/s/1i4KNxOx

本文属于原创,如要转载请联系公众号ickeybbs

最新电子行业资讯、教程以及开发板样片申请,请关注“云汉电子社区”官方微信公众号ickeybbs

Arduino,C51,STM32和ARM等有什么联系和区别?

先说ARM吧,最开始ARM是由乔布斯资助的,苹果一家公司就占了43%,这里面ARM的格局也是最大的,Arduino和51与ARM相比,真是小巫见大巫,或者说他们根本没有可比性,ARM是一个芯片构架设计厂商,世界上90%的手机芯片架构都来自于ARM。

ARM

ARM公司是由诺基亚、苹果、VLSI、Technology、Acorn等多个知名高科技公司合资成立的。包括我们手机所用的处理器的架构都是ARM公司的,不管是苹果的A11,还是安卓的骁龙835统统用的是ARM的架构,有人会说华为海思麒麟是自主研发的,然而真实的情况是和苹果安卓一样使用的是ARM的架构,比如海思麒麟950采用的是ARM公司的公版架构,华为公司做了哪些呢?要知道ARM公司的公版架构是一个庞大的架构,对于手机优化的可能不是很适配,华为在ARM公版架构的基础上做了改动优化,这就是华为公司的海思麒麟芯片,还有芯片的制造也不是华为所能完成的,能完成这种工艺的全球就没有几家,最为知名的有三星、台积电。

打一个比方:华为在拿到了一个大楼的设计图纸,觉得这个图纸不太适合,然后经过改动,改成了适合我们中国人居住的大楼,这时候又遇到问题了,华为公司没有能造大楼的人才,于是去找台积电建造这个由华为设计出来的大楼。包括全球市值第一的苹果也是找台积电代工芯片。采用ARM架构的不只是手机芯片,包括医疗电子、汽车工业、家电照明、航空器械里面的处理器多为ARM内核,ARM公司不是靠卖芯片盈利,他的盈利方式为授权。基于ARM内核而设计出来的电子产品已经霸占了我们生活中的各个领域,真不敢相信,没有ARM的世界将是什么样子的。

STM32

STM32是意大利知名公司意法半导体生产的32位处理器,和其它的单片机相比,STM32算是是ARM的嫡系,关系最为密切,因为STM32是直接采用的是ARM Cortex-M0、M0+、M3、M4、M7内核。意法半导体做的是在ARM Cortex-M内核上做了一系列的优化,包括存储器、引脚数量、以及各种外设的优化与整改。这就是我们现在所熟知的STM32由来的根源。

51单片机

说到51单片机就不得不提inter了,Intel在1981年推出了8位8051微控制器,后来由于inter要发展电脑芯片业务,于是把8051的内核授权给其它芯片厂商,如ATMEL、台湾的宏晶,我们现在所能看到的51单片机几乎上都是宏晶公司生产的。

Arduino

对于Arduino很多人存在一个误解,如果你问他设计用的什么单片机,他也许会说Arduino单片机,这种说法说的真是太不专业了,或许玩Arduino的同学都只是玩玩吧,真正的Arduino是一个采用AVR单片机为核心的硬件与软件相结合的开源平台,这个开源平台包括Arduino的原理图、PCB和bom表,还有Arduino库函数的开源。真正使Arduino大火的原因是并不是他所采用的AVR单片机,也不是他的硬件,主要原因是库函数与底层硬件整合的天衣无缝,降低了非专业人士玩电子的难度。致使很多不是学电子的同学可以在Arduino上设计出PCB绘画机、WiFi小车等一系列的高级应用。

总结

ARM是一个授权内核的公司,STM32由意法半导体制造、采用ARM Cortex-M内核的一系列单片机,51由宏晶制造、采用Intel8051内核的单片机,而Arduino则是一款采用AVR单片机的开源平台!

相关问答

单片机 ARM 有什么区别?

欢迎大家关注狗哥,学习更多单片机干货1、单片机指单芯片上集成了控制器、存储器以及如定时器、SPI、IIC等外部设备于一体的片上系统,可以用来执行复杂的功能,...

单片机 芯片之间的区别?

单片机芯片和普通芯片之间存在显著的区别。1.功能不同:单片机芯片是集成电路芯片,通过超大规模集成电路技术将CPU、RAM、ROM、多种I/O和中断系统等功能集成...

arm单片机 之间有什么区别_土巴兔装修问答

1.C51单片机是8051内核,继承了早期MCS51的技术特性和指令,在国内使用较普及,结构较简单,学生或新生入门通常学这种,但其指令是集中指令集的,存在三...

protues是干什么的?

Proteus是LabcenterElectronics开发的电子设计自动化(EDA)软件套件,用于设计和模拟电路。它提供了一个易于使用的图形用户界面,允许用户快速地创建和编辑电...

avr 是什么 单片机 ?

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(ReducedInstructionSetComputer)精简指令集高速8位单片机。AVR的单片机可以广泛应用...

单片机 有哪些类型。怎么办?

单片机就是微处理器(simplechipmachine),比电脑CPU速度慢,功耗低,使用方便,不用带风扇,满足一般用法。1,8位8051内核:89C51/89C52/89C53/89C54/89C...

arm 外设特点?

ARM的特点:(1)自带廉价的程序存储器(FLASH)和非易失的数据存储器(EEPROM)。这些存储器可多次电擦写,使程序开发实验更加方便,工作更可靠。(2)高速度,...(...

proteus不选51 单片机 可以用吗?

是的,Proteus并不限制使用51单片机,它支持多种单片机和微控制器的仿真和开发。你可以选择其他类型的单片机,如AVR、ARM等,并在Proteus中进行仿真和调试。Prot...

单片机 编程语言?

单片机编程用c语言开发,因为单片机需要非常底层开发语言,用c语言开发效率非常高,而且c语言可以非常灵活,对于控制硬件非常合适。c语言最大的好处是可以利用...

单片机 的体系结构是什么?

MCS-51系列单片机,属于哈佛结构体系体系结构。哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内...

猜你喜欢