单片机
引言
常常看到很多网友在讨论51单片机。有人说,51单片机是入门的基础,应该学习;也有人说,ARM系列32位单片机的各种教程已经普及,51单片机早已过时,自然也就失去了学习的必要性。甚至还有一种极端的声音——是时候向51单片机说再见了……
确实,8位MCU和32位MCU,常常被拿来做比较,尤其是在32位MCU的价格不断降低、8位MCU价格优势不那么明显的今天,越来越多地听到关于8位MCU要被淘汰的言论。难道8位MCU真的要退出历史舞台了么?下面就让我们来听听业界的声音吧!
业界声音
飞思卡尔
飞思卡尔微控制器亚太区业务发展总监曹跃瀧这样分析:8位MCU因其成本优势,在未来也具备很大的增长空间,但是它更适合于单独的产品使用。在物联网应用中,很多场合不仅需要实现机械化向电磁化、智能化的转变,而且还要考虑可靠的连接性、安全性和保护性,所有这些功能的实现都需要MCU的参与,因此32位MCU会是物联网应用的主流。
Atmel
在分析物联网应用时,Atmel公司高级产品经理Bjrnge Brandal表示,物联网应用的范围非常广泛,很难说它的主流是8位还是32位。在有些小的应用中,8位的性能已经足以,而且这些小的应用数量也十分可观。就Atmel而言,8位MCU更多地会关注边缘应用,32位产品则侧重高性能应用,两者相结合,争取在物联网应用市场获得更大的发展空间。
HOLTEK
在触摸按键产品领域,HOLTEK已经积累了多年经验, 2014年在MCU竞争异常激烈的情况下还达到了50%的增长率。与笨重的机械式按键相比,HOLTEK以VS系列开头的8位MCU做成的触摸按键更易被客户接受。其PCB板外围电路非常简单,没有大量的电容、电感的设计,大部分运算转换的功能都已被集成到8位的MCU中。配合MCU的开发工具,应用工程师们可以根据自己产品的需求来调试触摸按键的灵敏度,以及根据自己的喜好进行个性化配置,而且价格上相比传统按键也没有提升。目前,此款触控按键MCU出货量为每季1000KK,其中45%被应用到电磁炉和抽油烟机上。
HOLTEK半导体业务总经理蔡荣宗先生认为,随着智能手机和平板电脑的加速成长,加上触控逐步扩散至汽车电子、医疗、家电等领域,相关的应用会越来越多。尽管触控已经不是新技术,但正处于上升期,仍将有一个黄金成长期。
Microchip
8位MCU的销售额水涨船高,Microchip公司正在增加产能满足这种需求。Microchip的首席运营官Ganesh Moorthy在近期电话分析会议上表示,没有想到近三年发布的8位MCU需求如此旺盛,Microchip将扩大产能以满足市场的需求。
瑞萨
由于物联网应用的发展,32位MCU正在快速增长。智能设备和爆发性增长的应用的连接需求,也为MCU的发展推波助澜。瑞萨电子美国市场副总裁Ritesh Tyagi认为,客户意识到,CPU的内核并没有那么重要,它只不过是通过外设组合来与MCU区分。硬件工程师并不会基于位数和内核数来做决定,他们考虑更多的是8位、16位、32位平台的集成度和代码复用性。由于成本和软件复杂程度低的优势,具有更少引脚和存储的8位MCU在未来仍会吸引市场的注意。总的来说,客户正在尝试在一个平台内将其软件标准化,以降低软件开发成本,并且更容易跨高端平台设计。
笙泉
虽然16位、32位单片机市场的竞争异常激烈,但不容忽视的是,客户关注的不仅是性能,还有成本。笙泉公司产品负责人强调,在实际使用中很多客户都会谈到,8051核完全能够满足产品的需求,性价比也很合适,没有必要采用32位MCU,尤其是在对价格非常敏感的应用领域。
宏晶
宏晶科技是国内专注于8位单片机市场的典范。在众多公司迫不及待地转去争夺32位市场之际,宏晶科技仍坚守在8位市场这片依然肥沃的土地上,并凭借丰富的电子产品开发设计经验以及广泛的国际品牌单片机原厂技术资源,成为新一代增强型8位单片微型计算机标准的制定者。其产品不仅广泛地应用在通信、工业控制领域,而且在信息家电、语音、玩具、礼品等领域也有很好的表现,包括手机、交换机、计价器、微型打印机、电子词典、PDA、掌上电脑、数码相机、U盘等。
上海海尔
作为智能电网和智能家居平台的半导体公司,上海海尔的通用MCU产品线目前还是以8位为主。但是公司在专用领域的多款采用ARM Cortex核的专用MCU均已进入量产。虽然,近年来32位产品在整个MCU市场的份额占比在迅速提升,但并不代表8位MCU会在短期内被完全取代。相反,8位MCU由于其应用简单灵活、安全稳定、成本优势等特点,仍会随着整个MCU市场的增长而不断扩增。上海海尔副总经理潘松表示,MCU是个需要长期积累的产业,产品是否稳定,如何达到功能、性能以及成本的最佳平衡,才是产品带给客户的真正价值所在。8位MCU是上海海尔的基础,也是整个MCU行业的基础。而在32位MCU市场,立足细分市场,找到产品附加价值所在,才是真正发展之路。
编辑观点--8位、32位,各有用武之地!
随着全球经济的复苏,工业和汽车行业的微控制器销售额日益攀升,而且这种上升幅度不仅仅限于32位的产品上。其实,8位内核覆盖的产品,在人们的日常生活中随处可见:电视机的遥控器、银行的点钞机、咖啡机、电磁炉……小小8位内核,仍然蕴含着巨大的能量!
(1) 从教学内容看
在单片机百花齐放的时代,51单片机成为经典教学内容。那个时代没有更高级的单片机可供选择,国内也没有更优秀的教材用于参考,老师的水平也是参差不齐,而51单片机正符合当时的需求,不仅有大量的相关教材和广泛的示例,而且工作的实际项目也是以51单片机为主,于是51单片机理所当然成为当时的学习基础。而如今,ARM成为主流,从51单片机转向ARM也是十分自然的事。
如果说学51单片机是误区,那么从学51单片机转向学ARM只是转向了另一个误区,因为其本质上只是以产品为中心的学习内容的正常变化,操作系统的学习也是如此。真正走出误区,应该是将单片机或嵌入式系统的基本原理抽象化,抽去产品外壳或一般性的教学内容,用《嵌入式系统概论》、《操作系统概论》作为高校教材。
(2) 从技术发展看
MCU起源与演化取决于技术与市场两大因素。Intel于1971年推出全球第一个4位微处理器后,迅速转向8位微处理器,此后形成了通用微处理器(MPU)与嵌入式微控制器(MCU)两大分支。在通用微处理器基础上的通用计算机,迅速从8位、16位过渡到32位、64位,没有人质疑这种变化。而在智能化控制领域,MCU长期处于8位机时代,竭尽全力发展与物理对象相关的控制功能。两大分支截然不同的专业分工,形成了IT产业最佳的发展格局。直至今日,在物联网中MCU与通用计算机仍然扮演着不同的角色。
MCU顾名思义是以物理对象智能化控制为己任。在控制功能的优化中,位数不是主要因素,以至于8位MCU长期处于垄断地位,甚至至今还给4位机留下一席之地。
由于某些涉及高速数据处理的应用需要高速运算能力,16位MCU应运而生。但16位MCU的推出并不成功,因为在8位MCU时代后期,已有具备高速处理能力的DSP,致使16位MCU处于尴尬境地。DSP的诞生在一定程度上缓解了8位MCU速度提升的压力。
ARM体系MCU诞生后,由于产业体系变革,使MCU从百花齐放到一枝独秀,致使价位迅速走低,甚至与8位机处于同一量级。ARM体系32位MCU具有综合的控制功能与高速的数据处理能力,技术上覆盖了8位MCU的传统领域。然而,市场因素是复杂的,在无限大的嵌入式系统市场中,8位MCU、32位MCU、64位MCU,乃至4位MCU,都有各自的用武之地,无所谓谁主沉浮,因为在不同的细分领域并不具有可比性。以51单片机为例,在ARM系列挤占8位单片机空间之际,51单片机己进入“智能芯片”这一巨大市场,几乎主宰了无线收发芯片的市场。
至于64位处理器,它是未来发展的一个趋势。目前,就一般用户而言,64位处理器尚无太大的意义。然而,对厂商来说,64位处理器是必备的竞争技术。虽然64位处理器在移动领域还受局限,但在服务器行业已经大展拳脚。或许,只有当未来手机真的需要更大的RAM时,64位处理器及系统应用才能真正发挥其强大的性能,使用户真正体验到64位处理器的强大优势。
文章来源:单机片与嵌入式系统应用
硬件设备由 MCU、MCU 上的 OS、各种传感器、WIFI/蓝牙/3G/4G 以及其他联网通信模块和应用程序构成。 其中硬件设备有两种接入方式, 第一种就是通过联网通信模块接入网关, 通过网关完成数据的发送与接收, 最终将数据转发到云平台或者手机端。 第二种就是硬件设备直接与手机实现本地连接, 进行数据的交换包括配网等操作。 因为云端平台数据传输采用JSON协议,因此,硬件堆JSON的解析非常重要。传统的C JSON解析非常庞大,在微处理器中,这无疑是一个巨大的问题。因此,编写了一个非常简单的JSON你判定,解析,与键值校验的三个纯C语言函数。占用空间非常小。具体的代码如下文所示:
硬件设备由 MCU、MCU 上的 OS、各种传感器、WIFI/蓝牙/3G/4G 以及其他联网通信模块和应用程序构成。 其中硬件设备有两种接入方式, 第一种就是通过联网通信模块接入网关, 通过网关完成数据的发送与接收, 最终将数据转发到云平台或者手机端。 第二种就是硬件设备直接与手机实现本地连接, 进行数据的交换包括配网等操作。
因为云端平台数据传输采用JSON协议,因此,硬件堆JSON的解析非常重要。传统的C JSON解析非常庞大,在微处理器中,这无疑是一个巨大的问题。因此,编写了一个非常简单的JSON你判定,解析,与键值校验的三个纯C语言函数。占用空间非常小。具体的代码如下文所示:
/***************************************
name: JSON C函数库 C文件
***************************************/
#include "include.h"
/***************************************
name: 函数声明
input:
output:
description:
***************************************/
char json_check(char *str); //JSON 校验函数
char json_get_value(char *json,char *json_key , char *json_value); //JSON获取键值
char json_check_value(char *str1, char *str2); //JSON 键值对比函数
/***************************************
name: JSON 校验函数
input: 字符串
output: 合法JAON 返回1 不合法JSON 返回0
description:
***************************************/
char json_check(char *str)
{
char str_length; //定义字符长度变量
str_length = strlen(str); //计算字符长度
if(str[0] == '{' && str[str_length-1] == '}') //通过首尾大括号判断是否为JSON
{
return 1; //如果字符串为合法JSON 返回1
}
else
{
return 0; //如果字符串为合法JSON 返回0
}
}
/***************************************
name: JSON 获取键值函数
input: JSON字符串 要获取的键名 获取键值的字符串
output: 如果获取成功返回1 获取失败返回0
description:
***************************************/
char json_get_value(char *json,char *json_key , char *json_value)
{
char *json_key_start; //定义键名开始的位置
char *json_key_end; //定义键名结束的位置
char json_key_length; //定义键名长度
char *json_value_start; //定义键值开始的位置
char *json_value_end; //定义键值结束的位置
char json_value_length; //定义键值长度
json_key_start = strstr(json,json_key); //获取键名开始的位置
json_key_length = strlen(json_key); //获取键名的长度
json_key_end = json_key_start + json_key_length; //获取键名结束的位置
if(json_key_start != 0 && *(json_key_start - 1) == '\"' && *(json_key_end) == '\"' && *(json_key_end + 1) == ':' && *(json_key_end + 2) == '\"' )
{
json_value_start = json_key_end + 3; //获取键值开始的位置
json_value_end = strstr(json_value_start,"\""); //获取键值结束的位置
json_value_length = json_value_end - json_value_start; //获取键值的长度
strncpy(json_value,json_value_start,json_value_length); //将键值存入指针数组
json_value[json_value_length] = '\0'; //指针最后一位补字符串结束符 \0
return 1; //成功获取键值 返回1
}
else
{
json_value[0] = '\0';
return 0; //失败获取键值 返回0
}
}
/***************************************
name: JSON 键值对比函数
input: JSON 键值 要匹配的字符
output: 如果匹配成功返回1 失败返回0
description:
***************************************/
char json_check_value(char *str1, char *str2)
{
if(strcmp(str1,str2) == 0)
{
return 1; //匹配成功返回1
}
else
{
return 0;
//匹配成功返回0
}
}
© 著作权归作者所有
作者:VIROR
文章来源:开源中国社区
说单片机与通用型中央处理单元芯片不同,是因为前者一般很容易配合最小型的外部支持芯片制成工作计算机。这样就可以很容易的把单片机系统植入装置内部来控制装置了。近年来为了在指令和数据上使用不同的字宽,并提高处理器流水线速度,哈佛结构在微控制器(Microcontrollers)和数字信号处理器(DigitalSignalProcessor,DSP)也逐渐得到了广泛的应用。
传统的微处理器是不允许这么做的。它要完成单片机的工作,就必须连接一些其他芯片。比如说,因为芯片上没有数据存储器,就必须要添加一些RAM的存储芯片,虽然所添加存储器的容量很灵活,但是至少还是要添加。另外还需要添加很多连线来传递芯片之间的数据。与以上的情况相比,单片机的工作则相对独立,一个典型的微控制器只需要一个时钟发生器和很少的RAM和ROM(或者EPROM,E2PROM)就可以在软件和晶振下工作了。同时,微控制器具有丰富的输入输出设备,例如模拟数字转换器(Analog-to-DigitalConverter,ADC),定时器,串口,以及其他串行通讯接口,比如I2C,SPI(串行周边接口),CAN(控制器局域网)等。通常,这些集成在内部的设备可以通过特殊的指令来操作。
单片机时钟频率通常较同时代的计算机芯片低,但它价格低廉,能够提供充足的程序存储器、丰富的片上接口。某些架构的单片机生产厂商众多,例如8051系列、Z80系列。一些现代的微控制器支持一些内建的高级编程语言,比如BASIC语言、C语言、C++等。
单片机的位元数
根据总线或资料暂存器的宽度,单片机又分为4位元、8位元、16位元和32位元单片机。4位单片机多用于冰箱、洗衣机、微波炉等家电控制中;8位、16位单片机主要用于一般的控制领域,一般不使用操作系统;32位用于网络操作、多媒体处理等复杂处理的场合,一般要使用嵌入式操作系统。
常见的单片机
微芯公司的PIC系列出货量居于业界领导者地位;Atmel的51系列及AVR系列种类众多,受支持面广;德州仪器的MSP430系列以低功耗闻名,常用于医疗电子产品及仪器仪表中;瑞萨单片机在日本使用广泛。
单片机的开发
单片机的软件开发中,以往多使用汇编语言,如今越来越多的使用C语言,又或者使用BASIC语言等更适合初学者的语言,部分集成开发环境支持C++。单片机的软件测试需要使用单片机开发器或模拟器。
随着技术的发展,2000年后已经有很多单片机自带了ISP(在线编程设计)或支持IAP,彻底地改变了传统的开发模式,使得开发单片机系统时不会损坏芯片的引脚,加速了产品的上市并降低了研发成本,缩短了从设计、制造到现场调试的时间,简化了生产流程,大大提高了工作效率。这类单片机包括AT89S系列单片机、AVR系列单片机等。
硬件
开发板可以进一步简化程序的开发和烧制过程。开发板可能包含实际芯片或是仿真器。通过配套的下载线连接电脑与开发板,在电脑上编写程序下载到开发板。批量生产会用到编程器。
软件开发环境
一些知名的微控制器开发环境有:
微芯公司的MPLABIDE可用于该公司全系列微控制器的开发与除错,除支持该公司的ASM组译器C语言编译器外,也支援许多第三方的编译器。
ARM公司的μVision集成开发环境(原为Keil公司产品,2005年该公司已由ARM购并),包含组译器与C编译器,可用于51单片机及ARM开发。
PROTEUS
Proteus软件是初学者入门的首选软件,它是LabcenterElectronics公司的一款商业版电路设计与仿真软件。内包括ISIS、ARES等软件模块。ARES模块主要用来完成PCB的设计,ISIS模块用来完成电路原理图的布图与仿真。
Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,甚至ARM处理器,以及单片机外围电路,比如键盘、LED、LCD等等。该软件还附带了一些案例和丰富的帮助文件。
文章来源: ofweek