一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 8186|回复: 15

[其他综合] 考拉聊单片机2

  [复制链接]
发表于 2010-12-6 00:07 | 显示全部楼层 |阅读模式
本帖最后由 cosine 于 2010-12-7 18:11 编辑

上回聊了些单片机学习上的基本思路和学习方向的选择,见:

https://www.yleee.com.cn/viewthread.php?tid=5034

这次我们就聊聊单片机本身,从最基础的开始,也就是单片机到底是个啥东西?用目前的网络流行语就是神马玩意?

单片机单片机顾名义就是作在单个芯片的计算机,我们下来看看是不是这样。单片机原本这个词是源于SCM(Single Chip Microcomputer),后来随着发展这个词逐渐被MCU(Micro Controller Unit/微控制器)所代替,但国内仍然习惯叫单片机,但用到英文缩写时常写MCU。根据一般计算机教科书上的定义:

计算机=运算器+控制器+存储器+输入设备+输出设备

目前一般情况下运算器和控制器是作成一个芯片的,也就是我们所熟知的CPU(Central Processing Unit/中央处理器),但更常用的一个词是微处理器(Mircoprocessor,缩写是MPU),但一写英文缩写还是写CPU,呵呵。根据这个定义可以将前面的公式代换为:

计算机=CPU+存储器+输入设备+输出设备

而单片机是如何构成的呢?一般单片机的构成是:

单片机=CPU+数据存储器+程序存储器+I/O控制器+定时/计数器

因此根据这些定义来看,片机就是计算机,确切的说是一个集成在单芯片上的,主要用于控制用途的简单的计算机。关于前面的单片机构成公式多说两句,首先我们将要接触的大多数单片机的程序存储器和数据存储器是分开的,这和一般的PC是不一样的。分开意思就是两个存储器的地址空间都是单独的,这个结构的特点是程序的字长可以和数据字长不一样(后面说到PIC时再详细说),书上把这种结构叫哈佛结构,对应的就是程序和数据共用一个地址空间的普林斯顿结构(PC就是这种结构)。这些名词你可以不理会,但要明白一般单片机的程序和数据是分开存储的,不象PC是混在一起存储的。再有一个就是I/O,这个词后面会大量用到,就是输出输出的意思,I/O控制器就是输出输出控制器的意思。再有就是这个公式里没提到中断,很多书上的标准构成里是写的有中断系统,但实际上不是所有的单片机都有中断系统的,象一些PIC的低档型号就没有中断,很多单片机的书都是根据51写的,而51是有中断的。

既然单片机就是一台简单的小计算机,那我们就先简单的说一下计算机吧。首先要明白计算机是没有意识的,它所作的一切都是人事先给它安排好的,这些安排简单的说就是程序。所以别指望单片机会自己把你想作的事儿给干了,所有的东西你都得给它事先安排好。你或许说我用电脑感觉它有些智能呀,比如要打开一个文件双击一下就是了,不用我告诉它所有要作的事情。要明白一般的PC是有操作系统以及各种软件的,PC所具备的一些智能其实也是这些软件的编制者教给它的。而单片机你所面对的是一台裸机,也就是说没有任何软件的硬件,一切事情都得你从头来干。好在单片机所干的活比较简单(相对PC所干的活来说),所以也别把这些事儿想得太复杂。

如何让计算机作我们想作的事情呢?形象的可以把计算机比作一个智力未开的小宝宝,如果你想让他作什么事情必须把要作的事情用他所能听懂的语言一步步的教给他。比如小宝宝还没学会关门,你就得告诉他先走到门边去,抓住门把手,向回拉门关闭,再走回来(例子不一定恰当,就是这么个意思)。对计算机来说这所谓能听懂的语言就是一条条的指令,这些作事的步骤就是由指令所构成的程序。也就是说,你如果想让单片机干活,就得用单片机所认识的指令编成正常的程序,再输给单片机,然后它才会完成你所想完成的功能注意单片机和小宝宝一样,是不能自己识别这些程序/步骤的正确与否的,小宝宝如果你教错了就会闯祸,单片机如果程序编错了一样会出乱子。

现在大约明白单片机是个啥东西了吧,下面我们了解一下单片机的一些主要参数:

1、字长

字长就是单片机一次可以处理的数据长度。计算机是处理二进制数据(后面再详细解释)的,所以这个数据长度是用二进制来表示的。举个例子,刚学会算术的小孩常常用手指头来计算,两个手合计可以算到10。也就是说如果他只会用手指头计算,那只能算到10,也就是1位10进制数(10已经有了一个进位,因为算不到11只能说是1位10进制)。这样我们就可以说只会用手算算术的小孩是一台字长为1位10进制的计算机。单片机道理是一样的,它一次也只能算一个字长,二进制经常以8位为单位进行计算(叫字节/Byte),所以计算机的字长也常以8的整数倍计算。比如8位机,16位机,32位机等等,字长越长,可以同时处理的数据越多,功能越强。目前我们的PC已经到了64位,当然也有一些是32位的。但我们所经常接触的单片机主要还是以8位字长为主,对于一般的控制用途来说8位机已经足够了,对于业余用途更是如此。

2、寻址空间

简单的讲寻址空间的意思就是单片机可以在多大的范围内寻找所需要的程序和数据。前面已经讲了多数单片机的程序和数据存储空间是分开的,所以也就有了两个寻址空间。对于程序寻址空间来说直接决定了你可以为它写多长的程序,当一些想实现的功能比较多的时候程序就会比较长,这时你肯定希望可用的程序空间大一些。数据空间决定了可以用来存放中间结果的地盘有多大,此外还有一点就是对多数单片机来讲这会影响栈(后面再讲这个词的意思)的大小,直接就影响了子程序和中断嵌套(这个词的意思也后面讲)的深度。注意区分寻址空间和单片机配备存储容量的区别,前者是一个最大概念,后者是一个可用的概念。比如51的程序寻址空间是64K,但标准51内部只有4K,前者是最大程序空间,也就是说不论如何扩展51也就是64K的程序长度,但具体到AT89C51,则只能用4K(除非你外扩程序存储)。初学一般编的程序都不大,所以一般的标准型都足够实验用了。

3、指令条数

指令是单片机所能理解的命令,一种单片机所能理解的命令数量越多,功能相应也就越强。一种单片机所能理解的所有指令就是它的指令集,就象一个小宝宝所能理解的语言一样,理解的越多,会作的事情也就越多。如果某个命令小宝宝还不能理解时,并不是说就作不了了,而是你得一步一步的教他作,用一系列的步骤来代替一个命令。比如一个小孩只会作加法不会作乘法,你如果想让他作3*3是直接是不会作的,但你可以让他作3+3+3来实现。单片机也一样,如果缺乏某种功能的指令,就得用一段程序来实现。各种单片机的指令数量是不一样的,象51是111条,PIC中档是35条等等。不要以为指令少就简单好学,就象前面说的,因为指令少,很多功能就得你自己去编程实现。关于RISC和CISC的区别和优劣后面有空再说,现在太早,早说容易乱,再说业余使用对于效率不是特别看重,先让单片机干活是关健。

4、I/O数量

这里I/O数量的意思是可用于输入输出的对外引脚数量。单片机由于是集成在一片IC上的,受封装面积和密度的影响,一般单片机的I/O数量都是有限的。而我们在实际应用中总需要很多的I/O来完成各种各样的功能,所以I/O不够是经常遇到的问题。加上受单片机引脚数量限制,一些特殊功能是和标准I/O复用的,也就是用了这个功能就用不了那个功能,更是经常让人顾此失彼。对于初学者来说,一般都是有什么就学就用,不象设计产品时根据需要选择合适的单片机,因此对于I/O的使用更要量体裁衣,精打细算。标准51的I/O数量是32个,共4个口,每个口8位。

5、其他参数

单片机还有其他一些参数,比如最高工作频率(决定速度)、定时器长度和数量、中断数量和嵌套级数、片上其他的资源如A/D等。虽然也都是单片机的重要参数,但对于初学者来说并不十分重要,先弄清楚单片机是怎么干活的再说。所以这些等后面聊到了再一个个的细说。

好了,到这里单片机是个啥东西以及主要的参数都说了。下面多说一下80C31等东西。

我们看到一下老的单片机电路板经常能看到80C31这个东西,为什么这个东西这么多呢?51系列单片机早先主要三个型号:8031、8051、8751。8031内部是没有程序存储器的需要外扩;8051内部的程序存储器是在工厂里作好的,一般需要批量定制;8751是可擦写的(芯片上有一个窗口用紫外线擦,象一些老网卡上的引导芯片),但比较贵。因为我们的国情加上以前的传统所以单片机的早期教学及使用就基本以8031为主了,80C31是低功耗型号。早期的传统是什么呢?最先我们在工业控制上用的比较多的是Z80,经常是把CPU和外围电路作在一个板上,作成一个叫单板机的东西用于控制,比较有名的是TP801(北京工业大学搞的)。到了单片机时代8051吧一般没那么大量定制,8751吧比较贵,加上以前有用CPU扩展系统的路子,就用8031扩展这么走下来了。所以老的单片机书上多数都要讲存储扩展,但51只有4个8位I/O口,扩展就占掉了两个口,还有一个口的很多引脚有第二功能不能用,因此I/O不够就成了问题,所以书上一般还要讲I/O扩展(也就是利用扩展存储的总线再扩几个I/O品出来),象什么8255/8155就是干这个的,老的80C31板上比较常见。

单片机的优势就在于单片,扩展后系统复杂体积比较大,这种方式早已过时,只是很多教科书仍然是这么讲的。扩展并不是说就没有用,学会了也是有用的,只是不要认为单片机就一定应该这么用,能不扩展尽量不扩展。

今天就先说到这里了,下次聊聊单片机是怎么干活的,且听下回分解。

https://www.yleee.com.cn/viewthread.php?tid=5116
发表于 2010-12-6 08:32 | 显示全部楼层
这个可以去投稿,
但对新手有指导意义的还是第一篇那种。  要知道一些底层的东西,还是找本书更系统些。
回复

使用道具 举报

发表于 2010-12-6 09:00 | 显示全部楼层
俺又来抢板凳了.....
回复

使用道具 举报

发表于 2010-12-6 09:43 | 显示全部楼层
呵呵,码这么多字啊,要支持一下,看来熊的爪子好利索了
回复

使用道具 举报

发表于 2010-12-6 10:12 | 显示全部楼层
错别字:“好在单片机所干的比较简单”
回复

使用道具 举报

 楼主| 发表于 2010-12-6 10:44 | 显示全部楼层
错别字:“好在单片机所干的话比较简单”
199003326 发表于 2010-12-6 10:12 https://www.yleee.com.cn/images/common/back.gif



    改了,唉,打五笔能打出这种错字儿,我都有点佩服我自己.{:3_463:}
回复

使用道具 举报

 楼主| 发表于 2010-12-6 10:46 | 显示全部楼层
呵呵,码这么多字啊,要支持一下,看来熊的爪子好利索了
fat 发表于 2010-12-6 09:43 https://www.yleee.com.cn/images/common/back.gif



    今天就可以见水了,没算全利索,但也要活动,不能一点不动.
回复

使用道具 举报

 楼主| 发表于 2010-12-6 10:52 | 显示全部楼层
本帖最后由 cosine 于 2010-12-6 10:58 编辑
这个可以去投稿,
但对新手有指导意义的还是第一篇那种。  要知道一些底层的东西,还是找本书更系统 ...
老弹弓 发表于 2010-12-6 08:32 https://www.yleee.com.cn/images/common/back.gif



    如果所有的新手能认认真真的看完一本51单片机的书,也就不会有这么多想学而学不会的人了.一来单片机的书多数是高校课本,而一般学单片机的专业前导课程多数有一些准备,比如数电或组成原理一类的.所以这些书前面的基础往往讲的比较简短且枯燥.二来很多想学单片机的人往往一点基础都没有,象数字电路/组成/接口甚至二进制的知识,矿坛尤甚.所以一些基础的还是得挑点必要的以通俗的方式补补课.不然很快后面问题就出来了.

我觉得既然要学一个东西,重点还是思路和理念,如果最后所谓的会单片机只是会抄个板子焊个套件下载个程序,最多只是小改动一下是意义不大的.能够根据自己的思路用学到的东西进行简单的设计(哪怕再粗陋再破绽百出)才是根本.不然永远只能山寨下去.
回复

使用道具 举报

发表于 2010-12-6 12:00 | 显示全部楼层
我的观点和熊不同,我觉得业余自学要靠兴趣,寓学于玩,边玩边学,缺钙补钙,缺锌补锌,反正缺什么补什么。如果只给你一本单片机的教科书,你是很难看进去的,更别说还要完完整整地看完了,即使看完了教科书,恐怕也不一定就能做成简单的交通灯实验。因为要用单片机做一个完整的项目,需要牵扯到模电、数电和软件编程等方面,不是某一本教科书能给你讲全的,学校里人家课程设置是给你一步步安排好了预备知识(模电、数电、计算机原理)后才讲编程。对于从零基础起要自学达到能自己设计并完成一个完整的制作,恐怕全中国也没几人能够。

有的朋友还在纠结着该学ASM还是C或BASIC,其实这些语言你学会了也还不能做出程序来,还得了解你面对的芯片的内部结构,比如IO口,设定为模拟端口还是数字端口、输出还是输入,芯片内都有专门的标志位(特殊寄存器)来设定,这些是因型号而异、甚至是因你用的编译软件的预定义头文件而异的,不同的编译软件有不同的引用名。面对这里面复杂的猫腻,你要求一个新手从书上全部掌握,那是不可能的。还是边玩边学,先找个具体的制作项目,从仿开始,做成了对这东西有了感性认识后,再看看人家的程序是怎么编的,看不懂程序就对着问题去翻书,然后可以按自己的想法改一下程序,把一个项目基本搞明白了,这项目里用的单片机和相关编程的问题你也就搞清楚了。然后再回到编程语言的书里,把这项目没用到的部分知识补全,就算这一种单片机入门了(当然对不同架构的单片机,还是要从头学起的)。
回复

使用道具 举报

 楼主| 发表于 2010-12-6 12:18 | 显示全部楼层
我的观点和熊不同,我觉得业余自学要靠兴趣,寓学于玩,边玩边学,缺钙补钙,缺锌补锌,反正缺什么补什么。 ...
fat 发表于 2010-12-6 12:00 https://www.yleee.com.cn/images/common/back.gif



    晕死,俺的意思就是目前的书是解决不了问题的,但如果不讲一点基础也是不行的,所以要挑点重要的说一下.不然后面说到具体的东西就会根本看不明白了.我不反对仿造,但不认同的你没有基础就不能设计的观点.要大胆的去想象,然后借助别人已有的设计进行参考和改进.大胆假设小心求证,只有这样才能锻炼出能力来.太多现成的套件往往解决不了问题,只会使人更加懒惰,各论坛到处可见什么跪求一个程序的贴,甚至别人给出了方向都不愿意自己去研究,只想吃现成的.这些其实都是理念问题.
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-3 19:54 , Processed in 0.031420 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表