加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 51单片机精彩教程(GOOD)

51单片机精彩教程(GOOD).pdf

51单片机精彩教程(GOOD)

China_why_e1g
2009-07-24 0人阅读 举报 0 0 暂无简介

简介:本文档为《51单片机精彩教程(GOOD)pdf》,可适用于考试题库领域

http:wwwmcufriendcom单片机之友�前言基于本人学习单片机的痛苦经历特编写本教程以此献给广大的单片机初学者希望您能从中受益。作者提示:本教程乃最通俗易懂之单片机教材也如果您还是看不懂请千万不要涉足此行以免误入歧途耽误您的前程**拿到这本教程您首先就会想什么是IAP教学法?是不是一种什么全新的教学方法?当然不是我可没有那么大的本事其实这只是我杜撰的一个新名词意思就是InApplicationsProgram(在应用中编程),当然这只是针对单片机教学说法是否正确还得您说了算。至于为什么要提这种说法那我倒想说几句。大家都知道学习电子技术是一件非常无聊和枯燥的事情为什么会有这种想法就是因为我们传统的教学方法只重理论而忽略了实践要一个人记住那些空洞而有无聊的理论知识实在不是一件容易的事好在我们总算熬过来了不管如何也多多少少的学习了一些电子基础知识。接下来我们应该进一步掌握些什么知识呢凡涉足此行的朋友都知道那就是单片机。不过这可不是一件容易的事倒不是因为单片机很难学而实在是我们身边很难找到一本专为单片机入门者而编写的教材。翻一下传统的单片机教材都好象是为已经懂单片机的人而写的一般总是以单片机的结构为主线先讲硬件原理然后是指令接着讲软件编程再是系统扩展和外围器件最后举一些实例(随便说一点:很多书中的实例都是有错误的)很少涉及单片机的基础知识如果按照此种学习方法想进行产品开发就必须先把所有的知识全部掌握了才可以进行实际应用。孰不知单片机不象模拟电路和数字电路那样只要搞懂了电路原理再按照产品要求设计好相应的电路就可以了。它是一种以简单的硬件结构复杂而有灵活的软件系统来完成设计的通用性产品不同的设计者只会使用其不同的功能几乎没有人会把它的全部指令都使用起来所以学习使用单片机只能靠循序渐进的积累而不可能先把它全部掌握了再去做产品开发(当然天才就例外了**)。基于以上原因本人想尝试一种全新的单片机教学方法打破传统的循序渐进式的教学方法以单片机的应用为蓝本结合基本的工业控制系统和实践工作中的具体应用不分先后顺序将各条指令贯串于一个又一个的实验中通过所见即所得的实验来讲解各种指令的编程方法顺便讲解相关的基本概念使您尽快地熟悉单片机应用的基本步骤掌握软件编程的基本方法。如果您学完了就能成为单片机的入门者完全可以进行一般产品的开发下册部分是单片机应用的提高部分主要学习单片机的系统扩展(比如:ROM和RAM存储器的扩展并行口的扩展串行口的扩展AD和DA与单片机的接口)以及相关开发工具和软件的使用(包括KELLC的应用与调试技巧硬件仿真器的使用)等等如果您学完了下册部分那就得恭喜您成为了单片机开发的高手了不过单片机的技术是在不断的发展和提高的您也不要太骄傲哦!为了尽量把最新的单片机知识和应用成果收录进我们的教程希望您能不吝赐教共同来努力把我们的教程不断的改进和完善。还是那句题外话技术是靠不断的积累和交流才会进步的固封自守只会更加落后。由于时间和精力的限制我还是希望在您学习本教程之前自己先熟悉一点相关的电子技术知识特别是数字电路基础这对您学习中碰到的相关概念会有很大的帮助。单片机之友QQ:QQ:凯灵电器IAPguoyunqiaoCrossOutguoyunqiaoNoteMarkedsetbyguoyunqiaoguoyunqiaoCrossOut单片机多功能实验板本学习板专为单片机爱好者学习MCS系列单片机而设计可直接的实验有:外部事件计数各种跑马灯TTL电平串行通讯数码管显示数字和字母标准电平串行通讯数码管动态刷新显示IIC总线存储器读写查询方式按键IIC总线时钟芯片操作中断方式按键单片机口线有否上拉的区别蜂鸣器发声显示驱动芯片的始能和禁止单片机奏乐各种跑马灯点亮LED各种跑马灯数码管显示数字和字母数码管动态刷新显示查询方式按键中断方式按键蜂鸣器发声单片机奏乐外部事件计数TTL电平串行通讯标准电平串行通讯IIC总线存储器读写IIC总线时钟芯片操作单片机口线有否上拉的区别显示驱动芯片的始能和禁止外部事件计数TTL电平串行通讯标准电平串行通讯IIC总线存储器读写IIC总线时钟芯片操作单片机口线有否上拉的区别显示驱动芯片的始能和禁止http:mcufriendwynet单片机之友提供http:wwwmcufriendcomQQ:单片机编程器详细介绍可查询http:mcufriendwynethttp:wwwmcufriendcom支持的芯片型号支持目前最为经典和市场占有量最大的ATMEL公司生产的ATC、C、C和最新的S、SATC、、等芯片。特别适合于渴望学习单片机又想尽量减小学习投入的网友。单片机多功能试验板开发板将单片机实验板、编程器、ISP下载线进行合理的组合开发板上自带MCU采用了串口在系统开发系统摆脱了传统、繁锁的单片机学习方式将当今最流行、最经济有效的学习方案完美地集成在了同一个系统中是一个快捷、高效、灵活的单片机学习、开发方案。具有非凡的性价比是单片机爱好者快速掌握系列单片机不可多得的工具既适合初学者入门学习也适合专业人员开发单片机产品的需求还适用于渴望快速学习和掌握单片机应用技术的所有人员。编控制配合串行下载编程控制软件无需各种编程器可轻松地将编译好的代码下载到开发板上的CPU中进行验证或演示试验过程中无需拔插任何电缆和芯片整个过程只需利用鼠标操作即可方便快捷。烧写完毕即可自动演示比ISP使用更方便。同时也可以使用预留的ISP接口连接ISP下载头对其他MCU进行在系统编程(ISPInSystemProgramming)对于产品的软件调试或升级提供快捷的方案。这样一来开发系统又可以作为单独的ISP下载线使用了。本开发系统的阻容元件、三极管为贴片封装结构更紧凑性能更稳定可靠开发系统提供了丰富的硬件资源和接口随机提供了大量的开发源代码将有助于初学者更好的学习单片机轻松地迈入单片机的殿堂领悟单片机给我们带来的无穷魅力。所有实验例程均提供详细源代码并且附带详细的注解说明。开发板的程序和原理图请参考配套光盘。板载实验资源和接口如下:STCCRC单片机路LED位LED数码管一路继电器控制蜂鸣器x矩阵键盘位拨码开关一体化红外接收头*字符型液晶接口ADC路位串行AD转换Kbits的IC串行数据存储器 C电话机的模拟攒机电路电话振铃检测电路电话拨号电路(DTMF发送)拨打电话或手机用的。DTMF接收电路(可以接收手机或电话按键发出的DTMF信号)可以用来进行电话或手机的远程控制KHZ的非接触IC卡读卡模块MAX专用串口通讯电路ISP下载接口外扩接口开发板附带的实验项目::跑马灯:拨码开关输入用LED提示:点亮数码管:路抢答器:位计数器:位数的计数器(即的计数器):定时器实验:实用单片机电子钟的制作:频率计:继电器控制实验:按键检测子程序:*LCD字符液晶模块显示程序:用实验板拨打电话或手机,LCD显示拨出的电话号码:用电话或手机远程控制开发板的LED灯:IC存储器读写实验:RS串口通信实验:模数转换(AD)程序:实用的红外线分析仪:读KHZ的非接触IC卡程序:STCMCU的内部EPROM的应用程序:MCU内看门狗的使用开发系统的特色:利用本开发系统的硬件资源和提供的实验程序稍加修改就可以开发更加复杂的程序或产品如:绕线机或其他产品上用的计数器带万年历的电子时钟电压表数据采集器报警器当有情况时可以通过预先存储的电话号码自动拨打电话报警电话远程控制电器密码门锁还有现在最流行的用非接触IC卡(也称射频卡或感应卡)做的产品:():射频感应门锁():智能小区智能门禁():巡更管理系统():考勤系统():防盗门保险柜密码箱():野外个人识别():汽车(机动车辆)防盗():其它一些需要身份识别和保密的⋯⋯红外线一体接收头KHZ非接触IC卡TTL电平输出的K非接触IC卡只读卡头WG输出的K非接触IC卡只读卡头第一课单片机的概述因为我们的主要课程是单片机的应用本来不想讲解单片机的历史与发展(这话说现状更确切些)但为了兼顾大多数朋友我还是简单的介绍一下这方面的相关知识。一.单片机的由来单片机专业名称MicroControllerUnit(微控制器件)它是由大名鼎鼎的INTEL公司发明的最早的系列是MCS后来有了MCS现在还有MCS系列我们经常说的系列单片机就是MCS它是一种位的单片机而MCS系列则是一种位的单片机至于它们之间有何区别我们以后会讲到。后来INTEL公司把它的核心技术转让给了世界上很多的小公司(不过再小也有几个亿的销售年哦)所以世界上就有许多公司生产系列兼容单片机比如飞利浦的LPC系列伟邦的WL系列达拉斯的DS系列现代的GSM系列等等目前在我国比较流行的就是美国ATMEL公司的C它是一种带FlashROM的单片机(至于什么是FlashROM我在这儿先不作介绍等以后大家学到相关的知识时自然就会明白)我们的讲座就是以该型号的单片机来作实验的。讲到这里也许有的人会问:我平时在各种书上看到全是讲解等型号的单片机它们又有什么不同呢?其实它们同属于一个系列只是C的单片机更新型一点(事实上,C目前正在用S代替我们的实验系统采用就是S的兼容C)。这里随便说一下目前国内的单片机教材都是以为蓝本的尽管其内核也是系列的但毕竟的单片机已经属于淘汰产品在市场上也很少见到了所以由此感叹国内的高等教育是如此的跟不上时代的发展需要!这话可能会引起很多人的不满,所以大家千万别传出去哦!!!二.主要单片机的分类接着上面的话题再给大家介绍一下我们经常在各种刊物上看到的AVR系列和PIC系列单片机是怎么回事?以便让大家对单片机的发展有一个较全面的认识。在没有学习单片机之前这是一个令很多初学者非常困惑的问题这么多的单片机我该先学哪一种呢?AVR系列单片机也是ATMEL公司生产的一种位单片机它采用的是一种叫RISC(精简指令集单片机)的结构所以它的技术和系列有所不同开发设备也和系列是不通用的它的一条指令的运行速度可以达到纳秒级(即每秒次)是位单片机中的高端产品。由于它的出色性能目前应用范围越来越广大有取代系列的趋势所以学完了系列的看来必须学会AVR的才行可叹知识爆炸人生苦短。说完了AVR的再来说说另一种PIC系列单片机它是美国MICROCHIP公司唉又是老美叫微芯公司的生产的另一种位单片机它采用的也是RISC的指令集它的指令系统和开发工具与系列更是不同但由于它的低价格和出色性能目前国内使用的人越来越多国内也有很多的公司在推广它不过它的影响力远没有系列的大所以作为初学者系列当然(不绝对)是首选。以上几种只是比较多见的系列其实世界上还有许多的公司生产各种各样的单片机比如:MOTOROLA的MCH系列(老牌的单片机)TI的MSPC系列(极低功耗的单片机)还有日本的TOSHIBA日立的HITACH德国的西门子SIEMENS等等它们都有各自的结构体系并不与系列兼容。为了不搞大家的脑筋这里就不介绍了等大家入门了以后自己再去研究它吧!现在我们还是回来了解一下系列单片机到底是个什么东西它有那些部分组成请接着往下看:三.单片机的结构及组成单片机到底是一种什么东东它究竟能做什么呢?其实它就是一种能进行数学和逻辑运算根据不同使用对象完成不同控制任务的面向控制而设计的集成电路此话好象有点绕口没关系大家都应该知道我们经常使用的电脑吧在电脑上我们可以用不同的软件在相同的硬件上实现不同的工作。比如我们用WORD可以打字用PROTEL可以设计图纸等等单片机其实也是如此同样的芯片可以根据我单片机之友QQ:们不同的要求做出截然不同的产品只不过电脑是面向应用的而单片机是面向控制的比如控制一个指示灯的亮和灭控制一台电机的启动和停止等等。那么它的内部究竟由哪些部件组成的呢?大家都知道我们的电脑有很多的零件比如CPU(中央处理器)RAM(内存)ROM(程序存储器)输入输出设备(并行串行口)等等在单片机中这些部件都有而且还把它们全部做到了一块芯片上(这就是单片机名称的由来)。讲到这里您一定会想这么多零件集成在一块芯片上那为什么单片机的价格会这么便宜(S每块才元左右)其实原因很简单功能有强弱就象我们平时用的PLC控制一台数控机床要用点的而控制一台电机有几点的就足够了另外这种芯片的产量很大技术也非常的成熟自然价格也就很低了。那么单片机是如何来工作的我们学习单片机又需要做哪些准备呢?对于一个初学者来说这是很有必要了解的:四.学习单片机的准备工作首先您需要一台电脑这是最基本的配置嘛P以上的就可以了然后您需要一套开发单片机的软件这个软件叫KEILC它是美国KeilSoftware公司专门为MCS系列单片机开发的第三方软件它的免费测试版可在wwwkeilcom上下载也可以在各种单片机网站上下载最新版本是V安装时选择Uvision虽然有K代码的限制但足以满足我们学习的需要其次您还需要一台编程器它是一种把程序写进单片机芯片的设备这种设备品种很多操作也很简单大家既可以买现成的产品(价格从多元到多元的都有)也可以自己制作有了这两样东西还不行为了看到程序执行的结果我们还需要一块实验板。好在现在出现了一种支持在线下载的单片机只要满足一定的外部条件就能够直接把汇编的程序下载到目标单片机中。经过反复的实验我们开发设计了这样的一套实验系统它采用了一套集源代码编辑、软件汇编、程序下载于一体的专业软件采用具有在线下载功能的FLASHROM单片机S单片机之友QQ:配合本教程可以完成教程中的每一个实验。这样既免去了您添置编程器和仿真器等设备的昂贵费用又可以直接在实验板上看到程序执行的结果更由于采用的是FLASHROM的存储器烧写次数可以达到次以上。具体电路图在教程的最后面附录中。单片机硬件结构和开发过程从这一课开始我们就要正式开始学习单片机了(如果你还没准备好我们也不等了☺)。前面我们曾经提到过单片机的内部结构是由CPU、ROM、RAM等等组成它们的内部结构我们以后再讲这一课让我们先来看看它的外部引脚(既硬件结构)看下面的图这就是我们要实验用的C单片机的外部引脚图给大家简单介绍一下。一.单片机的引脚功能.VCC():电源V。.VSS():接地也就是GND。.XTL()和XTL():振荡电路。单片机是一种时序电路必须有脉冲信号才能工作在它的内部有一个时钟产生电路有两种振荡方式一种是内部振荡方式只要接上两个电容和一个晶振即可另一种是外部振荡方式采用外部振荡方式时需在XTL上加外部时钟信号(详细的内容将在以后的课程中专门介绍)。.PSEN():片外ROM选通信号低电平有效。.ALEPROG():地址锁存信号输出端EPROM编程脉冲输入端。至于它们的作用我们暂时不去管它等以后学到相关的知识时再来研究它。这也许就是本教程区别于其他教材的最大特点先实践后理论尽量用实验结果来总结理论知识因为单片机是一种通用的产品它的功能设计是为了满足大多数使用者的要求换句话说不同的使用者只会使用其相关的功能几乎不可能把全部的功能都用起来因此我们完全不必象学习其他电子技术那样把单片机的全部知识都搞懂了再去开发产品。这话前面好象说过了!.RSTVPD():复位信号输入端备用电源输入端。什么是复位信号为什么要加复位信号?当然也暂时不去管它。.EAVPP():内外部ROM选择端。在、脚的功能上不知大家注意没有都有一个什么意思呢?这是引脚的第二功能也就是说该引脚既可以作前面的功能也可以作后面的功能至于它是如何工作的我们暂时也别去研究它。单片机之友QQ:单片机教程(MCS系列).P口():双向IO口。.P口():准双向通用I口。.P口():准双向I口。.P口():多用途口。IO就是英文INOUT的缩写这些引脚的功能想必大家也都明白了(就是输入输出的意思)这个IO口就是留给我们作连接外围电路用的那么它们之间有些什么不同呢?这个问题稍微有点复杂我们将在以后的课程中专门来学习。现在我们先来往下看:二.单片机的电路连接和开发过程看附图这就是我们做实验用的电路图想必大家都能看得懂吧。接下来就让我们通过一个实验来看看单片机是如何工作的?我们的实验是让一个LED灯亮起来亮哪一个?这就随便你了比如我们就让LED亮起来吧仔细看一下电路图LED接在什么地方呢?接在单片机的P的引脚(也就是脚)上那么按照该电路图的连接方法当脚为高电平时LED是不亮的只有当脚为低电平时LED才会亮起来怎样才能让脚由高电平变为低电平呢?我们让人做事就必须对她说一声也就是发布命令想让单片机工作也得发布命令不过在计算机中那叫指令我们要让脚变为低电平的指令是CLRP(让脚变为高电平的指令是SETBP)这就是我们通常所说的源代码(这是我们开发产品的第一步源代码编辑)怎么做呢?我们首先得打开实验软件屏幕出现一个浏览器的软件窗口点击左边的扩展实验选中实验自动温度控制器再点击工具栏里的调试按钮弹出一个记事本对话框写入CLRP(☺分号必须在英文状态下输入)输入完毕后选择文件→保存即可那么单片机能读懂这条指令吗?当然不能接下来我们还有一件事情要做就是把这句指令翻译成单片机能读懂的东西单片机能读懂什么呢?它其实只懂一样就是数字因此我们就把CLRP翻译成CH,H至于为什么要翻译成这样这当然是INTEL公司规定好的我们就不需要去研究它了。这个过程我们叫作编译(这是我们开发产品的第二步)那么指令是怎么编译过来的呢?这就得靠专业的软件了我们做实验使用的软件就有此功能只要点击工具栏上的编译按钮稍等片刻即出现一个编译信息窗口如果编译通过就会有编译完成结果如下:个警告个错误的编译信息如果编译错误则会出现编译错误的信息并提示错误的行号编译完了之后通常要进行程序仿真(这是第三步)当然我们的实验程序很简单是不需要仿真的接下来怎么才能把编译通过的指令写入单片机中呢?这通常需要借助于一种硬件工具叫编程器(也叫烧录器)不过我们的实验板采用的是具有串行下载功能的单片机所以您只要直接点击快捷工具栏上的下载按钮程序就进入了实验板(这是第四步编程)。自此就完成了单片机开发的全过程。全部工作结束后我们看到了什么?接P(脚)的LED亮了起来改变源代码变成SETBP进行编译下载看看结果是不是LED不亮了。怎么样不难吧!!!最后让我们来思考一个问题当我们用编程器把编译后的指令写入单片机时单片机就开始执行这条指令那么这条指令就一定在单片机内部的某个地方它究竟在哪里呢?单片机的内部结构又是怎么样的呢?这将是我们第三课要讨论的内容单片机的内部结构(一)⋯⋯半导体存储器。三.本课总结本课主要讲述了单片机开发的整个过程这个过程包括第一步编辑源代码第二步编译源代码第三步程序仿真第四步芯片烧写(亦称编程)希望大家记住这四步这是非常关键的单片机的硬件原理其实并不复杂本来嘛单片机的设计就是为了通用和灵活所以开发单片机最重要的就是软件的编写以后我会慢慢地教大家学习更多的软件知识。四.第课习题.C的电源电压是多少伏?.熟练掌握编译软件的使用方法。单片机之友QQ:单片机教程(MCS系列)第三课单片机的内部结构(一)单片机的内部究竟有哪些部分组成的它们都有些什么作用呢?让我们看下面的图:这就是单片机的内部方框图让我们先来了解其中的ROM存储器:一.半导体存储器ROM.几个基本概念上一课我们讲到了把编译后的指令下载到单片机后这条指令一定在单片机内的某个地方那么它究竟在哪里呢?原来它就放在一个叫程序存储器的地方英文名称ROM(全称为ReadOnlyMemory)叫只读存储器。它是一个什么东西呢?在讨论这个问题之前让我们先来看几个物理现象:()数和物理现象的关系不知大家是否还记得在学习数字电路时我们曾用一盏灯的亮和灭来表示电平的高和低即用“”来表示高电平用“”来表示低电平如果现在有两盏灯那它会有几种状态呢?请看下面的表:¤¤两盏灯的组合就是四种状态:。如此看来灯的亮和灭这种物理现象同数字确实有着某种联系如果我们把它们按一定的规律排列好那么电平的高或低就可以用数字来表示了换句话说:不同的数字可以代表不同数量灯的电平高或低。比如:这十六种组合就可以代表四盏灯的状态能理解吗?()位及字节的含义单片机之友QQ:单片机教程(MCS系列)在单片机中一盏灯(实际上是一根线)我们称它为一位它有两种状态(“”或“”)分别对应电平的高或低它是单片机最基本的数量单位用BIT来表示。盏灯(八根线)有种状态这盏灯(也就是位)我们把它称为一个字节用BYTE表示。至于为什么要怎么规定这就不需要你我操心了我们只要记住就可以了。那么单片机是如何来储存这些数字所代表的字节的状态的呢?接着往下看:.半导体存储器的工作原理()存储器的内部构造看下面的图这就是半导体存储器的结构简图:(图中有个字节)()存储器的工作原理存储器就是用来存放数据的地方它其实是利用电平的高或低来存放数据的也就是说它实际上存放的是电平的高或低的状态而不是我们所习惯上认为的“”这样的数字。那它是如何工作的呢?看上面的图这就是存储器的内部结构示意图一个存储器就象一个小抽屉一个小抽屉里有个小盒子每个小盒子用来存放位“电荷”电荷通过与它相连的电线传进来或释放掉至于电荷在小盒子里是怎样存放的这就不用我们操心了您可以把电线想象成水管小盒子里的电荷就象是水那就好理解了存储器中的个小抽屉我们把它称之为个“单元”相当于个字节而个小盒子就相当于位。有了这么一个构造我们就可以开始存放数据了比如我们要放进一个数据“”我们只要把第号、第号和第号小盒子里存满电荷而其它小盒子里的电荷给放掉就行了。可是问题又出来了一个存储器有好多相同的单元线是并联着的(看DD)在放入电荷的时候会将电荷放入所有的字节单元中而释放电荷的时候会把每个单元中的电荷都放掉这样的话不管存储器有多少个字节单元都只能放同一个数这当然不是我们所希望的。因此我们要在结构上稍作变化看上面的图在每个单元上有根线与译码器相连我想要把数据放进哪个单元就通过译码器给哪个单元发单片机之友QQ:单片机教程(MCS系列)一个信号由译码器的通过这根线把相应的开关打开这样电荷就可以自由地进出了。那么这样是不是就能随意地向存储器写入或者读出数据了呢?其实还不能继续看上面的图与DD相连的还有一个控制器它是用来干什么的呢?这根线叫写入读出控制线当我们向存储器写入数据时必须先把这个开关切换到写入端而要读出数据时就得先把开关切换到读出端而片选端则是为了区分不同的存储器设置的。这里没搞明白没关系后面还有介绍先让我们来看看译码器是如何工作的?.半导体存储器的译码简单介绍一下:我们知道根线可以代表种状态根线可以代表种状态根线可以代表种种状态又需要几根线代表?根线所以一片存储器我们只需要根线就可以了。.存储器的选片及总线的概念至此译码的问题解决了让我们再来关注另外一个问题:送入每个字节的根线又是从什么地方来的呢?它就是从单片机的外部引脚上接过来的一般这根线除了接一个存储器之外还要接其它的器件这样问题又出来了这根线既然不是存储器和单片机之间专用的如果总是将某个单元接在这根线上就不行了比如这个存储器单元中的数值是“FFH”另一个存储器的单元是“H”那么这根线到底是处于高电平还是低电平?岂不是要打架看谁历害了?所以我们必须让它们分离。办法当然也简单当外面的线接到集成电路的引脚上来后不直接接到各单元去中间再加一组开关就行了。这组开关就是前面提到的控制器(看前面的图)平时我们让开关打开着如果确实是要向这个存储器中写入数据或要从存储器中读出数据再让开关切换到相应的位置就行了。这组开关由三根引线选择:读控制端、写控制端和片选端要将数据写入先由控制器选中该片然后发出相应的写信号开关切换到相应的位置并将传过来的数据(电荷)写入片中如果要读信号先选中该片然后发出读信号开关也切换到相应的位置上数据就被送出去了另外读和写信号还同时受到译码器的控制由于片选端的不同所以虽有读或写信号但没有片选信号所以另一个存储器就不会“误会”而开门造成冲突那么会不会同时选中两个存储器呢?只要是设计好的系统就不会因为它是由计算机来控制的如果真的出现同时选中两个存储器的话那就是电路出故障了。如此看来存储器要想写入或者读出数据还真是不简单不过好在这些都是由计算机自动完成的不需要我们去操心。从上面的介绍中我们已经看到用来传递数据的根线(单片机是根)并不是专用的而是很多器件大家共用的所以我们把它们称之为数据总线(总线英文名为BUS)即公交车道谁都可以走而根地址线(单片机共有根地址线这些以后会讲解这里不必死记硬背)也是连在一起的我们把它们称之为地址总线看上面的图。对于本小节的内容如果您一时还无法理解没有关系继续往下看好了我们在以后的课程中还会详细的介绍这里只要您稍微的了解一下就可以了!!!单片机之友QQ:单片机教程(MCS系列).半导体存储器的分类第一课中我们提到过C是一种带FlashROM的单片机什么是FlashROM?它到底是一种什么东西呢?ROM我们已经知道是只读存储器所谓只读从字面上理解那就是只可以从里面读出数据而不能写进去它类似于我们的书本发到我们手里之后我们只能读里面的内容不可以随意更改书本上的内容。ROM就是单片机中用来存放程序的地方前面我们下载到单片机的指令就放在这个地方。讲到这里大家也许会感到困惑既然ROM是只读存储器那么指令又是如何进入其中的呢?其实所谓的只读只是针对正常工作情况下而言也就是在使用这块存储器的时候而不是指制造这块芯片的时候只要让存储器满足一定的条件就能把数据预先写进去这个道理也很好理解书本拿到我们手里是不能改了但当它还是原材料白纸的时候我们完全可以由印刷厂把内容印上去嘛。前面的编程就是这么回事!FlashROM是一种快速存储式只读存储器这种程序存储器的特点就是既可以电擦写而且掉电后程序还能保存编程寿命可以达到几千至几万次所以我们的实验系统是可以反复烧写的您尽管使用。目前新型的单片机都采用这种程序存储器当然除了这种程序存储器外还有两种早期的程序存储器产品简单介绍一下:PROMEPROM和EEPROMPROM称之为可编程只读存储器就象我们的练习本买来的时候是空白的可以写东西上去可一旦写上去就擦不掉了所以它只能写一次要是写错了就报废了习惯上我们把带这种程序存储器的单片机称为OTP型单片机如果您的产品批量生产又要求价格比较低的话带这种程序存储器的单片机是非常合适的EPROM称之为紫外线擦除的可编程只读存储器它里面的内容写上去之后如果觉得不满意可以用一种特殊的方法去掉后重写就是用紫外线照射紫外线就象“消字灵”可以把字去掉然后再重写当然消的次数多了也就不灵光了所以这种芯片可以擦除的次数也是有限的几百次吧电脑上的BIOS芯片采用的就是这种结构的存储器EEPROM前一种存储器的擦写要用紫外线而这种存储器可以直接用电擦写比较方便数据的改写它有点类似于FLASH存储器但比FLASH存储器速度要慢现在新型的外部扩展存储器都是都是这种结构。有关这几种程序存储器的使用和原理我们将在下册中详细的介绍这里就不多讲了。总之一句不管哪种程序存储器它们的作用都只有一个就是用来存放程序(也就是我们为单片机编写的指令)。了解了ROM让我们再来简单讲讲另一种存储器叫随机存取存储器也叫内存英文缩写为RAM(RandomAccessMemory)它是一种既可以随时改写也可以随时读出里面数据的存储器类似于我们上课用的黑板可以随时写东西上去也可以用黑板擦随时擦掉重写它也是单片机中重要的组成部分单片机中有很多的功能寄存器都与它有关详细内容后面再讲。二.本课总结本课主要讲述了单片机的两种半导体存储器只读存储器ROM和随机存储器RAM的工作原理它们是单片机的重要组成部分了解它的内部结构对我们学习单片机是很有帮助的。不过如果您一时对本课的内容还无法搞得很明白也没有关系随着学习的深入我们还会慢慢地讲解相应的基础知识可千万不要放弃哟?我在没有学会单片机之前也是如此囫囵吞枣的。三.第课习题.半导体存储器分为几大类?.ROM存储器的作用是什么?.什么是位?什么是字节?.为什么根线在单片机中会有种状态?它是如何出来的?.C的ROM有多少字节的容量?单片机之友QQ:单片机教程(MCS系列)第四课单片机的内部结构(二)上一节课我们讲了半导体存储器ROM和RAM的内部结构大家是否觉得有些枯燥了这一课让我们先来做一个实验:一.LED灯闪烁的实验程序还记得第二课中的实验吗?这个实验在实际应用中太没有意义了接下来我们要让LED不断的闪烁就象高楼上或者大海中用的航标灯。怎么才能让LED不断的闪烁呢?实际上就是让它亮几秒再灭几秒也就是让P交替地输出高电平或低电平怎样来实现这个功能按照前面所学的知识我们写出下面的程序:CLRPSETBP编译后下载到单片机⋯⋯结果不行为什么?这里有两个问题:首先计算机执行指令的速度很快执行完第条指令后LED是灭了但在极短的时间内又去执行第条指令LED又亮了我们根本无法看到灯曾经灭过第二个问题是当执行完第条指令后不会再去执行第条指令了因为单片机执行指令的过程是一条一条地顺序执行的。如何解决这两个问题呢?我们可以作如下的设想:第一执行完第条指令后让单片机延时一段时间(几秒或零点几秒)然后再去执行第条指令这样就可以看到LED曾经灭过了第二让单片机执行完全部指令后再返回去执行第条指令如此不断的循环就可以达到我们的要求了。实验程序如下:主程序MAIN:SETBP(1)LCALLDELAY(2)CLRP(3)LCALLDELAY(4)LJMPMAIN(5)子程序DELAY:MOVR,#(6)D:MOVR,#(7)D:DJNZR,D(8)DJNZR,D(9)RET(10)END(11)还记得软件的使用方法吗?调试写入源代码编译下载到单片机看看是不是我们想要的结果⋯⋯在分析这段程序之前先来说明几个标点符号的意义:分号在这里起一个分隔符的作用表示这条指令到此为止括号内的数字在这里是为了解释程序用的实际的编译过程中是没有意义的也就是说没有也是一样的只是为了程序的可读性更强我们一般会在分号的后面加上程序的注释文字(后面我们会用到)特别☺:程序中的标点符号只能在英文状态下输入当使用中文输入时必须切换到半角状态不然编译软件会出错。接下来我们分析一下这段程序:按照我们的要求第条让灯灭第条应该是延时第条是让灯亮第条和第条一样也应该是延时第条应当返回去执行第条指令。看一下上面的程序第条我们已经懂了是让LED灭第条和第条我们等一下讨论第条是LJMPMAINLJMP是一条指令意思是转移转移到什么地方去呢?看一下LJMP后面跟着什么是MAIN什么地方有MAIN在第条指令的开头就是MAIN所以第条指令的意思就是跳转到MAIN(即第条指令处继续执行)如此一来就不断地重复执行这些指令。那么MAIN又是什么意思呢?它实际上是我们为这段程序起的单片机之友QQ:单片机教程(MCS系列)一个名称专业术语叫标号既然是一个名称那可不可以用JIGUOCHINA等等的其他名字呢?当然可以这完全取决于您的需要(☺:不过也有一些是不能采用的我们以后再讲)。再来分析第条和第条指令看看它们是如何实现延时的?LCALLDELAYLCALL也是一条指令这条指令叫做调用子程序指令看看LCALL后面跟着的是什么DELAY哪里有DELAY在第条指令的开头很显然这也是一个标号这条指令的作用就是当执行到这条指令时就转去执行LCALL后面标号所在处的程序如果在执行程序时遇到RET指令(RET叫返回指令)就返回到LCALL指令的下面一条(即第条指令)处继续执行在第条指令后确实有RET指令那么在执行完第条指令后就应该去执行第条指令之后遇到第条指令:RET执行完这条指令后就回去执行第条指令将P清零也就是让LED亮然后再去执行第条指令执行完后又回到条指令最后执行第条指令:LJMPMAIN也就是我们刚才说的跳转到第条将P置位就是让LED灭掉。如此周而复始LED就不断的闪烁。好好理解这段文字务必把它搞清楚!!!从标号DELAY处(即第条)开始到RET的这一段指令我们称之为子程序它是一段延时程序至于延时多长时间我们会在以后的课程中学习。程序的最后一条是END它不是指令它只是告诉编译软件整个程序到此结束了它叫“伪指令”。在大家以后的编程中写完程序都要加上这一条。在上面的程序中我们知道了从标号DELAY开始的子程序是一段延时程序那么它又是如何工作的呢?在了解它的工作过程之前我们必须先知道其中的一些符号就从R开始吧它是单片机内部的一个重要组成部分叫工作寄存器什么是工作寄存器?下面我们就来讲解这个问题:二.工作寄存器上一课我们已经讲过在单片机中有许多的功能寄存器和半导体存储器RAM有关那么工作寄存器又属于哪一部分呢?它是用来干什么的呢?要搞清楚这个问题让我们先从日常生活中的一个例子说起比如我们要做一道数学题您会马上得出答案:接下来再看一道题:要你马上得出答案就不那么容易了通常我们会怎么做呢?一般总是先把的结果写在一张纸上然后再算=这就是我们想要的最终结果而只是为了得到最终结果而暂时记下来的中间结果单片机中做运算和我们生活中做运算一样也需要把中间结果放在某个地方那么计算机把它放在哪儿呢?前面我们提到的ROM(只读存储器)中不行!因为ROM是用来存放程序的它只能写进去不能读出来(再次提醒一下这只是相对而已)所以只能放在单片机的另一个区域RAM中(即随机存取存储器)中。R就是RAM区域中划出的一部分。知道了R接下来让我们来分析一下这段子程序(延时程序)。三.LED灯闪烁程序子程序的分析首先看第条MOVR#这也是一条指令意思是传递数据。我们知道在日常生活中要传递一件东西就必须要有一个传递者一个接受者和被传递的东西那么在单片机中是怎么区分它们的呢?在这条指令中R是接受者就是要传递的东西(单片机中要传递的东西当然是数字了)这里传递者被省略了(顺便提一下并不是每条指令都能省略的事实上大部分的指令都要有传递者)这样一来这条指令的意思也很清楚了:就是把这个数传递给R这个工作寄存器(也就是把这个数送入R中)这样执行完这条指令后R中的值就应该是我们可以用DUBG这个软件来验证一下看是不是符合。讲到这里不知大家注意没有在这个数的前面有个#它是什么意思呢?这个#就说明是一个被传递的数的本身而不是传递者。看懂了MOVR#那么MOVR#也应该很清楚了。接着看第条DJNZRD这又是另一条指令我们来看一下DJNZ后面跟着什么一个是R一个是DR我们已经知道了再找一下DD在本行的开头我们已经学过它是标号。那么这条指令是怎么执行的呢?它的执行过程是这样的:它将后面的值(即工作寄存器R中的值)减然后查一下这个值是否等于“”如果等于“”就往下执行如果不等于“”就转移转移到什么地方去呢?大家应该明白了实际上这条指令的执行结果就是在原地转次当R中的值等于“”之后程序就去执行第条指令也就是DJNZRD大家自行分析一下这条指令的结果(是不是转去执行MOVR#同时R中的值减)这段子程序的最终执行结果就是DJNZR#这条指令被单片机之友QQ:单片机教程(MCS系列)执行了*=次执行这么多次干吗?就是为了延时。四.本课总结大家可以改变一下MOVR#这条指令中的值(注意☺:不能大于为什么以后会讲到)或者改变一下标号的名称看是不是符合上面的分析。接下来提一个问题:通过实验我们看到了LED在闪烁是因为DJNZR#这条指令被执行了*=次执行那么多次究竟需要多长时间呢?下一课我们就将讨论这个问题。这里有必要介绍一下DUBG这个软件它是一个专为单片机设计的仿真软件配合MON仿真机能进行单片机的仿真拥有这样一套设备在过去可是非常奢侈的不过现在已经很少有人使用它了原因是目前市场出现了许多兼容KEILC的仿真器它们的功能更先进MON只能属于被淘汰产品。不过作为单片机初学者使用DUBG还是很有意义的因为用它可以帮助我们理解单片机的内部结构和程序的执行结果在我们实验套件的随机光盘中有这个软件。五.第课习题.什么是主程序?什么是子程序?.标号的含义是什么?.单片机是如何执行程序的?.工作寄存器属于ROM单元还是RAM单元?.在实验中如果没有RET指令会出现什么情况?.理解指令LCALL、LJMP、DJNZ的意义。.掌握DUBG软件的使用方法。单片机之友QQ:单片机教程(MCS系列)第五课单片机的内部结构(三)上一课中我们提到了DJNZR#这条指令被执行了*=次就产生了延时那么这个时间是多少呢?它又是如何计算出来的呢?这一课就来讨论这个问题。一.单片机的时序.时序的由来我们已经知道单片机执行指令的过程就是顺序地从ROM(程序存储器)中取出指令一条一条的顺序执行然后进行一系列的微操作控制来完成各种指定的动作。它在协调内部的各种动作时必须要有一定的顺序换句话说就是这一系列微操作控制信号在时间上要有一个严格的先后次序这种次序就是单片机的时序。这就好比我们学校上课时用的电铃为了保证课堂秩序学校就必须在铃声的统一协调下安排各个课程和活动。那么单片机的时序是如何规定的呢?接着往下看:.时序的周期计算机每访问一次存储器的时间我们把它称为一个机器周期它是一个时间基准就象我们日常生活中使用的秒一样计算机中一个机器周期包括个振荡周期什么是振荡周期?一个振荡周期是多少时间?振荡周期就是振荡源的周期也就是我们使用的晶振的时间周期一个M的晶振它的时间周期是多少如果电子技术学得好的朋友应该不难算出(T=f)也就是(微秒)那么使用M晶振的单片机它的一个机器周期就应该等于*(微秒)也就是μS。在MCS系列单片机中有些指令只要一个机器周期而有些指令则需要两个或三个机器周期另外还有两

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/20

51单片机精彩教程(GOOD)

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利