
精编最新新 8051 教程.pdf
18页新8051教程前言 传统的单片机教学 均是以单片机的结构为主线 先讲单片机的硬件结构 然后是指令 然后是软件编程然后是单片机系统的扩展和各种外围器件的应用最后再讲一些实例按 照此种教学结构按照这种结构学生普遍感到难学试想一个从未接触过计算机结构的 人 甚至数字电路也是刚刚接触的人 要他去理解单片机内部结构 这实在不是个容易的事 至于很多书一开始就提出的总线 地址等概念 更是初学者难以理解的不管用什么巧妙 的比方都不容易理解于是糊里糊涂地学完了第一部份第二部份一开始就是寻址方式更 抽象 好多人直到学完单片机还不能理解寻址方式究竟是什么意思 为什么需要这么多寻址 方式刚开始学当然更不懂了然后是指令111 条指令又不分个重点反正全是要记住 的 等到指令全部学完 大部份人已对单片机望尔生畏 开始打退堂鼓了 第三部份是编程 如果说前面的东西不能理解还能靠记忆来获得知识的话这部份就纯是理解和掌握了如 果以前没学过编程短时间内很难掌握编程的有关知识更不必说编程技巧了可是教材上 明明规定要编出这样那样的程序学的人编不出来当然只会认为教材的要求当然是 合理的应该做到的我做不到就是我没学好于是很多人长叹一声单片机太难学了放 弃吧 可是到这里还根本不知道一个单片机开发的完整过程是什么 什么是编程器还不知道 后面的就不说了总之现在教材基本都是以单片机为蓝本来学习计算机原理而不纯为 学习单片机技术在教材教学过程的安排上又没有考虑人的接受能力使得学习的过程是 一个充满不断挫折的过程于是很多人认为单片机入门难 基于以上情况 作者尝试编制一套全新的教学方法 以任务为教学单元 打破原有界限 不管硬件结构指令编程的先后顺序将各部份知识分解成一个个知识点为了完成一个 任务抽取每个部份的不同知识点加以组合完成第一个任务就能清楚单片机的开发过程 完成第二三个任务就能自已模仿性地编出自已的程序使得学习过程是一个不断成功地 完成任务的过程当所有任务全部完成知识点就全学完了即便只完成部份任务也可以 去做一些程序了事实并没有必要学完全部知识才可以去做开发的 作者在编第一个商用 程序时还不懂定时器怎么用编第二个商用程序写了长达 2K 行的代码可当时我还不 懂怎么样用中断编程因为当时我根本还不需要用中断 以上的教学方法具有如下特点 1以人的认知规律为主线而不是以课程结构为主线 2以任务为单元构建认知单元而不是以单片机功能为单元构建 3完成第一个任务即可进行单片机的初步应用尝试不必学完单片机的全部知识体系 随 着任务的逐渐进行 知识逐渐完善 能力逐渐提高 所有任务完成时 已具有初步开发能力 以上的教学目标是一个很'宏伟'的计划我不知道我最终会不会完成他因为完成他也 许需要二年三年甚至更长的时间当然对于这个计划能否完成是否合理我是充满信 心的要完成以上计划关键在于要做好以下一些工作知识点的合理分解合理组合任 务的合理设计等等我将尽力去做好他当然我也希望诸位大虾能不吝赐教和我共同完成这个任务这也算为单片机入门者铺平道路吧 单片机教程第一课单片机概述 1何谓单片机 一台能够工作的计算机要有这样几个部份构成CPU进行运算控制 RAM数据存储ROM程序存储输入/输出设备例如串行口并行输出口等 在个人计算机上这些部份被分成若干块芯片 安装一个称之为主板的印刷线路板上 而在单 片机中这些部份全部被做到一块集成电路芯片中了所以就称为单片单芯片机而 且有一些单片机中除了上述部份外还集成了其它部份如 A/DD/A 等 天PC 中的 CPU 一块就要卖几千块钱这么多东西做在一起还不得买个天价再说这块 芯片也得非常大了 不价格并不高从几元人民币到几十元人民币体积也不大一般 用 40 脚封装当然功能多一些单片机也有引脚比较多的如 68 引脚功能少的只有 10 多 个或 20 多个引脚有的甚至只 8 只引脚为什么会这样呢 功能有强弱打个比方市场 上面有的组合音响一套才卖几百块钱 可是有的一台功放机就要卖好几千 另外这种芯片的 生产量很大技术也很成熟51 系列的单片机已经做了十几年所以价格就低了 既然如 此单片机的功能肯定不强干吗要学它呢 话不能这样说实际工作中并不是任何需要 计算机的场合都要求计算机有很高的性能 一个控制电冰箱温度的计算机难道要用 PIII应 用的关键是看是否够用是否有很好的性能价格比所以 8051 出来十多年依然没有被淘 汰还在不断的发展中 2MCS51 单片机和 8051803189C51 等的关系我们平常老是讲 8051又有什么 8031 现在又有 89C51它们之间究竟是什么关系? MCS51 是指由美国 INTEL 公司对了就是 大名鼎鼎的 INTEL 生产的一系列单片机的总称 这一系列单片机包括了好些品种 如 8031 80518751803280528752 等其中 8051 是最早最典型的产品该系列其它单片机都 是在 8051 的基础上进行功能的增 减 改变而来的 所以人们习惯于用 8051 来称呼 MCS51 系列单片机而 8031 是前些年在我国最流行的单片机所以很多场合会看到 8031 的名称 INTEL 公司将 MCS51 的核心技术授权给了很多其它公司所以有很多公司在做以 8051 为 核心的单片机当然功能或多或少有些改变以满足不同的需求其中 89C51 就是这几 年在我国非常流行的单片机它是由美国 ATMEL 公司开发生产的以后我们将用 89C51 来完成一系列的实验 单片机教程第二课单片机的内部外部结构(一) 一单片机的外部结构 拿到一块芯片想要使用它首先必须要知道怎样连线我们用的一块称之为 89C51 的芯片下面我们就看一下如何给它连线 1 电源这当然是必不可少的了单片机使 用的是 5V 电源其中正极接 40 引脚负极地接 20 引脚 2 振蒎电路单片机是 一种时序电路必须提供脉冲信号才能正常工作在单片机内部已集成了振荡器使用晶体 振荡器接 1819 脚只要买来晶振电容连上就可以了按图 1 接上即可 3 复位 引脚按图 1 中画法连好至于复位是何含义及为何需要复要复位在单片机功能中介绍 4 EA 引脚EA 引脚接到正电源端 至此一个单片机就接好通上电单片机就开始 工作了 我们的第一个任务是要用单片机点亮一只发光二极管 LED显然这个 LED 必须要和单片 机的某个引脚相连 否则单片机就没法控制它了 那么和哪个引脚相连呢单片机上除了刚 才用掉的 5 个引脚还有 35 个我们将这个 LED 和 1 脚相连见图 1其中 R1 是限流电 阻 按照这个图的接法当 1 脚是高电平时LED 不亮只有 1 脚是低电平时LED 才发亮 因此要 1 脚我们要能够控制也就是说我们要能够让 1 引脚按要求变为高或低电平即然 我们要控制 1 脚就得给它起个名字总不能就叫它一脚吧叫它什么名字呢设计 51 芯 片的 INTEL 公司已经起好了就叫它 P1.0这是规定不可以由我们来更改 图 1 名字有了我们又怎样让它变'高'或变'低'呢叫人做事说一声就可以这叫发布命令要计算机做事也得要向计算机发命令计算机能听得懂的命令称之为计算机的指令让一个 引脚输出高电平的指令是 SETB让一个引脚输出低电平的指令是 CLR因此我们要 P1.0 输出高电平只要写 SETB P1.0要 P1.0 输出低电平只要写 CLR P1.0 就可以了 现在我们已经有办法让计算机去将 P10 输出高或低电平了但是我们怎样才能计算机 执行这条指令呢总不能也对计算机也说一声了事吧要解决这个问题还得有几步要走 第一计算机看不懂 SETB CLR 之类的指令我们得把指令翻译成计算机能懂的方式再 让计算机去读计算机能懂什么呢它只懂一样东西 — —数字因此我们得把 SETB P1.0 变为D2H,90H 把 CLR P1.0 变为 C2H,90H 至于为什么是这两个数字这也是由 51 芯片的设计者--INTEL 规定的我们不去研究第二步在得到这两个数字后怎样让这 两个数字进入单片机的内部呢这要借助于一个硬件工具“编程器“ 我们将编程器与电脑连好运行编程器的软件然后在编缉区内写入D2H,90H见图 2 写入 … …好拿下片子把片子插入做好的电路板接通电源 … …什么?灯不亮这就对了 因为我们写进去的指令就是让图 2 P10 输出高电平灯当然不亮要是亮就错了现在我们再拨下这块芯片重新放回到编程 器上将编缉区的内容改为C2H,90H也就是 CLR P1.0写片拿下片子把片子插进 电路板接电好灯亮了因为我们写入的就是让 P10 输出低电平的指令这样我们 看到硬件电路的连线没有做任何改变只要改变写入单片机中的内容就可以改变电路的 输出效果 三单片机内部结构分析 我们来思考一个问题 当我们在编程器中把一条指令写进单片要内部 然后取下单片机 单片机就可以执行这条指令 那么这条指令一定保存在单片机的某个地方 并且这个地方在 单片机掉电后依然可以保持这条指令不会丢失 这是个什么地方呢这个地方就是单片机内 部的只读存储器即 ROMREAD ONLY MEMORY为什么称它为只读存储器呢刚才我 们不是明明把两个数字写进去了吗原来在 89C51 中的 ROM 是一种电可擦除的 ROM称 为 FLASH ROM刚才我们是用的编程器在特殊的条件下由外部设备对 ROM 进行写的操 作在单片机正常工作条件下只能从那面读不能把数据写进去所以我们还是把它称为 ROM 单片机教程第三课几个基本概念 数的本质和物理现象 我们知道计算机可以进行数学运算这可令我们非常的难以理解计算机吗我们虽 不了解它的组成 但它总只是一些电子元器件 怎么可以进行数学运算呢我们做数学题如 37+45 是这样做的先在纸上写 37然后在下面写 45然后大脑运算最后写出结果运 算的原材料3745 和结果82 都是写在纸上的计算机中又是放在什么地方呢为了解 决这个问题先让我们做一个实验这里有一盏灯我们知道灯要么亮要么不亮就有两 种状态我们可以用’0’和’1’来代替这两种状态规定亮为’1’ 不亮为’0’ 现在放上两盏灯 一共有几种状态呢我们列表来看一下 状态 表达 0 0 0 1 1 0 1 1 请大家自已写上 3 盏灯的情况 000 001 010 011 100 101 110 111 我们来看这个 000001101 不就是我们学过的的二进制数吗本来灯的亮和灭只是 一种物理现象可当我们把它们按一按的顺序排更好后灯的亮和灭就代表了数字了让我 们再抽象一步灯为什么会亮呢看电路 1是因为输出电路输出高电平给灯通了电因 此 灯亮和灭就可以用电路的输出是高电平还是低电平来替代了 这样 数字就和电平的高 低联系上了请想一下我们还看到过什么样的类似的例子呢海军之灯语旗语 电报甚至红绿灯 位的含义 通过上面的实验我们已经知道一盏灯亮或者说一根线的电平的高低可 以代表两种状态 0 和 1 实际上这就是一个二进制位 因此我们就把一根线称之为一 位 用 BIT 表示 字节的含义 一根线可以表于 0 和 1两根线可以表达 00011011 四种状态也 就是可以表于 0 到 3而三根可以表达 0-7计算机中通常用 8 根线放在一起同时计数 就可以表过到 0-255 一共 256 种状态这 8 根线或者 8 位就称之为一个字节BYTE不要 问我为什么是 8 根而不是其它数因为我也不知道计算机世界是一个人造的世界不是 自然界很多事情你无法问为什么只能说它是一种规定大家在以后的学习过程中也要 注意这个问题 存储器的工作原理 1 存储器构造 存储器就是用来存放数据的地方它是利用电平的高低来存放数据的也就是说它存 放的实际上是电平的高低而不是我们所习惯认为的 1234 这样的数字这样我们的一 个谜团就解开了计算机也没什么神秘的吗 图 2 图 3 让我们看图 2这是一个存储器的示意图一个存储器就象一个个的小抽屉一个小抽屉里 有八个小格子每个小格子就是用来存放电荷的电荷通过与它相连的电线传进来或释 放掉至于电荷在小格子里是怎样存的就不用我们操心了你。
