
作为一个接触单片机编程工作多年的硬件研发人员,简单的谈下我心里的单片机分类。
一、第一类,标准51单片机
第一类就是MCS51系列,这是一种很早很早的单片机类型,是标准51内核的,大多数硬件研发人员都是从51单片机入门的,而且现在大学里如果开了单片机课程,一般也都是学习的51单片机。
51单片机的优势是内部结构很简单,只有定时器,串口和中断,比较容易理解,还有就是用的人太多了,各种例程和文章都很容易找到,所以很利于入门上手。另外现在宏晶科技出了各种小封装的51系列的单片机,使通过51单片机做一些基础小项目成为可能,所以现在51系列单片机还有人用来做板子。
我当时学习的时候,书上是这样说的,单片机分两种内部结构,一种是冯.诺依曼结构,另一种是RISC精简指令集结构,51内核的单片机属于冯.诺依曼结构,其他内核的单片机都是RISC结构。而RISC结构是比较先进的,因为这种结构的单片机执行命令的时候是同时读取指令和数据,冯.诺依曼结构需要先读指令再读数据才能执行,所以冯.诺依曼结构的处理速度慢。
标准的51单片机,比如ATMEL的AT89C51或者AT89S51系列,是12个指令周期执行一条指令,也就是如果是12M的晶振,则单片机的系统时钟是十二分之一微秒,那么执行一条指令就是十二分之一微秒的12倍,也就是1微秒,简单说就是1秒钟执行一百万条指令,其实还是挺快的啊,呵呵。
二、51类衍生单片机
所谓单片机,其实跟电脑CPU一样,也是在晶元上刻电路,按照一定的图纸刻电路。芯片设计现在也是热门行业,我国也在大力发展国产芯片,比如华为的麒麟系列。
说远了,51单片机内核的芯片设计图纸被公开了,所以有些设计能力一般的厂家基于这些公开图纸,做了一些衍生的51内核的单片机。我记得大概有这么几家,一个是飞利浦的P89C51系列,一种是新华龙的C8051FXXX系列,还有就是宏晶科技的STC89C5X系列,AD公司的ADUC8XX系列。
这几种单片机就是提升了51单片机的内部资源,比如标准51单片机的RAM很小,只有256字节,还不是都能用,这些单片机就增加了内部RAM的容量,一般是增加到4K了,通过MOVX指令访问。还有就是增加了一些内部功能模块,比如AD,DA等等。
这里特别要提的有两点,一个是宏晶科技也就是STC,出了大量51内核的各种封装的单片机,其中一部分不像标准51单片机那样,都是以12T的速度工作的(这里的T指的是系统时钟周期),STC单片机有些可以以6T速度工作,还有的可以以1T的速度工作。
另一个要提的点是,51系列单片机内部是不带仿真接口的,也就是说51内核的单片机都不能在线仿真,只能通过比较复杂的专用仿真器来进行程序仿真,这种仿真机一般都比较贵,我原来用的时候,得几千块钱。但是新华龙的C8051系列是个另类,这一系列的单片机,可以使用新华龙公司的简单的仿真器EC5来在线仿真,这种仿真器相对比较便宜。
所以一般我们调试51单片机程序的时候,会直接把程序烧写到板子上观察执行效果,利用板子上的一些led指示灯指示下工作状态,或者在程序的一些关键位置插入一些串口发数指令,把我们关注的一些变量的数值,发送到电脑上观察结果。至于在哪里插入发数指令,发送那些数据到电脑上,这就需要对编程结构比较熟悉了,这其实对初学者也是一种另类的锻炼方式。但是如果程序过于复杂,可能要观察的数据很多,都发到电脑上也不一定能理清发送的顺序,会带来对程序执行的误判,所以51单片机不太适合编写过于复杂的程序。
三、过去其他几家知名单片机厂家
不用51内核,自己设计单片机内核的厂家也有很多,我接触过的主要有Microchip的和ATMEL的Mega系列,这两种单片机我的理解是抗干扰能力比较强,适合做工业设计。
其中Microchip自成体系,有自己的汇编语言格式,C语言编程也有自己的IDE环境,烧写器,仿真器也是专用的,比较贵,但是很好用。
而ATMEL的Mega系列可以通过keil或者IAR的编译环境来编程,高级的芯片内部带内部仿真模块,低端常用的MEGA8系列是没有的,但是Mega单片机是串行编程的,可以使用简单的编程器进行编程,国内好用的Mega编程器是双龙的,200多元,算便宜了。
说到编程,也就是把写好编译通过的程序烧写到单片机里面,早期的单片机都是通过并行接口的,所以需要的编程器很大,而且不能在线编程,就是要把单片机放到编程器上烧写好程序,再装到目标板上。而Mega系列单片机是很早就支持在线编程的,就是你可以先把单片机焊接到目标板上,再通过编程器直接在目标板上编程,这是Mega的一个巨大优势。
四、台湾厂商
我国台湾的芯片行业还是挺发达的,也有一些厂商自己出单片机,我用到过的有松瀚SONIX,合泰HOTEL,新茂等等,其中松瀚和合泰是感觉针对某一种民用品专门出一种单片机,比如我原来用到的松瀚单片机,只有4K的程序区,芯片连串口都没有,只有一个8位定时器,但是带一个12位的AD,就是针对需要AD采集的小系统设计的。这类单片机的特点是功能单一,应用领域指向性很强,价格非常便宜,甚至都没有FLASH的,编程也没有C语言接口,需要使用汇编语言编程。
说到这里提两点,一个是使用汇编语言编程,我们知道汇编语言是可以直接翻译成机器指令的,也就是一条汇编语言对应一条机器语言,而一个单片机执行一条机器语言的时间我们是知道的,所以我们就能计算出我们写的一段汇编语言的程序的精确的执行时间,这是很有好处的,我们可以不用系统定时器,就可以做到精确定时。而C语言编程,是需要通过编译器把C语言编译成机器语言的,一段C语言程序,通过不用的编译程序,编译成的机器语言是不一样的,就是同样的编译程序,两次编译出的机器语言也可能不一样,所以C语言程序的精确定时,只能依赖定时器。另外用汇编语言可以精确的计算程序存储的容量,比如一个4K程序容量的单片机,表示能烧写进去4K条机器语言,那么我们就可以写4K条汇编语言的程序,是保证能够烧写进去的;而C语言就不一定,因为不能把握C语言被编译完后的机器指令条数,所以就不能明确的知道我们写的C语言程序,是不是能烧写到单片机里面去。这也就是这些台湾产的单片机只支持汇编语言的一个原因,因为你可以精确的计算你写的程序容量,这样就可以选合适容量的单片机来用,毕竟4K容量的单片机比8K容量的单片机要便宜。
另一个要提的是FLASH,FLASH是指烧写程序的区域,这部分区域如果是FLASH,那说明这个区域可以多次使用,就是我们烧写进去一个程序,发现有些问题,可以通过编程器把程序擦除,重新再写新的程序;很多单片机厂家都说单片机的FLASH支持几万次写入,据我的经验,一般几百次是可靠的,再多就不一定了。我们知道单片机没烧写程序的时候,内部全是1,烧写就是把一部分1改写成0,这样1和0搭配就是机器指令,FLASH烧写次数过多的话,虽然也能提示烧写成功,但是有个别的1可能就烧写不成0了,这样相对应的机器指令就变了,程序的执行结果就不对了。
相对FLASH,台湾产的单片机很多都是OTP的,所谓OTP就是one time program,就是只能烧写一次的意思,这种单片机,一旦程序烧写错了,这个芯片就只能作废了,需要换新的单片机重新烧写。这样看不是浪费很大,确实是,这种OTP芯片适合程序定型后的批量生产,OTP的好处还是便宜,比FLASH的便宜。
五、当前流行的几种单片机
当前流行的单片机,一般都是ARM7内核的芯片,一般不装复杂的系统,只当做高速单片机用。这种芯片跟前面说过的各种单片机相比,程序容量更大,一般都是64k起步的,RAM空间也起码有16K,所以我们用这种单片机编程,不必考虑程序是不是能放下的问题,一般就是用C语言编程就好了。而且这类芯片内部都自带倍频电路,用STM32F10X系列举例,这种单片机一般外接8M的晶振,内部9倍频,芯片的工作频率可以达到72M。
正是由于这种单片机程序空间很大,所以经常会装一些小系统,比如UCOS等。编程环境一般用通用的编程环境,流行的是KEIL和IAR。这种单片机基本都内置JTAG接口,或者SW接口,提供在线的编程和调试功能,编程调试器一般使用JLINK或者ULINK一类的。
现在常用的芯片一般是NXP的LPC系列和ST意法半导体的STM32系列,基本款的芯片价格现在也很便宜,10块钱内有大把的芯片可以选择,现在基本已经可以替代上面说的那些中单片机了。
本文转自: 老张的工作室,转载此文目的在于传递更多信息,版权归原作者所有。