矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 11594|回复: 27

考拉聊单片机6

[复制链接]
发表于 2010-12-24 21:15:19 | 显示全部楼层 |阅读模式
上回聊了上哪里获得单片机以及如何写入程序,也就是单片机的来源和编程:

http://web.crystalradio.cn/bbs/thread-157414-1-1.html

这回聊聊单片机内部的大致结构,也就是这个小东西肚子里都有些啥下水。

1.单片机的五脏六腑

说起单片机的内部详细结构很容易把人给说迷糊了,不同系列的不同型号的片子结构都有差别,看多了经常会把人给看的晕头转向。但单片机是个软硬结合的东西,不把硬件搞清楚了软件就没法写,咋办呢?毕加索当年画公牛时一次次的抽象,最后把一头大牛给弄成了几根线条。今天考拉也就来试一试把单片机给抽象简化一下,从复杂且结构各异的硬件结构中抽出一些共性,让大家好理解,理解了这些硬件也就弄的差不多了,在此基础上后面该聊聊如何编程序了。

先复习一下,第2次聊的时候说了单片机的基本概念,同时讲了单片机是由运算器/控制器/程序存储器/数据存储器/IO控制器/定时器等构成的,这是一个大的模块化的概念,实际就是一个计算机的大致构成。再具体一点在第3次聊的时候提到了程序计数器PC等,最后引出了单片机的最小系统。第4次聊的时候引入了运算时要用到的累加器。一般教科书的办法会象开中药铺一样把很多东西罗列讲解一遍,对于没有计算系统知识基础的这会就非常容易晕。由于单片机是一个软硬件结合的东西,如果不掌握如何编程序是根本学不会的,但正由于软硬件结合,不了解很多底层的硬件结构又没法编好程序(听起来好象鸡生蛋蛋生鸡,呵呵),所以这里只要一犯晕后面就更不明白咋办了。实际单片机的硬件细节结构虽然复杂,但并不需要写程序时都操作到(看系统的功能需要),实际相当部分的硬件初学者一开始是用不到的,如果循序渐进那一开始就不需要了解那么多。所以我们只要先了解一下编程序最需要了解的的硬件构成就可以上路了,下面考拉开始化简…………

前面说了什么程序存储器、PC、数据存储器、累加器等等,教科书上还会看到定时器、中断、串行口、A/D等等等等,好复杂好乱是吧?实际我们在写单片机程序时必须要知道的无非是程序、数据存哪里,运算中间结果存哪里以及送到哪里去,要操作哪些硬件。而操作硬件也是通过一些单片机内部的寄存器来进行的,这样所有的硬件结构就化简为存储结构,也就是程序/数据存储器以及寄存器。下来再咋化简呢?想想我们如何使用一台仪器呢?首先要熟悉仪器的开关旋钮和指示灯表头等,然后根据需要操作这些开关旋钮,从指示灯表头等获得测试结果,然后记在仪器前的一张草稿纸上,进行计算和判断,再操作仪器,最后在草稿纸上得出最终的结果。单片机也是一样的,只不过程序在替我们操作那些单片机内部的仪器罢了,前面说过的那些存储结构可以分为存数据的和操作硬件的,前者可以理解为一叠草稿纸,用于存放数据以及中间结果,后者就是那些开关旋钮以及指示灯表头了。单片机没有模拟量,所以操作硬件的就是开关与指示灯了,前者用于给硬件发出指令完成功能,后者用来返回结果。

单片机内部的存储结构除了前面说过的存程序的程序存储器外,还有一些数据存储器寄存器,数据存储器用来存储程序运行中的数据,寄存器分为两种,一种是通用寄存器用来存放最常用的数据(可以理解为那叠草稿纸最上面的一张),另一种叫特殊功能寄存器(Special Function Register,缩写是SFR,记住这个缩写,很常用)。SFR就是那些开关和指示灯,有些用来给硬件下达命令,就是实现开关的功能,有些就是指示灯返回结果。有些单片机数据存储器和寄存器分的不是特别清楚,这里不用太在意,只要分清楚哪些是草稿纸哪些是开关和指示灯就行了,下面分别细说一下。

2.草稿纸

程序运行中有很多中间结果要存储,比如计数值、时间、电压以及运算中间结果等,此外子程序调中及中断调用等都要用到一个叫堆栈的东西(这个后面再说),这个一般也要放在数据存储器中,这些其实都是在承担着草稿纸的任务。关于寄存器与数据存储器的区别,各个地方讲的都不太一样,有片子区别大,有的则区别不大。一般来说寄存器可以实现程序存储器单元所不能实现的一些功能(例如按位访问等),但现在很多型号区别已经不大(一般都是和数据存储器一起统一编访问地址的),所以要根据具体使用的单片机型号来讨论,这时就不细说了。虽然你可以不太细分草稿纸的第一张和下面余下的,但根据使用编程语言的不同,对于草稿纸的使用方法还是有所不同的

如果你使用汇编语言来编程,你就必须了解数据存储器和通用寄存器的一切细节,因为汇编言要用存储单元的地址来访问,所以你要自己安排存储空间的用途等。但如果你用高级语言(例如C)来写程序,存储单元的安排你就基本不用操心了,也就是说草稿纸具体怎么用不需要管,编译器会替你管。但不等于说你就一点事都不用作,毕竟有些数据的存储区域(不用指定具体地址,只要说明区域)还是要说明的,比如51你希望你定义的一个变量可以按位来访问当标志位,就需要作特别说明。不同编译器对于数据存储器及寄存器的定义及使用规则也可能不同,这些都是编写程序前需要注意的。但总体来说草稿纸的使用不是编写单片机程序的难点所在

3.开关与指示灯

记得一本失传已久的武林秘籍一开头就说:“欲练神功,引刀自宫”,实际意思就是要抓住要害,提纲挈领。对于单片机,我们要刀指何方呢?考拉可以这么说,想吃透单片机,先研究SFR

单片机内部的各个功能部件都是通过SFR来操作的,不论你用汇编还是C写程序,都摆脱不了对SFR的操作。想了解一种单片机具体操作,也必须熟悉它特有的SFR的定义与功能。可以这么说,不熟悉SFR你就没法学会使用单片机,就象你不了解一台仪器的开关指示灯的功能也就无法学会使用这台仪器一样。因此在学习编写程序前,一定要对SFR有一个大约的认识。SFR的数量很多,而且不同单片机因为功能部件的差异也会不一样,怎么办呢?前面说了,并不是所有的功能都是一开始初学时需要用到的,因此我们一开始只要了解一些最最基本的SFR就可以了,下面就聊聊一些最最常用的SFR。下面这些SFR是操作单片机所必须的也是最基本的,说明时都使用51的名称,其他单片机虽然名称可能不同,但一般都有同或相似功能的寄存器:

①程序计数器:就是前面说到的PC,存放下一条要执行的指令,用来控制程序的自动执行和转向。这个寄存器有单片机的可以用地址直接访问,有的则不能用地址访问,只能用指令间接改变计数值;
②累加器:缩写是A或ACC,前面提到过,参加运算并存放运算结果,有些数据传送也必须通过它,是使用最为频繁的一个SFR,有的单片机用一组寄存器来完成这个功能(如AVR)以防止堵塞;
③程序状态字:缩写是PSW,用来存放运算器运算结果的一些特征,比如是否为0?是否有进位?是否溢出?数据的奇偶性等,程序依据这些状态来判断是否需要进行转移(这些概念前面提过,等到后面说怎么编程序时再细聊)。这是单片机内部最基本的一组指示灯。很多单片机这个寄存器还完成其他一些功能,比如寄存器组的选择或数据存储体的选择等;
④间址寄存器:用来实现对数据存储器的间址访问,也叫数据指针。可以理解为存放表格行号的地方,当要查一张数据表(例如8字管的显示字型表)时这东西就非常有用了;
⑤堆栈指示器:用来存放堆栈的栈顶地址的寄存器,主要用来定义堆栈的位置,具体栈操作由专门的指令来完成。有的单片机(如PIC)是硬件堆栈,没有这个SFR;
⑥I/O口寄存器:单片机主要用这些寄存器与外部打交道,每个I/O口有一个或数个寄存器来存储数据并进行控制。这是单片机内部最基本的一组开关

先说这么多,其他的象中断控制寄存器、定时控制寄存器、串行通讯控制寄存器等到后面用到时再说。1-5项用C编程时基本不用操心,第6项则不管用什么编程都得管。

今天就先说到这里了,下次聊聊怎么开始写单片机的程序,且听下回分解。

[ 本帖最后由 cosine 于 2010-12-24 22:51 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2010-12-24 22:50:48 | 显示全部楼层
最近事情有些多,间隔会大一些,但考拉一定会坚持下去的,呵呵。
回复 支持 反对

使用道具 举报

发表于 2010-12-25 08:52:08 | 显示全部楼层
我很看好你呦!   
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-25 12:49:32 | 显示全部楼层
原帖由 华诚筑邦 于 2010-12-25 08:52 发表
我很看好你呦!   


谢谢,同时小汗一把,这句话让俺想起了邢捕头那色迷迷的双眼。
回复 支持 反对

使用道具 举报

     
发表于 2010-12-25 20:20:47 | 显示全部楼层
为熊版加油。
回复 支持 反对

使用道具 举报

发表于 2010-12-26 00:05:56 | 显示全部楼层
先粗看一遍 ,以后细看 ,争取理解透 ,谢版主 .
回复 支持 反对

使用道具 举报

发表于 2010-12-26 00:06:34 | 显示全部楼层
先粗看一遍 ,以后细看 ,争取理解透 ,谢版主 .
回复 支持 反对

使用道具 举报

     
发表于 2010-12-27 12:58:29 | 显示全部楼层
版主 辛苦了
呵呵 晚上加班干的人都知道其中滋味
回复 支持 反对

使用道具 举报

     
发表于 2010-12-27 20:28:29 | 显示全部楼层
好帖
对初学者帮助很大
回复 支持 反对

使用道具 举报

     
发表于 2010-12-27 23:14:47 | 显示全部楼层
好好学习一下。
单片机涨价的说
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-12-28 03:28:09 | 显示全部楼层
这两天家中有事,所以下一贴会比预计的要晚,大约一周后左右吧
回复 支持 反对

使用道具 举报

     
发表于 2011-2-20 09:45:51 | 显示全部楼层
关注考拉的靓帖。
回复 支持 反对

使用道具 举报

     
发表于 2011-2-20 16:26:41 | 显示全部楼层
默默的为cosine版主加油!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-20 17:52:02 | 显示全部楼层
原帖由 burn 于 2011-2-20 16:26 发表
默默的为cosine版主加油!


谢谢大家鼓励,下一贴拖了有俩月了吧,实在汗颜...
回复 支持 反对

使用道具 举报

     
发表于 2011-2-20 18:31:45 | 显示全部楼层
记下~~仔细研读~
谢谢版主~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-4-19 15:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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