LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715372致广大新老朋友应广大朋友的要求这次又对教程做了比较大的改动把大家提出的错误的地方做了修改另外加入了一些新的内容因为现在自己在做产品所以没太多的时间来解释大家学习中的问题请大家自己到电子爱好者网站—www.
entui.
com/bbs/index.
asp或我主持的网站电子爱好者园地www.
fj136.
com/bbs/index.
asp去提问我会经常去那儿看到了会给大家作解释发个广告我们现在生产的产品如果那位有需要可记得一定要来找我哦联系方法在下面够多了吧不要说找不到哦呵呵室内全彩屏室内外条屏芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715373前言基于本人学习单片机的痛苦经历特编写本教程以此献给广大的单片机初学者希望您能从中受益作者提示本教程乃最通俗易懂之单片机教材如果您还是看不懂请千万不要涉足此行以免误入歧途耽误您的前程*^*拿到这本教程您首先就会想什么是IAP教学法是不是一种什么全新的教学方法当然不是我可没有那么大的本事其实这只是我杜撰的一个名词意思就是InApplicationsProgram在应用中编程,当然这只是针对单片机教学说法是否正确还得您说了算至于为什么要提这种说法那我倒想说几句大家都知道学习电子技术是一件非常无聊和枯燥的事情为什么会有这种想法就是因为我们传统的教学方法只重理论而忽略了实践要一个人记住那些空洞而有无聊的理论知识实在不是一件容易的事好在我们总算熬过来了不管如何也多多少少的学习了一些电子基础知识接下来我们应该进一步掌握些什么知识呢凡涉足此行的朋友都知道那就是单片机不过这可不是一件容易的事倒不是因为单片机很难学而实在是我们身边很难找到一本专为单片机入门者而编写的教材翻一下传统的单片机教材都好象是为已经懂单片机的人而写的一般总是以单片机的结构为主线先讲硬件原理然后是指令接着讲软件编程再是系统扩展和外围器件最后举一些实例随便说一点很多书中的实例都是有问题的很少涉及单片机的基础知识如果按照此种学习方法想进行产品开发就必须先把所有的知识全部掌握了才可以进行实际应用孰不知单片机不象模拟电路和数字电路那样只要搞懂了电路原理再按照产品要求设计好相应的电路就可以了它是一种以简单的硬件结构复杂而有灵活的软件系统来完成设计的通用性产品不同的设计者只会使用其不同的功能几乎没有人会把它的全部指令都使用起来所以学习使用单片机只能靠循序渐进的积累而不可能先把它全部掌握了再去做产品开发当然天才就例外了*^*基于以上原因我们尝试了一种全新的单片机教学方法打破传统的循序渐进式的教学方法以单片机的应用为基础结合基本的工业控制系统和实践工作中的具体应用不分先后顺序将各条指令贯串于一个又一个的实验中通过所见即所得的实验来讲解各种指令的编程方法顺便讲解相关的基本概念使您尽快地熟悉单片机应用的基本步骤掌握软件编程的基本方法本教程分为上下两册上册部分主要教您掌握单片机开发的基本步骤和软硬件的编程与设计如果您学完了上册部分就能成为单片机的入门者完全可以进行一般产品的开发下册部分是单片机应用的提高部分主要学习单片机的系统扩展比如ROM和RAM存储器的扩展并行口的扩展串行口的扩展A/D和D/A与单片机的接口以及相关开发工具和软件的使用包括KELLC51的应用与调试技巧硬件仿真器的使用等等如果您学完了下册部分那就得恭喜您成为了单片机开发的高手了不过单片机的技术是在不断的发展和提高的您也不要太骄傲哦为了尽量把最新的单片机知识和应用成果收录进我们的教程希望您能不吝赐教共同来努力把我们的教程不断的改进和完善还是那句题外话技术是靠不断的积累和交流才会进步的固封自守只会更加落后由于时间和精力的限制我还是希望在您学习本教程之前自己先熟悉一点相关的电子技术知识特别是数字电路基础这对您学习中碰到的相关概念会有很大的帮助芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715374目录上册第一课单片机的概述6第二课单片机的硬件结构与开发过程9第三课单片机的内部结构一半导体存储器11第四课单片机的内部结构二工作寄存器15第五课单片机的内部结构三时序与时钟18第六课单片机的内部结构四并行口20第七课单片机的内部结构五数据与地址24第八课单片机的内部结构六特殊功能存储器27第九课单片机的工作方式29第十课单片机的寻址32第十一课单片机的指令一数据传递类指令35第十二课单片机的指令二数据传递类指令38第十三课单片机的指令三算术逻辑运算类指令42第十四课单片机的指令四控制转移类指令47第十五课单片机的指令五位及位操作指令51第十六课单片机的程序设计方法55第十七课单片机的定时计数器64第十八课单片机的中断系统68第十九课单片机的定时/中断实验一73第二十课单片机的定时/中断实验二78第二十一课键盘接口及编程方法一独立式按键81第二十二课键盘接口及编程方法二矩阵式按键87第二十三课单片机显示器接口及编程方法90第二十四课数码管的静态扫描与编程方法94芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715375下册第二十五课程序存储器的扩展及编程方法一2第二十六课程序存储器的扩展及编程方法二6第二十七课数据存储器的扩展及编程方法一8第二十八课数据存储器的扩展及编程方法二12第二十九课I2C总线原理及编程方法16第三十课串行接口的原理及编程方法一20第三十一课串行接口的原理及编程方法二25第三十二课多机通讯的原理及编程方法一28第三十三课多机通讯的原理及编程方法二32第三十四课定时/计数器的扩展及编程方法36第三十五课中断的扩展及编程方法41第三十六课D/A转换的原理及编程方法一45第三十七课D/A转换的原理及编程方法二50第三十八课A/D转换的原理及编程方法一54第三十八课A/D转换的原理及编程方法二58第三十九课看门狗原理和单片机的可靠性设计62第四十课键盘的扩展及编程方法66第四十一课显示器的扩展及编程方法70第四十二课单片机专用键显芯片的设计方法及编程原理75第四十三课实时时钟的原理及编程方法一79第四十四课实时时钟的原理及编程方法二83第四十五课单片机汉字显示系统的原理86第四十六课单片机汉字点阵屏的实验91第四十七课液晶显示器的原理和编程方法一94第四十八课液晶显示器的原理和编程方法二96芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715376第一课单片机的概述因为我们的主要课程是单片机的应用本来不想讲解单片机的历史与发展这话说现状更确切些但为了兼顾大多数朋友我还是简单的介绍一下这方面的相关知识一单片机的由来单片机专业名称—MicroControllerUnit(微控制器件)它是由大名鼎鼎的INTEL公司发明的最早的系列是MCS-48后来有了MCS-51我们经常说的51系列单片机就是MCS-51microcontrollersystem它是一种8位的单片机8位是什么意思我们以后再讲后来INTEL公司把它的核心技术转让给了世界上很多的小公司不过再小也有几个亿的销售/年哦所以世界上就有许多公司生产51系列兼容单片机比如飞利浦的87LPC系列华邦的W78系列达拉斯的DS87系列现代的GSM97系列等等目前在我国比较流行的就是美国ATMEL公司的89C51它是一种带FlashROM的单片机至于什么是FlashROM我在这儿先不作介绍等以后大家学到相关的知识时自然就会明白我们的讲座就是以该型号的单片机来作实验的讲到这里也许有的人会问我平时在各种书上看到全是讲解80318051等型号的单片机它们又有什么不同呢其实它们同属于一个系列只是89C51的单片机更新型一点(事实上,89C51目前正在用89S51代替我们的实验系统采用就是89S52的兼容89C52)这里随便说一下目前国内的单片机教材都是以8051为蓝本的尽管其内核也是51系列的但毕竟8051的单片机已经属于淘汰产品在市场上也很少见到了所以由此感叹国内的高等教育是如此的跟不上时代的发展需要这话可能会引起很多人的不满,所以大家别说是我讲的哦二主要单片机的分类接着上面的话题再给大家介绍一下我们经常在各种刊物上看到的AVR系列和PIC系列单片机是怎么回事以便让大家对单片机的发展有一个较全面的认识在没有学习单片机之前这是一个令很多初学者非常困惑的问题这么多的单片机我该先学哪一种呢AVR系列单片机也是ATMEL公司生产的一种8位单片机它采用的是一种叫RISC精简指令集单片机的结构所以它的技术和51系列有所不同开发设备也和51系列是不通用的它的一条指令的运行速度可以达到纳秒级即每秒1000000000次是8位单片机中的高端产品由于它的出色性能目前应用范围越来越广大有取代51系列的趋势所以学完了51系列的看来必须学会AVR的才行可叹知识爆炸人生苦短说完了AVR的再来说说另一种--PIC系列单片机它是美国MICROCHIP公司唉又是老美叫微芯公司的生产的另一种8位单片机它采用的也是RISC的指令集它的指令系统和开发工具与51系列更是不同但由于它的低价格和出色性能目前国内使用的人越来越多国内也有很多的公司在推广它不过它的影响力远没有51系列的大所以作为初学者51系列当然是首选以上几种只是比较多见的系列其实世界上还有许多的公司生产各种各样的单片机比如MOTOROLA的MC68H系列老牌的单片机TI的MSP430C系列极低功耗的单片机德国的西门子SIEMENS等等它们都有各自的结构体系并不与51系列兼容为了不搞大家的脑筋这里就不介绍了等大家入了门以后自己去研究它吧我们还是回来了解一下51系列单片机到底是个什么东西它有那些部分组成请接着往下看三单片机的结构及组成单片机到底是一种什么DD它究竟能做什么呢其实它就是一种能进行数学和逻辑运算根据不同使用对象完成不同控制任务的面向控制而设计的集成电路此话好象有点绕口没关系大家都应该知道我们经常使用的电脑吧在电脑上我们可以用不同的软件在相同的硬件上实现不同的工作比如我们用WORD可以打字用PROTEL可以设计图纸等等单片机其实也是如此同样的芯片可以根据我们不同的要求做出截然不同的产品只不过电脑是面向应用的而单片机是面向控制的比如控制一个指芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715377示灯的亮和灭控制一台电机的启动和停止等等那么它的内部究竟由哪些部件组成的呢大家都知道我们的电脑有很多的零件比如CPU中央处理器RAM内存条ROM程序存储器有点象硬盘输入输出设备并行口串行口等等在单片机中这些部件都有而且还把它们全部做到了一块芯片上这就是单片机名称的由来讲到这里您一定会想这么多零件集成在一块芯片上那为什么单片机的价格会这么便宜89S51每块才10元不到其实原因很简单----功能有强弱就象我们平时用的PLC控制一台数控机床要用128点的而控制一台电机有几点的就足够了另外这种芯片的产量很大技术也非常的成熟自然价格也就很低了说到这里你是不是有点心痒了也想学习学习那么学习单片机究竟需要些什么设备又要做哪些准备呢对于一个初学者来说了解这些真的是很有必要哦尽量化最少的钱毕竟是大家的想法嘛四学习单片机的准备工作首先您需要一台电脑这是最基本的配置嘛P2以上的就可以了然后您需要一套开发单片机的软件这个软件叫KEILC51它是美国KeilSoftware公司专门为MCS-51系列单片机开发的第三方软件它的免费测试版可在www.
keil.
com上下载也可以在各种单片机网站上下载最新版本是V6.
23安装时选择Uvision2虽然有2K代码的限制但足以满足我们学习的需要其次您还需要一台编程器它是一种把程序写进单片机芯片的设备这种设备品种很多操作也很简单大家既可以买现成的产品价格从200多元到2000多元的都有也可以自己制作有了这两样东西还不行为了看到程序执行的结果我们还需要一块实验板因为现在没时间学习系统我也不做了以前做的还有一些零件大家如果有需要我可以送给大家具体的说明在电子爱好者园地上有时间自己去看一下网址www.
fj136.
com/bbs/index.
asp实验系统的介绍看下面的内容传统的单片机实验过程都是先用KEILC51或其他的单片机开发软件把源代码汇编成HEX或BIN文件然后用编程器把汇编文件烧写入单片机中再把单片机插入实验板中才能看到软件的执行结果对于一个单片机初学者来说不仅非常的麻烦而且必须配置一套编程器和实验板就目前市场上最便宜的编程器来说投资也要300多元如此一来使得很多想学单片机但又不想花太多钱的爱好者忘而却步好在现在出现了一种支持在线下载的单片机只要满足一定的外部条件就能够直接把汇编的程序下载到目标单片机中经过实验我们开发设计了这样的一套实验系统它采用了一套集源代码编辑软件汇编程序下载于一体的专业软件采用具有在线下载功能的FLASHROM单片机89S52配合芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715378本教程可以完成教程中的每一个实验这样既免去了您添置编程器和仿真器等设备的昂贵费用又可以直接在实验板上看到程序执行的结果更由于采用的是FLASHROM的存储器烧写次数可以达到1000次以上产品具体电路图在教程的最后面附录中为了尽量降低大家的学习费用我们采用了模块化的设计方法在您学习上册时只需购买实验系统的主机部分包括了8个发光二极管2个数码管4个功能按键1个蜂鸣器一个串行芯片和成品外客完全可以做上册中的每一个实验当您开始学习下册时可以再购买扩展模块现在开发的扩展模块包括A/DTLC0831和D/AMAX517转换外部RAM6264和外部ROM29F020存储器16*16汉字显示点阵I2C总线24C01和温度转换DS18B20日历时钟DS1302和液晶字符模块T6963驱动的240*128中文图形点阵等如果你把这些都学会了那就得恭喜您因为您已经基本学会了使用MCS-51系列单片机四第1课习题1单片机的分类有几种2单片机与计算机有什么区别芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通715379第二课单片机硬件结构和开发过程从这一课开始我们就要正式开始学习MCS-51单片机了前面我们曾经提到过单片机的内部结构是由CPUROMRAM等等组成它们的内部结构我们以后再讲这一课让我们先来看看它的外部引脚即硬件结构看下面的图这就是我们要实验用的89C51单片机的外部引脚图给大家简单介绍一下一单片机的引脚功能1VCC40脚接电源+5V2VSS20脚接地也就是GND3XTAL119脚和XATL218脚接振荡电路单片机是一种时序电路必须有脉冲信号才能工作在它的内部有一个时钟产生电路有两种振荡方式一种是内部振荡方式只要接上两个电容和一个晶振即可另一种是外部振荡方式采用外部振荡方式时需在XTL2上加外部时钟信号详细的内容将在以后的课程中专门介绍4PSEN29脚片外ROM选通信号低电平有效5ALE/PROG30脚地址锁存信号输出端/EPROM编程脉冲输入端至于它们的作用我们暂时不去管它等以后学到相关的知识时再来研究它这也许就是本教程区别于其他教材的最大特点----先实践后理论尽量用实验结果来总结理论知识因为单片机是一种通用的产品它的功能设计是为了满足大多数使用者的要求换句话说不同的使用者只会使用其相关的功能几乎不可能把全部的功能都用起来因此我们完全不必象学习其他电子技术那样把单片机的全部知识都搞懂了再去开发产品这话前面好象说过了打住6RST/VPD9脚复位信号输入端/备用电源输入端什么是复位信号为什么要加复位信号当然也暂时不去管它7EA/VPP31内/外部ROM选择端在30脚9脚的功能上不知大家注意没有都有一个/什么意思呢这是引脚的第二功能也就是说该引脚既可以作前面的功能也可以作后面的功能至于它是如何工作的我们暂时也别去研究它芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通71537108P0口39-32脚双向I/O口9P1口1-8脚准双向通用I/0口10P2口21-28脚准双向I/0口11P3口10-17脚多用途口I/O就是英文IN/OUT的缩写这些引脚的功能想必大家也都明白了就是输入/输出的意思这32个I/O口就是留给我们作连接外围电路用的那么它们之间有些什么不同呢这个问题稍微有点复杂我们将在稍后再来专门学习现在我们先来往下看二单片机的电路连接和开发过程看最后面的附图这就是我们做实验用的电路图想必大家都能看得懂吧接下来就让我们通过一个实验来看看单片机是如何工作的我们的实验是让一个LED灯亮起来亮哪一个这就随便你了比如我们就让LED1亮起来吧仔细看一下电路图LED1接在什么地方呢接在单片机的P1.
0的引脚也就是1脚上那么按照该电路图的连接方法当1脚为高电平时LED1是不亮的只有当1脚为低电平时LED1才会亮起来怎样才能让1脚由高电平变为低电平呢我们让人做事就必须对她说一声也就是发布命令想让单片机工作也得发布命令不过在计算机中那叫指令我们要让1脚变为低电平的指令是CLRP1.
0让1脚变为高电平的指令是SETBP1.
0这就是我们通常所说的源代码这是我们实验的第一步—源代码编辑怎么做呢我们首先得打开实验软件屏幕出现一个浏览器的软件窗口点击左边的扩展实验选中实验16—自动温度控制器再点击工具栏里的调试按钮弹出一个记事本对话框写入CLRP1.
0;(注意分号必须在英文状态下输入)输入完毕后选择文件保存即可那么单片机能读懂这条指令吗当然不能接下来我们还有一件事情要做就是把这句指令翻译成单片机能读懂的东西单片机能读懂什么呢它其实只懂一样--就是数字因此我们就把CLRP1.
0翻译成C2H,90H至于为什么要翻译成这样这当然是INTEL公司规定好的我们就不需要去研究它了这个过程我们叫作编译这是我们实验的第二步那么指令是怎么编译过来的呢这就得靠专业的软件了我们做实验使用的软件就有此功能只要点击工具栏上的编译按钮稍等片刻即出现一个编译信息窗口如果编译通过就会有编译完成结果如下0个警告0个错误的编译信息如果编译错误则会出现编译错误的信息并提示错误的行号编译完了之后通常要进行程序仿真这是第三步当然我们的实验程序很简单是不需要仿真的接下来怎么才能把编译通过的指令写入单片机中呢这通常需要借助于一种硬件工具叫编程器也叫烧录器不过我们的实验板采用的是具有串行下载功能的单片机所以您只要直接点击快捷工具栏上的下载按钮程序就进入了实验板这是第四步—编程自此就完成了单片机实验的全过程全部工作结束后我们看到了什么接P1.
01脚的LED1亮了起来改变源代码变成SETBP1.
0;进行编译下载看看结果是不是LED1不亮了怎么样不难吧最后让我们来思考一个问题当我们用编程器把编译后的指令写入单片机时单片机就开始执行这条指令那么这条指令就一定在单片机内部的某个地方它究竟在哪里呢单片机的内部结构又是怎么样的呢这将是我们第三课要讨论的内容—单片机的内部结构一半导体存储器三本课总结本课主要讲述了单片机实验的整个过程这个过程包括第一步—编辑源代码第二步—编译源代码第三步—程序仿真第四步—芯片烧写亦称编程希望大家记住这四步这是非常关键的哦单片机的硬件原理其实并不复杂本来嘛单片机的设计就是为了通用和灵活所以开发单片机最重要的就是软件的编写以后我会慢慢地教大家学习更多的软件知识四第2课习题189C51的电源电压是多少伏2熟练掌握编译软件的使用方法芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153711第三课单片机的内部结构一单片机的内部究竟有哪些部分组成的它们都有些什么作用呢让我们看下面的图这就是单片机的内部方框图我们先来了解其中的ROM存储器吧一半导体存储器ROM1几个基本概念上一课我们讲到了把编译后的指令下载到单片机后这条指令一定在单片机内的某个地方那么它究竟在哪里呢原来它就放在一个叫程序存储器的地方英文名称ROM全称为ReadOnlyMemory叫只读存储器它是一个什么东西呢在讨论这个问题之前让我们先来看几个物理现象1数和物理现象的关系不知大家是否还记得在学习数字电路时我们曾用一盏灯的亮和灭来表示电平的高和低即用1来表示高电平用0来表示低电平如果现在有两盏灯那它会有几种状态呢请看下面的表00011011两盏灯的组合就是四种状态00011011这样看来灯的亮和灭这种物理现象同数字确实有着某种联系如果我们把它们按一定的规律排好那么电平的高或低就可以用数字来表示了换句话说不同的数字可以代表不同数量灯的电平高或低比如0000000100100011010001010110011110001001101010111100110111101111这十六种组合就可以代表四盏灯的状态能理解吗2位及字节的含义芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153712在单片机中一盏灯实际上是一根线我们称它为一位它有两种状态0或1分别对应电平的高或低它是单片机最基本的数量单位用BIT来表示8盏灯八根线有256种状态这8盏灯也就是8位我们把它称为一个字节用BYTE表示至于为什么要怎么规定这就不需要你我操心了我们只要记住就可以了那么单片机是如何来储存这些数字所代表的字节的状态的呢接着往下看2半导体存储器的工作原理1存储器的内部构造看下面的图这就是半导体存储器的结构简图(图中有4个字节)2存储器的工作原理存储器就是用来存放数据的地方它其实是利用电平的高或低来存放数据的也就是说它实际上存放的是电平的高或低的状态而不是我们所习惯上认为的1234这样的数字那它是如何工作的呢看上面的图这就是存储器的内部结构示意图一个存储器就象一个小抽屉一个小抽屉里有8个也就是单片机的8位小盒子每个小盒子用来存放1位电荷电荷通过与它相连的电线传进来或释放掉至于电荷在小盒子里是怎样存放的这就不用我们操心了您可以把电线想象成水管小盒子里的电荷就象是水那就好理解了存储器中的1个小抽屉我们把它称之为1个单元相当于1个字节而1个小盒子就相当于1位有了这么一个构造我们就可以开始存放数据了比如我们要放进一个数据00011010我们只要把第2号第4号和第5号小盒子里存满电荷而其它小盒子里的电荷给放掉就行了可是问题又出来了一个存储器有好多相同的单元线是并联着的看D7-D0在放入电荷的时候会将电荷放入所有的字节单元中而释放电荷的时候会把每个单元中的电荷都放掉这样的话不管存储器有多少个字节单元都只能放同一个数这当然不是我们所希望的因此我们要在结构上稍作变化看上面的图在每个单元上有根线与译码器相连我想要把数据放进哪个单元就通过译码器给哪个单元发一芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153713个信号由译码器通过这根线把相应的开关打开这样电荷就可以自由地进出了那么这样是不是就能随意地向存储器写入或者读出数据了呢其实还不能继续看上面的图与D7-D0相连的还有一个控制器它是用来干什么的呢这根线叫写入/读出控制线当我们向存储器写入数据时必须先把这个开关切换到写入端而要读出数据时就得先把开关切换到读出端而片选端则是为了区分不同的存储器设置的这里没搞明白没关系后面还有介绍先让我们来看看译码器是如何工作的3半导体存储器的译码简单介绍一下我们知道1根线可以代表2种状态2根线可以代表4种状态3根线可以代表8种256种状态又需要几根线代表自己想一下是不是8根线4存储器的选片及总线的概念至此译码的问题解决了让我们再来关注另外一个问题送入每个字节的8根线又是从什么地方来的呢它就是从单片机的外部引脚上接过来的一般这8根线除了接一个存储器之外还要接其它的器件这样问题又来了这8根线既然不是存储器和单片机之间专用的如果总是将某个单元接在这8根线上就不行了比如这个存储器单元中的数值是11111111另一个存储器的单元是00000000那么这根线到底是处于高电平还是低电平所以我们必须让它们分离办法当然也简单当外面的线接到集成电路的引脚上来后不直接接到各单元去而是在中间加一组开关这组开关就是前面提到的控制器看前面的图平时我们让开关打开着如果确实是要向这个存储器中写入数据或要从存储器中读出数据再让开关切换到相应的位置就行了这组开关由三根引线选择读控制端写控制端和片选端要将数据写入先由控制器选中该片然后发出相应的写信号开关切换到相应的位置并将传过来的数据电荷写入片中如果要读信号先选中该片然后发出读信号开关也切换到相应的位置上数据就被送出去了另外读和写信号还同时受到译码器的控制由于片选端的不同所以虽有读或写信号但没有片选信号所以另一个存储器就不会误会而开门造成冲突那么会不会同时选中两个存储器呢只要是设计好的系统就不会如果真的出现同时选中两个存储器的话那就是电路出故障了如此看来存储器要想写入或者读出数据还真是不容易不过好在这些都是由计算机自动完成的不需要我们去操心从上面的介绍中我们已经看到用来传递数据的8根线并不是专用的而是很多器件大家共用的所以我们把它们称之为数据总线总线英文名为BUS即公交车道谁都可以走而16根地址线51单片机共有16根地址线这些以后会讲解这里不必死记硬背也是连在一起的我们把它们称之为地址总线看上面的图对于本小节的内容如果您一时还无法理解没有关系继续往下看好了我们会在以后的课程中再来详细的介绍这里你只要稍微的了解一下就可以了芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通71537145半导体存储器的分类第一课中我们提到过89C51是一种带FlashROM的单片机什么是FlashROM它到底是一种什么东西呢ROM我们已经知道是只读存储器所谓只读从字面上理解那就是只可以从里面读出数据而不能写进去它类似于我们的书本发到我们手里之后我们只能读里面的内容不可以随意更改书本上的内容ROM就是单片机中用来存放程序的地方前面我们下载到单片机的指令就放在这个地方讲到这里大家也许会感到困惑既然ROM是只读存储器那么指令又是如何进入其中的呢其实所谓的只读只是针对工作情况下而言也就是在使用这块存储器的时候而不是指制造这块芯片的时候只要让存储器满足一定的条件就能把数据预先写进去这个道理也很好理解书本拿到我们手里是不能改了但当它还是原材料--白纸的时候我们完全可以由印刷厂把内容印上去嘛前面的编程就是这么回事FlashROM是一种快速存储式只读存储器这种程序存储器的特点是既可以电擦写而且掉电后程序还能保存编程寿命可以达到一千次左右所以我们的实验系统是可以反复烧写的你尽管使用目前新型的单片机都采用这种程序存储器当然除了这种程序存储器外还有两种早期的程序存储器产品简单介绍一下PROMEPROM和EEPROMPROM称之为可编程只读存储器就象我们的练习本买来的时候是空白的可以写东西上去可一旦写上去就擦不掉了所以它只能写一次要是写错了就报废了习惯上我们把带这种程序存储器的单片机称为OTP型单片机如果您的产品批量生产又要求价格比较低的话带这种程序存储器的单片机是非常合适的EPROM称之为紫外线擦除的可编程只读存储器它里面的内容写上去之后如果觉得不满意可以用一种特殊的方法去掉后重写就是用紫外线照射紫外线就象消字灵可以把字去掉然后再重写当然消的次数多了也就不灵光了所以这种芯片可以擦除的次数也是有限的—几十次吧电脑上的BIOS芯片采用的就是这种结构的存储器EEPROM前一种存储器的擦写要用紫外线而这种存储器可以直接用电擦写比较方便数据的改写它有点类似于FLASH存储器但比FLASH存储器速度要慢现在新型的外部扩展存储器都是这种结构的有关这几种程序存储器的使用和原理我们将在下册中详细的介绍这里就不多讲了总之一句不管哪种程序存储器它们的作用都只有一个----就是用来存放程序也就是我们为单片机编写的指令了解了ROM让我们再来简单讲讲另一种存储器叫随机存取存储器也叫内存英文缩写为RAMRandomAccessMemory它是一种既可以随时改写也可以随时读出里面数据的存储器类似于我们上课用的黑板可以随时写东西上去也可以用黑板擦随时擦掉重写它也是单片机中重要的组成部分单片机中有很多的功能寄存器都与它有关详细内容后面再讲二本课总结本课主要讲述了单片机的两种半导体存储器—只读存储器ROM和随机存储器RAM的工作原理它们是单片机的重要组成部分了解它的内部结构对我们学习单片机是很有帮助的不过如果您一时对本课的内容还无法搞得很明白也没有关系随着学习的深入我们还会慢慢地讲解相应的基础知识可千万不要放弃哦我在没有学会单片机之前也是如此囫囵吞枣的三第3课习题1半导体存储器分为几大类2ROM存储器的作用是什么3什么是位什么是字节4为什么8根线在单片机中会有256种状态它是如何出来的589C51的ROM有多少字节的容量芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153715第四课单片机的内部结构二上一节课我们讲了半导体存储器ROM和RAM的内部结构大家是不是觉得有些枯燥了这一课让我们先来做一个实验一LED灯闪烁的实验程序还记得第二课中的实验吗这个实验在实际应用中太没有意义了接下来我们要让LED1不断的闪烁就象高楼上或者大海中用的航标灯这个实验可是非常经典的几乎所有的单片机实验都要提到那么怎样才能让LED1不断的闪烁呢实际上就是让它亮几秒再灭几秒也就是让P1.
0交替地输出高电平和低电平怎样来实现这个功能按照前面所学的知识我们写出下面的程序CLRP1.
0SETBP1.
0编译后下载到单片机结果不行为什么这里有两个问题首先计算机执行指令的速度很快执行完第1条指令后LED1是灭了但在极短的时间内又去执行了第2条指令LED1又亮了我们根本无法看到灯曾经灭过第二个问题是当执行完第2条指令后不会再去执行第1条指令了因为单片机执行指令的过程是一条一条地顺序执行的如何解决这两个问题呢我们可以作如下的设想第一执行完第1条指令后让单片机延时一段时间几秒或零点几秒然后再去执行第2条指令这样就可以看到LED1曾经灭过了第二让单片机执行完全部指令后再返回去执行第1条指令如此不断的循环就可以达到我们的要求了实验程序如下主程序MAIN:SETBP1.
0;LCALLDELAY;CLRP1.
0;LCALLDELAY;LJMPMAIN;子程序DELAY:MOVR7,#250;D1:MOVR6,#250;D2:DJNZR6,D2;DJNZR7,D1;RET;END.
发现许多朋友很聪明喜欢把这里的内容复制了直接粘贴到实验系统中这对你的学习很不利所以现在的PDF文档我把它加密了看你再偷懒呵呵别怪我我也是为了你好*^*还记得软件的使用方法吗调试写入源代码编译下载到单片机看看是不是我们想要的结果在分析这段程序之前先来说明几个标点符号的意义1.
分号在这里起一个分隔符的作用表示这条指令到此为止2.
括号内的数字在这里是为了解释程序用的实际的编译过程中是没有意义的也就是说没有也是一样的只是为了程序的可读性更强我们一般会在分号的后面加上程序的注释文字后面我们会用到3.
特别程序中的标点符号只能在英文状态下输入当使用中文输入时必须切换到半角状态不然编译软件会出错接下来我们分析一下这段程序按照我们的要求第1条让灯灭第2条应该是延时第3条是让灯亮第4条和第2条一样也应该是延时第5条应当返回去执行第1条指令看一下上面的程序第1条我们已经懂了是让LED1灭第2条和第4条我们等一下讨论第5条是LJMPMAINLJMP是芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153716一条指令意思是转移转移到什么地方去呢看一下LJMP后面跟着什么是MAIN什么地方有MAIN在第1条指令的开头就是MAIN所以第5条指令的意思就是跳转到MAIN即第1条指令处继续执行如此一来就不断地重复执行这些指令那么MAIN又是什么意思呢它实际上是我们为这段程序起的一个名称专业术语叫标号既然是一个名称那可不可以用JIGUOCHINA等等的其他名字呢当然可以这完全取决于您的需要不过也有一些是不能采用的我们以后会讲再来分析第2条和第4条指令看看它们是如何实现延时的LCALLDELAYLCALL也是一条指令这条指令叫做调用子程序指令看看LCALL后面跟着的是什么--DELAY哪里有DELAY在第6条指令的开头很显然这也是一个标号这条指令的作用就是当执行到这条指令时就转去执行LCALL后面标号所在处的程序如果在执行程序时遇到RET指令RET叫返回指令就返回到LCALL指令的下面一条即第3条指令处继续执行在第9条指令后确实有RET指令那么在执行完第2条指令后就应该去执行第6.
7.
8.
9条指令之后遇到第10条指令RET执行完这条指令后就回去执行第3条指令将P1.
0清零也就是让LED1亮然后再去执行第4条指令执行完后又回到6.
7.
8.
9.
10条指令最后执行第5条指令LJMPMAIN也就是我们刚才说的跳转到第1条将P1.
0置位就是让LED1灭掉如此周而复始LED1就不断的闪烁好好理解这段文字务必把它搞清楚从标号DELAY处即第6条开始到RET的这一段指令我们称之为子程序它是一段延时程序至于延时多长时间我们会在下一课中学习程序的最后一条是END它不是指令它只是告诉编译软件整个程序到此结束了它叫伪指令在大家以后的编程中写完程序都要加上这一条在上面的程序中我们知道了从标号DELAY开始的子程序是一段延时程序那么它又是如何工作的呢在了解它的工作过程之前我们必须先知道其中的一些符号就从R7开始吧它是单片机内部的一个重要组成部分叫工作寄存器什么是工作寄存器下面我们就来讲解这个问题二工作寄存器上一课我们已经讲过在单片机中有许多的功能寄存器和半导体存储器RAM有关那么工作寄存器又属于哪一部分呢它是用来干什么的呢要搞清楚这个问题让我们先从日常生活中的一个例子说起比如我们要做一道数学题123+456您会马上得出答案579接下来再看一道题123+456+789要你马上得出答案就不那么容易了通常我们会怎么做呢一般总是先把123+456的结果579写在一张纸上然后再算579+789=1368这1368就是我们想要的最终结果而579只是为了得到最终结果而暂时记下来的中间结果单片机中做运算和我们生活中做运算一样也需要把中间结果放在某个地方那么计算机把它放在哪儿呢前面我们提到的ROM只读存储器中不行因为ROM是用来放程序的它只能写进去不能读出来再次提醒一下这只是相对而已所以只能放在单片机的另一个区域—RAM中即随机存取存储器中R7就是RAM区域中划出的一部分知道了R7接下来让我们来分析一下这段子程序延时程序三LED灯闪烁程序子程序的分析首先看第6条MOVR7#250这也是一条指令意思是传递数据我们知道在日常生活中要传递一件东西就必须要有一个传递者一个接受者和被传递的东西那么在单片机中是怎么区分它们的呢在这条指令中R7是接受者250就是要传递的东西单片机中要传递的东西当然是数字了这里传递者被省略了顺便提一下并不是每条指令都能省略的事实上大部分的指令都要有传递者这样一来这条指令的意思也很清楚了就是把250这个数传递给R7这个工作寄存器也就是把250这个数送入R7中这样执行完这条指令后R7中的值就应该是250我们可以用DBG8051这个软件来验证一下看是不是符合这个软件的使用很简单大家可以预先学一下比如我们写下面的指令MOVR7#01MOVR6#02输入后按F8看看右边的特殊/工作寄存器窗口中R6R7的值是不是01H02H注意实际显示的值是十六进制数由于我们输入的十进制数为了直观的看到执行结果所以数值不要太大了这里还有一个问题不知大家注意没有在250这个数的前面有个#它是什么意思呢这个#就说明250是一个被传递的数的本身而不是传递者这里面是有区别的我们以后会讲到看懂了MOV芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153717R7#250那么MOVR6#250也应该很清楚了接着看第8条DJNZR6D2这又是另一条指令我们来看一下DJNZ后面跟着什么一个是R6一个是D2R6我们已经知道了再找一下D2D2在本行的开头我们已经学过它是标号那么这条指令是怎么执行的呢它的执行过程是这样的它将后面的值即工作寄存器R6中的值减1然后查一下这个值是否等于0如果等于0就往下执行如果不等于0就转移转移到什么地方去呢大家应该明白了实际上这条指令的执行结果就是在原地转250次当R6中的值等于0之后程序就去执行第9条指令也就是DJNZR7D1大家自行分析一下这条指令的结果是不是转去执行MOVR6#250同时R7中的值减1这段子程序的最终执行结果就是DJNZR6#250这条指令被执行了250*250=62500次执行这么多次干吗就是为了延时四本课总结大家可以改变一下MOVR6#250这条指令中的值注意不能大于255为什么以后会讲到或者改变一下标号的名称看是不是符合上面的分析接下来提一个问题通过实验我们看到了LED1在闪烁是因为DJNZR6#250这条指令被执行了250*250=62500次执行那么多次究竟需要多长时间呢下一课我们再来专门讨论这个问题这里有必要介绍一下DBG8051这个软件它是一个专为8051单片机设计的仿真软件配合MON51仿真机能进行51单片机的仿真拥有这样一套设备在过去可是非常奢侈的不过现在已经很少有人使用它了原因是目前市场出现了许多兼容KEILC51的仿真器它们的功能更先进MON51只能属于淘汰产品不过作为单片机初学者使用DBG8051还是很有意义的相比其他的开发工具它的使用比较简单我们可以用它来理解单片机的内部结构和程序的执行结果在我们实验套件的随机光盘中有这个软件希望大家有时间好好的看一看五第4课习题1什么是主程序什么是子程序2标号的含义是什么3单片机是如何执行程序的4工作寄存器属于ROM单元还是RAM单元5在实验中如果没有RET指令会出现什么情况6理解指令LCALLLJMPDJNZ的意义7掌握DBG8051软件的使用方法芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153718第五课单片机的内部结构三上一课中我们提到了DJNZR6#250这条指令被执行了250*250=62500次就产生了延时那么这个时间是多少呢它又是如何计算出来的呢这一课就来讨论这个问题一单片机的时序1时序的由来我们已经知道单片机执行指令的过程就是顺序地从ROM程序存储器中取出指令一条一条的顺序执行然后进行一系列的微操作控制来完成各种指定的动作它在协调内部的各种动作时必须要有一定的顺序换句话说就是这一系列微操作控制信号在时间上要有一个严格的先后次序这种次序就是单片机的时序这就好比我们学校上课时用的电铃为了保证课堂秩序学校就必须在铃声的统一协调下安排各个课程和活动那么单片机的时序是如何规定的呢接着往下看2时序的周期计算机每访问一次存储器的时间我们把它称为一个机器周期它是一个时间基准就象我们日常生活中使用的秒一样计算机中一个机器周期包括12个振荡周期什么是振荡周期一个振荡周期是多少时间振荡周期就是振荡源的周期也就是我们使用的晶振的时间周期一个12M的晶振它的时间周期是多少呢电子技术过的朋友应该不难算出T=1/f也就是1/12微秒那么使用12M晶振的单片机它的一个机器周期就应该等于12*1/12微秒也就是1S在89C51单片机中有些指令只要一个机器周期而有些指令则需要两个或三个机器周期另外还有两条指令需要4个机器周期这也不难理解你在家擦地板的话总比擦桌子的时间要长不过我可是大男子主义从来不做家务的开句玩笑如何衡量指令执行时间的长短我们就要用到一个新的概念指令周期—即执行一条指令所需的机器周期INTEL公司规定了每一条指令执行的机器周期当然这不需要我们非把它记住不过在这里DJNZ指令我们是要记住的它是双周期指令执行一次需要两个机器周期即2S12M晶振的话回到我们上一课的实验延时的时间就应该算出来了吧是62500*2S=125000S也就是125mS这么大的数字也就0.
125S怪不得LED1闪烁的这么快这里给大家出个题目在上一课的实验中如何延长闪烁的时间想想看怎么做当然不会也没关系二单片机的时钟电路大家已经知道单片机是在一定的时序控制下工作的那么时序和时钟又有什么关系呢时钟是时序的基础单片机本身就如同一个复杂的同步时序电路为了保证同步工作方式的实现电路就要在唯一的时钟信号控制下按时序进行工作那么单片机内的时钟是如何产生的呢1内部时钟电路芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153719在MCS-51单片机的内部有一个高增益的反相放大器其输入端为引脚XTAL119脚输出端为XTAL218脚我们只要在外部接上两个电容和一个晶振就能构成一个稳定的自激振荡器它的内部电路的工作原理就不介绍了这里主要讲一下电容和晶振的选择看上面的图晶振的大小与单片机的振荡频率有关我们到串行接口时再详细讲解电容的大小影响着振荡器振荡的稳定性和起振的快速性通常选择10-30P的瓷片电容或校正电容另外在设计电路时晶振和电容应尽可能的靠近芯片以减少PCB板的分布电容保证振荡器工作的稳定性提高系统的抗干扰能力2外部时钟电路除了内部时钟方式外单片机还可以采用引入外部时钟的振荡方式什么时候需要采用外部时钟方式呢当我们的系统由多片单片机组成时为了保证各单片机之间时钟信号的同步就应当引入唯一的公用的外部脉冲信号作为各单片机的振荡脉冲此时应将XTAL2悬空不用外部脉冲信号由XTAL1引入如上右图所示这是大虾们的作品在此就不介绍了三本课总结本课的内容比较少我就罗嗦一下讲几句题外话我是一个只有初中毕业没有读过多少书的人从小就爱好无线电记得很小的时候当通讯兵的父亲带回来几本电子方面的书籍从此就迷上了无线电那种痴迷程度决不亚于现在的小孩迷恋游戏机至今仍然清楚的记得曾经因为装成功一台6管收音机而兴奋的几天几夜没睡好觉那个时候我国的电子工业还刚刚起步买一个3AX31的三极管都要特地跑到市区而且价格奇贵几乎要用去一个月的零化钱当时最愿意去的地方就是上海的虬江路电子旧货市场因为在那里可以淘到好多旧的电子元件初中毕业以后在当地根本就找不到一家电子企业只好在镇上开了一家电器修理店也就是这几年边干边做地学了不少在今天已根本无法再学得进去的电子啊空穴啊移位啊寄存啊等等理论知识由于身边没有一个可以请教的老师为了加深学习的印象所以只好一边做实验一边学理论尽管进度很慢但效果竟然还不错好在当时搞家电修理的收入还可以加上没有家庭负担也就这么过来了随后的几年做过工人也当过老师但更多的时间是在搞技术开发这些年来看到很多的昔日同学靠导腾房地产或者做生意发了财可自己依然还在这个领域默默无闻的钻研着但我还是没有后悔也从来没有想过改行因为电子技术那众多迷人而未知的领域常常会使我深深地陷入其中以至无法自拔也感叹自己搞了这么多年还只是一个入门者现在老是听到有些年轻的朋友说我要速成单片机速成C语言速成什么什么的每当我看到或听到这些话的时候总有一种说不出的滋味现在的社会什么都讲究个效率这本来没有错但学一项技术也能速成实在让人有点不知道说什么好就单片机而言即使你现在只有156岁也很有天赋想把现在的几种主流单片机都搞懂并很好的应用到实践中去没有个几年恐怕也难更何况单片机的技术是在不断发展的你想跟也来不及不过话又说回来我不是要打击大家的学习积极性单片机是一种非常宽泛的技术它的设计是为了满足大多数的需要换言之即使你并没有把全部的知识都理解得很深透或者说没有把每种单片机都搞懂也没关系你一样可以在实际的产品开发中应用它因为几乎没有一个产品会把全部的指令都用起来好了废话讲了半天还是言归正传吧希望大家课后多进行交流因为在我看来技术只有不断的交流才会有进步闭门造车只有S路一条四第5课习题1什么是单片机的机器周期什么是振荡周期什么是指令周期它们之间的关系是怎么样的2什么是单片机的时序3单片机有几种振荡方式4简述单片机内部时钟的产生过程芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153720第六课单片机的内部结构四在前一课中我们讲述了单片机的时序和时钟大家是不是又觉得有些头疼了下面让我们再来做两个实验放松一下一单片机I/O口的输出实验1实验程序程序如下LOOP:MOVP1,#0FFH;LCALLDELAY;MOVP1,#00H;LCALLDELAY;LJMPLOOP;DELAY:MOVR7,#250;D1:MOVR6,#250;D2:DJNZR6,D2;DJNZR7,D1;RET;END还是老规矩调试写入源代码编译下载看到了什么8只LED灯都在闪烁注意前面的实验是让一个LED灯闪烁分析一下程序2程序分析这段程序和前面的程序比较有两处不同第1条原来是SETBP1.
0现在改为MOVP1#0FFH第3条原来是CLRP1现在改为MOVP1#00H为什么这样改了之后就变成了8只LED灯同时闪烁了原来P1代表了P1.
7-P1.
0的全部我们把它当作一个存储器单元即一个字节不过对一个存储器单元送数就应该用MOV指令了在这里P1P1.
7-P1.
0接的是LED灯也就是负载它起到了一个输出端的作用那如果把P1改为P0或P2或P3行不行呢答案是肯定的为什么我们稍后再谈接着看第2个实验二单片机I/O口的输入实验1实验程序程序如下MAIN:MOVP3,#0FFH;LOOP:MOVA,P3;MOVP1,A;LJMPLOOP;END.
同样的方法把程序下载到单片机按下第1个按钮第1个LED灯亮了按下第2个按钮第2个LED灯亮了松开按钮相应的灯就灭了是不是有点象工业控制中的点动控制原理分析一下这个程序2程序分析看附图的实验系统硬件接线图有4个按钮分别接到了P3.
2P3.
3P3.
4P3.
5引脚上再来分析一下程序第1条使P3口包括P3.
7-P3.
0全部为高电平为什么MOVP3#0FFH能使P3口全部为高电平我们在下一课中讨论第2条MOVAP3MOV我们已经知道是送数的意思这条指令的意思就是把P3口的数送到A中去A是什么呢我们也可以把它看成一个中间单元就象R7寄存器一样第3条指令就是把A中的数送到P1口去第4条是循环这些我们都已经见过当我们按下芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153721P3.
2所连接的按钮时#0FFH这个数就被送到了A中通过程序又送到了P1使P1.
2输出低电平LED3就亮了按下P3.
3-P3.
5连接的按钮对应的LED4-LED6也亮了松开按钮相应的LED灯就灭了如果把按钮接到P2.
0-P2.
7或P0.
0-P0.
7可不可以呢当然可以所以在这里P3口又起到了一个输入端的作用由上面两个实验我们得出结论凡是以P开头的管脚都可以用作输入输出口在89C51中这32个管脚我们就称之为并行口它们实际上就是特殊功能存储器SFR什么是特殊功能寄存器我们后面再讲中的四个记作P0P1P2P3它们都是双向通道即既可以作为输出口也可以作为输入口作输出时数据可以锁存作输入时数据可以缓冲锁存和缓冲是什么意思忘了我也不告诉你自己回去看数字电路基础呵呵不是我不肯讲只是自己看可以加深印象那么它们是怎么实现输入输出功能的呢继续往下看三单片机并行口的结构分析先来看看输入结构1输入结构I/O口作为输入口时有两种工作方式即所谓的读端口与读引脚读端口时实际上并不从外部读入数据而是把端口锁存器的内容读入到内部总线经过某种运算或变换后再写回到端口锁存器只有读端口时才真正地把外部的数据读入到内部总线上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作这是由硬件自动完成的不需要我们操心读引脚时也就是把端口作为外部输入线时首先要通过外部指令把端口锁存器置1然后再实行读引脚操作否则就可能读入出错为什么看上面的图如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q^为1加到场效应管栅极的信号为1该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1若先执行置1操作则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入由于在输入操作时还必须附加一个准备动作所以这类I/O口被称为准双向口89C51的P0P1P2P3口作为输入时都是准双向口接下来让我们再看另一个问题从图中可以看出这四个端口还有一个差别除了P1口外P0P2P3口都还有其他的功能这些功芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153722能又是作什么用的呢下面我们就来详细讲解这个问题2端口的工作原理1P0口先来看P0口从图中可以看到P0口的内部有一个2选1的选择器它受内部信号的控制如果在图中的位置则处在I/O口工作方式此时相当于一个准双向口输入时须先将口置1每根口线可以独立定义为输入或输出但是须在口线上加上拉电阻如果将开关往另一个方向则就是另一个功能—作为地址/数据复用总线用此时不能逐位定义为输入/输出它有两种用法当作数据总线用时输入8位数据而当作地址总线用时则输出低8位地址再强调一点当P0口作为地址/数据复用总线用之后就再也不能作I/O口使用了讲到这里也许大家会感到困惑什么叫作地址/数据复用这其实是当单片机的并行口不够用时需要扩展输入输出口时的一种用法具体如何使用这就比较复杂了我们只能留到下册课程中再来给大家讲解这里大家只要知道一下就可以了了解了P0口再来看P1口2P1口同P0不同P1口只能作为I/O口使用但它的内部有一个上拉电阻所以连接外围负载时不需要外接上拉电阻这一点P1P2P3都一样务必请大家记住3P2口P2口作为I/O口线用时与P0口一样当内部开关向另一个方向时即作地址输出时可以输出程序存储器或外部数据存储器的高8位地址并与P0口输出的低地址一起构成16位的地址线(注意和数据总线的区别数据总线是8位的很多书上都会提到51单片机是8位数据总线16位地址总线但都不会解释有什么不同看到这里你应该明白了吧)16位的地址可以寻址64K的程序存储器或外部数据存储器为什么下一课我们再给大家解释这里要注意的是当P2口作为地址总线时这高8位地址线是8位一起输出的不能象I/O口线那样逐位定义这和P0口是一样的4P3口P3口作为I/O口线用时同其他的端口相同也是准双向口不同的是P3口的每一位都有另一种功能也叫第二功能各位的功能如下它们的具体作用我们用到时再详细解释端口位第二功能注释P3.
0RXD串行口输入P3.
1TXD串行口输出P3.
2INTO外部中断0P3.
3INT1外部中断1P3.
4T0计数器0计数输入P3.
5T1计数器1计数输入P3.
6WR外部RAM写入选通信号P3.
7RD外部RAM读出选通信号讲到这里也许您会问既然单片机的引脚有第二功能那么CPU是如何来识别的呢这是一个令许多初学者困惑的问题几乎没有一本教科书提到过这个问题其实单片机的第二功能是不需要人工干预的也就是说只要CPU执行到相应的指令就自动转成了第二功能了解了各个I/O口的功能和作用后再来给大家讲解一下单片机I/O与外围电路的连接方法这可是蛮重要的哦四单片机I/O口的连接方法当单片机的I/O口作输出时可以直接与外部设备连接不过由于在实际的应用中由于其驱动电流是有限的DATASHEET上说是20mA所以我们常常需要通过接口电路来扩展它的驱动能力在单片机的后向通道控制系统中常用的功率控制器件有机械继电器晶闸管固态继电器等等下面我们将以机械继电器和固态继电器的应用为例介绍其具体的使用方法1单片机与机械继电器的接口我们知道单片机的一个I/O口只能灌入20mA的电流所以往往不足以驱动一些功率开关比如芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发六上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153723稍大一点的机械继电器等此时就应该采用必要的扩展电路如何来实现单片机与机械继电器的接口呢其实很简单我们通常采用下面的接法如图为了防止前向通道信号的干扰常采用一些光电隔离器件比如光电耦合器4N25PC814等当单片机的P1.
0脚输出为低电平时光藕受电导通Q1饱和开通继电器吸合负载电路接通另外为了防止电压间的互相干扰继电器的工作电压VDD与单片机的工作电压VCC不要使用同一个电源接地端也不要连在一起即所谓的模拟地与数字地分开驱动管的电流要大于继电器的工作电流,其他的元件就不讲了大家自行分析一下讲了单片机与继电器的接口再来介绍与固态继电器的接口方法接着往下看2单片机与固态继电器的接口普通继电器由于开关速度慢易跳火易机械磨损通常用于要求不高的场合在某些特殊应用场合比如防火防爆等系统中则应采用固态继电器固态继电器是一种无触点的电子继电器它的输入端只要很小的控制电流可以与单片机的I/O口直接连接输出则采用双向晶闸管控制其输入输出间均通过内部光电耦合器隔离可以防止信号间的干扰是单片机接口的理想器件随着其技术的成熟应用的广泛价格也已经非常的便宜1A/250V的目前在10元左右它与单片机的连接方法如图所示当-端所接的P1.
0为低电平时SSR导通负载工作除了以上两种连接方法外单片机与TTLCMOS管等都可以连接具体的方法这里就不介绍了大家可以自行找一下相关的资料五本课总结输入和输出口简称I/O口是单片机与外部电路接口的唯一途径四个并行口的结构是有一定区别的如何根据系统的设计要求和产品用途来正确灵活地使用是初学者必须掌握的基本功我们必须好好搞清楚它的功能和用途第6课习题1P0P1P2P3口的驱动电流分别是多少2什么是输入什么是输出3找本数字电路的书了解一下D触发器的原理芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153724第七课单片机的内部结构五在上一课中我们讲到了指令MOVP3#0FFH能使P3口全部为高电平而在第四课中LED灯闪烁程序中给R7送数用的指令是MOVR7#250那么这#250和#0FFH到底有什么不同它们又代表什么意思呢这一课就来讨论这个问题在讲解之前让我们先来复习一下数字电路中学过的数制概念一数制1十进制数DecimalNumber在日常生活中我们表示数的多少用的是十进制数即0123456789它遵循逢十进一借一当十的原则通常我们把计数符号的个数叫做基数十进制的基数就是十比如一个十进制数5847=5*1000+8*100+4*10+7*1它的每一个数码都有一个系数1000100101这个系数叫做权或位权十进制数虽然非常符合我们的使用习惯但计算机中却无法采用因为计算机只能有两种状态0和1所以我们还得应用二进制数2二进制数BinaryNumber二进制的基数为二0和1它遵循的是逢二进一借一当二的进借位原则也就是当某位计数到两个数时就向高位进同时本位变为比如二进制数1100=1*23+1*22+0*21+0*20二进制数只有0和1两个数正好代表了计算机中电路的两种工作状态所以它在计算机中被广泛应用下面是二进制的加法和乘法运算规则加法0+0=01+0=0+1=11+1=10乘法0*0=01*0=0*1=01*1=1二进制数虽然在计算机中处理很方便但当位数较多时就不容易记忆和书写了所以计算机中又有了十六进制数3十六进制数HexadecimalNumber十六进制也遵循两个规则一是有十六个基数即0123456789ABCDEF另一个规则是逢十六进一借一当十六比如我们前面提到的#0FFH就是一个十六进制数#--我们已经明白了它表示的是传递数的本身H叫数制简码它表示这个数是十六进制数为什么前面我在标题后面都加了英文注释相信大家也应该明白了吧这里随便提一下二进制简码B和十进制简码D通常是可以省略的我们以后的课程中用到的数都是这样写的那么0FFH这个十六进制数的表示方法是怎么样的呢用十进制就是表示0FFH=F*161+F*160即等于255大家也许会疑问这里的0到哪里去了呢原来在单片机中当我们用十六进制格式表示一个数时如果高位的数字为A-F时高位前面就得加上个0不然编译软件会出错就象#0FFH二进制之间的转换十进制有使用比较习惯的特点二进制有易于表示和运算方便的特点十六进制又有表示位数较多的特点但有时我们常常要把十进制数转换成二进制数或十六进制数来处理把二进制数逆转换成十六进制数如何进行这种转换呢下面就举几个例子1十进制数与非十进制数之间的转换1非十进制数转换为十进制数具体做法是将一个非十进制数按权展开成一个多项式每项是该位数码与相应权值之积把多项式按十进制的规则进行计算求和所得的结果就是该数的十进制形式比如二进制数1011B转换成十进制为1*23+0*22+1*21+1*20=8+2+1=11D再比如十六进制数FFH转换成十进制为255D2十进制数转换为非十进制数十进制数转换为非十进制数时可将其分为整数部分和小数部分分别进行转换最后将结果合并芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153725为目的数为了简单我这里只讲整数部分的转换这种转换叫做除基取余法具体做法是用欲转换数制的基数去除十进制数的整数部分第一次除所得余数为目的数的最低位把得到的商再除以该基数所得余数为目的数的次低位依次类推继续上面的过程直至商位为0此时所得余数为目的数的最高位比如将十进制数53D转换成二进制数为53D=110101B25322612130261230211012二进制数与十六进制数之间的转换四位二进制共有16种组合而这16种组合正好与十六进制数的16个基数一致所以每4位二进制数对应一位十六进制数我们只要把二进制数的整数部分自右向左每4位一组最后不足4位的用0补足小数部分自左向右每4位一组最后不足4位的在右面补0再将每4位二进制数对应的十六进制数写出即可相反如果将十六进制数转换为二进制数只需将每位十六进制数写成对应的4位二进制数即可比如将1101011B转换成十六进制数为D6H再比如将F0FH转换成二进制数为111100001111B十进制数二进制数十六进制数000000100011200102300113401004501015601106701117810008910019101010A111011B121100C131101D141110E151111F161000010上面的表格就是二进制数十进制数和十六进制数之间的对应关系三立即数的写法通过前面一小节的讲解我们已经懂了MOVR7#250和MOVR7#OFFH中#250和#0FFH原来是十进制数250D和十六进制数FFH的区别在单片机中通常我们把这个数称之为立即数那么如果我在编写指令时把立即数#0FFH写成二进制数即11111111或用十进制写法255是不是可以呢当然可以立即数既可以是二进制数也可以是十进制数或十六进制数讲到这里你应该明白了为什么我们前面的实验把#0FFH送到P3口会使P3.
7-P3.
0变为高电平这里再重复一遍那就是当用十六进制格式表示一个立即数时如果高位的数字为A-F时高位前面要加上个0请大家务必记住了这是一个常识问题可很多书上都不提所以很多人在做实验时往往会编译出错这里简单地讲了一下关于数制以及二进制十进制和十六进制数的关系大家可以在以后的实践芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153726中慢慢去理解和掌握如果您一时记不住千万不要刻意地去死记硬背下面让我们来讨论另一个问题四存储器的地址什么是存储器的地址地址和数据又有什么关系呢这个问题往往让初学者非常的难以理解既然单片机存储器内存放的是数据为什么还要有地址的概念让我们从生活中的一个例子谈起大家都知道寄信是怎么回事吧我们要寄一封信就必须写好信的内容然后在信的封面写上详细地址邮局才能按地址把它寄出去我们给单片机送数也一样除了要给出立即数犹如信的内容还必须知道这个数送达的地址犹如信的地址或邮政编码所以就必须给每个寄存器即半导体存储器都规定不同的地址只不过在单片机中地址的编码也是用数字来表示的那么单片机中有多少个寄存器呢它们的地址又是如何规定的呢前面我们学过单片机有两种存储器即只读存储器ROM和随机存储器RAM它们都被规定了各自的地址我们把它称做寻址空间既然是空间就必然有一个范围的概念接下来就让我们先看看89C51单片机内部程序存储器的寻址范围1内部R0M的寻址范围89C51的内部有4K的FLASHROM空间其寻址范围为000H-FFFH15162*15161*15160=0-4095这4K的ROM空间就是用来存放我们为单片机编写的程序用的单片机执行指令时就是一条一条顺序地从ROM中寻找指令进行执行了解了ROM的寻址范围让我们接着来看另一种存储器RAM的寻址范围2内部RAM的寻址范围89C51内部共有128个字节的RAM空间其寻址范围为00H-7FH怎么算出来的大家结合前面所学的知识自己理解一下它被分成三个区域第一个区域00H-1FH安排了4组工作寄存器每组用8个字节共32个字节分别为R0-R7当然在同一时刻只能用其中的一组工作寄存器怎么来控制它就要用到程序状态字PWS中的RS0RS1两位这我们后面再讲第二个区域20H-2FH共16个字节除了可以作为一般的RAM单元读写外还可以对每个字节的每一位即每一个抽屉中的每一个小盒子进行操作并且对这些位都规定了固定的位地址从20H单元的第0位开始到2FH单元的第7位结束共128位第三个区域就是一般的RAM单元地址为30H-7FH共80个字节实际上在89C51单片机的内部还有一个部分从80H-FFH是专门用于特殊功能寄存器SFR的89C51共用21个特殊功能寄存器这些我们都将在下一课中讲解它们每个也都有8位的这些特殊功能寄存器的使用和前面的128个字节RAM不同所以很多书上的解释都是89C51有128个字节的内部RAM实际上它们也属于内部RAM一部分为了加深印象大家可以打开DUG8051软件看一下它们的内部组成五本课总结本课主要讲述了数据与地址两个概念其中第一部分的内容在学习数字电路时大家应该学过我这里把与单片机有关的内容再讲解一下目的是希望各位能掌握这些知识因为它们对我们学习单片机是非常有用的数据和地址是单片机中一个非常重要的概念也是比较难以理解在我们以后的学习中大家会发现我还会更加详细的讲解这方面的相关知识六第7课习题1二进制十进制十六进制的规则分别是什么2什么叫立即数3单片机RAM的寻址空间为多少它包括哪两个部分4单片机ROM的寻址空间为多少5把下面的立即数转换成二进制100250100H4AHFFH6把下面的立即数转换成十进制000100111111A0HFFH7把下面的立即数转换成十六进制1002550011110011110101芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153727第八课单片机的内部结构六前面我们已经讲过R7R6是工作寄存器P0P1P2P3是并行口那么单片机中还有些什么东西它们的结构又是怎么样的呢这就是本课要讨论的问题一单片机的特殊功能寄存器看第三课的单片机内部结构图在单片机中除了前面介绍的RAMROMP0-P3和CPU外方框内的还有许多其他的东西它们被称为特殊功能寄存器英文简写SFR下表例出的就是MCS-51单片机中几个常用的特殊功能寄存器这一课我们先来介绍几个二几个常用的特殊功能寄存器1.
累加器ACC通常用A表示它是一个什么东西呢我们知道单片机在做运算时它的中间结果需要放在某个地方这个地方就是累加器它的名字很特殊功能也很特殊几乎所有的运算类指令都离不开它2.
寄存器BB寄存器在做乘法时用来存放一个乘数在做除法时用来存放一个除数不做乘除法时随你怎么用3.
程序状态字PSW它是一个很重要的东西里面放了CPU工作时的很多状态知道它就可以了解CPU当前的工作状态它有点象平时看书用的目录我们浏览它就可以了解一本书的内容它是一个8位的寄存器用到了其中的7位其格式如下D7D6D5D4D3D2D1D0CYACF0RS1RS00VP下面来逐位介绍它的功能1CY进位标志位MCS-51是一种8位的单片机它的运算结果只能表示到28即0-255但我们有时候的运算结果要超过255怎么办呢就要用CY位例如79H+87H01111001+01010111=100000000这里的1就进到了CY中去了2AC半进位标志位当D3位向D4位进位/借位时AC=1通常用于十进制调整运算中3F0用户自定义标志位由编程人员自行决定什么时候用什么时候不用4RS1RS0工作寄存器组选择位RS1RS0工作寄存器组000组00H-07H011组08H-0FH102组10H-17H113组18H-1FH前面讲到单片机共有四个工作寄存器组0组-3组它们就是由RS1RS0来控制这两位就在这里它共有四种组合状态看上面的表格每个工作寄存器组有8个字节分别记为R0-R7当然在某一时刻CPU只使用其中的一组假设PSW为11H即00010001那么RS1=1RS0=0则用到了第2组寄存器组地址10H-17HRO-R7即为10H-17H用DBG8051软件输入数值看看内部RAM中地址为10H-17H中的值是不是为输入值50V溢出标志位什么时候溢出我们讲到定时器时再研究芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通71537286P奇偶检验位每次运算结束后若A中二进制数1"的个数为奇数则P=1否则P=0例某运算结果是58H01011000显然1的个数为奇数所以P=14DPTRDPHDPL数据指针数据指针是一个16位的寄存器我们可以用它来访问外部RAM也可以访问外部ROM中的表格具体应用以后再讲5SP堆栈指针让我们先来理解一下堆栈是什么意思你在家洗碗吗我们洗好碗之后是怎么放的呢一般总是先洗的放在下面晚洗的放在上面然后用的时候呢总是晚放上去的先用先放上去的后用如果你不洗碗不要紧知道码头上仓库里堆的货物吗一般也是先进去的后出来而后进去的先出来这种符合先进后出后进先出存放规则的现象我们就把它叫做堆栈其实栈在中文中的意思就是码头在单片机中我们可以在内部RAM中构造出注意是可以构造这样一个区域这个区域存放数据的规则就符合堆栈中先进后出后进先出的原则为什么要有这样一个区域呢存储器本身不也同样可以存放数据吗是的知道了存储器地址确实可以读出它里面的内容但如果我们要读出的是一批数据每一个数据都要给出一个地址就会很麻烦为了简化操作就可以利用堆栈的存放方法来读取数据具体的应用我们将在十五课中结合具体实验来讲这里只是让大家先了解一下那么堆栈在单片机的什么地方也就是说把RAM空间的哪一块区域作为堆栈呢这就不好定了因为单片机是一种通用的产品每个人的实际需要各不相同有人需要多一些堆栈而有人则不需要那么多堆栈所以INTEL公司就干脆不分了把分的权利让给用户编程者也就是说我们可以根据自已的需要来决定所以单片机中堆栈的位置是可以变化的而这种变化就体现在SP中值的变化看下面的图SP中的值等于27H不就相当于是一个指针指向27H单元吗这就是堆栈指针的由来31H31H30H30H29H29H28H28H27H27H26H26H25H25H24HSP24H第一个数据当然在MCS-51单片机中指针开始所指的位置并非就是数据存放的实际位置而是数据存放的前一个位置例如一开始堆栈指针是指向27H单元的那么第一个数据的存放位置就在28H单元中而不是27H单元中这一点请大家注意6电源控制寄存器PCON单片机在以电池供电的系统中有时为了节电我们需要让它尽量降低电源的消耗所以单片机就有多种的工作方式其中一种就是低功耗方式PCON寄存器就是用来控制单片机进入低功耗方式的有关这方面的知识我们将在下一课的课程中详细介绍三本课总结以上几个寄存器只是单片机中最常用的几个SFR其他的特殊功能寄存器我们将在具体应用时再作详细的介绍四第8课习题1累加器A的作用是什么2什么是堆栈堆栈存放数据的规则是什么3单片机中有几组工作寄存器它们的字节地址是什么4简述PSW各位的作用芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153729第九课单片机的工作方式上一课中我们提到了单片机的工作方式单片机究竟有几种工作方式它们又是如何工作的呢这一课就来讨论这个问题一单片机的工作方式单片机共有复位程序执行低功耗和编程与加密四种工作方式下面分别加以介绍1复位方式1为什么要复位大家知道单片机执行程序时总是从地址0000H开始的所以在进入系统时必须对CPU进行复位也叫初始化另外由于程序运行中的错误或操作失误使系统处于死锁状态时为了摆脱这种状态也需要进行复位就象电脑死机了要重新启动一样2复位的原理单片机复位的方法其实很简单只要在RST引脚9脚上加一个持续时间为24个振荡周期即两个机器周期的高电平就可以了如果晶振为12M计算一下这个持续脉冲需要多长时间3如何进行复位复位操作有上电自动复位按键复位和外部脉冲复位3种方法它们的电路分别如下上电自动复位是通过外部复位电路的电容充电来实现的看图1当电源刚接通时电容C对下拉电阻开始充电由于电容两边的电压不能突变所以RTS端维持高电平只要这个充电时间不超过1ms一般都就可以实现对单片机的自动上电复位即接通电源就完成了系统的初始化在实际的工程应用中如果没有特殊要求一般都采用这种复位方式按键复位的电路如图2所示它其实就是在上电复位的基础上加了R1和SA这种电路一般用在需要经常复位的系统中外部脉冲复位的电路如图3所示外部复位通常用于要求比较高的系统比如希望系统死锁后能自动复位外部复位是由专门的集成电路来实现的也就是我们通常俗称的看门狗电路这种电路有很多它们不但能完成对单片机的自动复位功能而且还有管理电源用作外部存储器等功能比如X25045,MAX813L等等就是比较常用的此类芯片关于这方面的内容我们将留到下册的教程中再来给大家详细讲解现在让我们先来看看单片机复位后它的内部会有些什么变化呢看下面的表芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通71537304复位后的状态这就是单片机复位后内部系统的状态上面的有些符号我们暂时还看不懂不过没关系等以后学到了相关的知识后您自然就会明白了单片机的初始化状态寄存器复位时的内容PC0000HACC00HB00HPSW00HSP07HDPTR0000HP0-P3FFHTMOD00000000BTCON0X000000BTL000HTH000HTL100HTH100HSCON00HSBUF不定PCON0XXX0000B2程序执行方式程序执行是单片机的基本工作方式由于复位后PC=0000所以程序就从地址0000H开始执行此时单片机就根据指令的要求完成一系列的操作控制比如前面讲的让LED灯闪烁起来不过在实际使用中程序并不会从0000H开始执行而总是安排一条跳转指令比如LJMPSTART为什么要这样安排我们讲到中断时再来解释3低功耗操作方式在以电池供电的系统中有时为了降低电池的功耗在程序不运行时就要采用低功耗方式低功耗方式有两种—待机方式和掉电方式低功耗方式是由电源控制寄存器PCON上一课我们提到过的来控制的电源控制寄存器是一个逐位定义的8位寄存器其格式如下MSBSBSMODGF1GF0PDIDL其中SMOD为波特率倍增位在串行通讯时用GF1为通用标志位1GF0为通用标志位0PD为掉电方式位PD=1进入掉电方式IDL为待机方式位IDL=1进入待机方式也就是说只要执行一条指令让PD位或IDL位为1就可以了那么单片机是如何进入或退出掉电工作方式和待机工作方式的我们来介绍一下1待机方式进入待机方式当使用指令使PCON寄存器的IDL=1则进入待机工作方式此时CPU停止工作但时钟信号仍提供给RAM定时器中断系统和串行口同时堆栈指针SP程序计数器PC程序状态字PSW累加器ACC以及全部的通用寄存器都被冻结起来单片机的消耗电流从24mA降为3.
7mA这样就可以节省电源的消耗退出待机方式退出待机方式可以采用引入中断的方法在中断程序中安排一条RETI的指令就可以了什么是中断我们现在还不知道当然这没关系其实待机方式和我们使用电脑时的睡眠方式有异曲同工之妙2掉电方式芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153731进入待机方式当使用指令使PCON寄存器的PD=1则进入掉电工作方式此时单片机的一切工作都停止只有内部RAM的数据被保持下来掉电方式下电源可以降到2V耗电仅50uA此时就相当于把显示器和硬盘也关闭了退出待机方式退出掉电工作方式的唯一方法是复位不过应在电源电压恢复到正常值后再进行复位复位时间要大于1mS在进入掉电方式前电源电压是不能降下来的因此可靠的单片机电路最好要有电源检测电路显然掉电方式和待机方式是两种不同的低功耗工作方式前者可以在无外部事件触发时降低电源的消耗而后者则在程序停止运行时才使用关于单片机的低功耗的方式就简单的讲这些更详细的内容也留到下册再讲解4编程和加密方式单片机的编程与加密是由专门的设备来完成的这种设备称为编程器或烧录器类似的产品有很多功能也不尽相同如果您有兴趣我将在以后给您介绍一款51系列单片机编程器的自制方法这里给大家简单介绍一下单片机的加密加密是为了保护编程者的劳动成果而设计的一种工作方式不过有矛必然有盾现在的高手实在是很多听说即使用OTP特种加密方式也能解密不过能加密总比不加密的好所以大家在编程时应尽量采用加密功能二本课总结这一课我们讲述了单片机的工作方式对于初学者来说除了复位方式外其他的只要稍微有点了解就可以了三第9课习题1单片机有几种工作方式2为什么要进行复位复位后的状态是什么3如何对单片机进行复位4找一套编程器的软件自己先熟悉一下芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153732第十课单片机的寻址这一课让我们来了解一下单片机的寻址方式这对大家掌握指令会有很大的帮助什么是单片机的寻址单片机有几种寻址方式请往下看我们已经知道单片机的工作过程就是一条一条地从ROM存储器中取出指令然后执行相关的操作那么一条指令究竟有哪几部分组成它又包括哪些内容一般来说一条指令总是有操作码字段和操作数字段两部分组成看下面两条指令MOVR7#250MOVP1#0FFH这是我们以前学过的指令在这两条指令中MOV就是操作码字段R7和P1就是操作数地址字段而#0FFH我们称为常数(也就是立即数)单片机执行指令时就根据指令中给出的地址寻找实际的操作数不能理解没关系继续往下看一单片机的寻址先来看下面的实验程序一程序二MAINSETBP1.
0MAINSETBP1.
01MOV30H#255LCALLDELAYLCALLDELAY2CLRP1.
0CLRP1.
0MOV30H,#200LCALLDELAYLCALLDELAYAJMPMAINAJMPMAINDELAYMOVR7#250DELAYMOVR730HD1MOVR6#250D1MOVR6#250D2DJNZR6D2D2DJNZR6D2DJNZR7D1DJNZR7D1RETRETENDEND程序一就是我们以前做过的LED灯闪烁的实验我们已经知道每次调用延时程序的时间都是相同的125mS)如果现在提出这样的要求灯亮后延时时间为125mS灯灭灯灭后又延时100mS秒灯亮如此循环这样的程序还能满足要求吗显然不能怎么办我们可以把它改成程序二也就是先把一个数送入30H在子程序中R7中的值并不固定而是根据30H单元中传过来的数来确定这样就可以满足要求大家自行分析一下这个程序从这里我们可以得出结论在数据传递中要找到被传递的数很多时候这个数并不能直接给出而是需要变化这就引出了一个概念如何寻找操作数我们把寻找操作数所在单元地址的过程称之为寻址在实验一中我们直接使用数所在单元的地址找到了操作数所以称之为直接寻址而在实验二中我们是把数先放在工作寄存器30H中再把30H中的数送到R7看实验二的第6条指令这种方式则称之为寄存器寻址讲到这里大家有没有看出来这里的30H前面是没有#的而象MOVR7#250这样的指令在250前是有#的为什么我前面提到过大家好好回顾一下接下来提一个问题我们知道工作寄存器就是内存单元的一部份如果我们选择工作寄存器组0则R0就是RAM的00H单元那么这样一来MOVA00H和MOVAR0不就没什么区别了吗为什么要加以区分呢的确这两条指令执行的结果是完全相同的都是将00H单元中的内容送到A中去但是执行的过程不同执行第1条指令需要2个周期而执行第2条则只需要1个周期第1条指令变成最终的目标码要两个字节E5H00H而第2条则只要一个字节E8h就可以了也许有朋友会问不就差了一个周期吗为什么怎么斤斤计较如果是12M晶振的话也就1个微秒一个字节又能有多少呢当然如果这条指令只执行一次也许无所谓但一条指令如果执行上1000次就是1毫秒如果要执行1000000次就是1S的差别这就很可观了单片机要做的就是实时控制所以必须如此斤斤计较芯源电子—大屏幕LED显示屏设计/制造单片机和嵌入式系统开发上海芯源电子电器设计中心:13564769866E-mail:jiguo@citiz.
netQQ180625111875110579990E话通7153733接下来再看另一个问题现在我们已经知道寻找操作数可以通过直接给的方式立即寻址和直接给出数所在单元地址的方式叫间接寻址有这两中方式这就够了吗看下面的问题要求从30H单元开始取20个数分别送入累加器A中就我们目前掌握的办法要从30H单元取数就用MOVA30H那么下一个数呢是31H单元的怎么取呢还是只能用MOVA31H那么20个数不是得20条指令才能写完吗这里只有20个数如果要送200个或2000个数那岂不要写上200条或2000条命令这未免也太笨了吧为什么会出现这样的状况因为我们现在只会把地址写在指令中所以就没办法了如果我们不是把地址直接写在指令中而是把地址放在另外一个寄存器单元中根据这个寄存器单元中的数值决定该到哪个单元中取数那就没问题了比如当前这个寄存器中的值是30H那么就到30H单元中去取如果是31H就到31H单元中去取就可以解决这个问题了怎么做呢既然看的是寄存器中的值那么我们就可以通过一定的方法让这里面的值发生变化比如取完一个数后将这个寄存器单元中的值加1还是执行同一条指令可是取数的对象却不一样了看下面的例子MOVR7#201MOVR0#30H2LOOPMOVA@R03INCR04DJNZR7,LOOP5这个例子中的大部份指令我们是能看懂的第1条是将立即数20送到R7单元中执行完后R7中的值应当是20第2条是将立即数30H送入R0工作寄存器中所以执行完后R0工作寄存器中的值是30H第3条是看一下R0单元中是什么值把这个值作为地址取这个地址单元的内容送入A中此时执行这条指令的结果就相当于执行MOVA30H第4条没学过就是把R0中的值加1因此执行完后R0中的值就是31H了第5条学过将R7中的值减1看是否等于0不等于0则转到标号LOOP处继续执行因此执行完这句后将转去执行MOVA@R0这一条此时相当于执行了MOVA31H因为此时的R0中的值已是31H了如此直到R7中的值逐次相减等于0也就是循环20次为止就实现了我们的要求从30H单元开始将20个数据送入A中这是另一种寻找数据的方法由于数据是间接被找到的所以把这种寻址方式称之为寄存器间址寻址注意在寄存器间址寻址中只能用R0或R1来存放等待寻找的数据当然还可以用DPTR或PC访问外部存储器的数据只不过在这里我们讨论的是寄存器间接寻址所以这两个就不在讨论范围之内除了以上几种寻址方法外单片机还有变址寻址相对寻址和位寻址共七种寻址方式这些您暂时可以不去深究它我们以后会结合具体的实验再来详细介绍这里只是为了归类所以才把它们例举在一起下面举几个例子说明一下二寻址方式举例1直接寻址直接寻址时指令中的地址码部分直接给出了操作数的有效地址例如MOVA4FHA4FH可用于直接寻址的空间有内部RAM的低128字节包括其中的位寻址区与特殊功能寄存器2寄存器直接寻址寄存器寻址时指令中地址码给出的是某一通用寄存器的编号寄存器的内容为操作数例如MOVAR7AR7可用于寄存器寻址的空间有R0-R7ACCCY位DPTRB等3寄存器间接寻址寄存器间接寻址时指令中给出的寄存器的内容为操作数的地址而不是操作数本身例如MOVA@R0A(R1)可用于寄存器间接寻址的空间只能是R0和R1,用DPTR或PC可间接寻址64K字节外部的RAM或ROM.
DogYun(中文名称狗云)新上了一批韩国自动化上架独立服务器,使用月减200元优惠码后仅需每月300元,双E5 CPU,SSD+NVMe高性能硬盘,支持安装Linux或者Windows操作系统,下单自动化上架。这是一家成立于2019年的国人主机商,提供VPS和独立服务器租用等产品,数据中心包括中国香港、美国洛杉矶、日本、韩国、德国、荷兰等。下面分享这款自动化上架韩国独立服务器的配置和优惠码信息。...
totyun,新公司,主要运作香港vps、日本vps业务,接入cn2网络,不限制流量!VPS基于KVM虚拟,采用系统盘和数据盘分离,从4G内存开始支持Windows系统...大家注意下,网络分“Premium China”、“Global”,由于站长尚未测试,所以也还不清楚情况,有喜欢吃螃蟹的尝试过不妨告诉下站长。官方网站:https://totyun.com一次性5折优惠码:X4QTYVNB3P...
DiyVM是一家低调国人VPS主机商,成立于2009年,提供的产品包括VPS主机和独立服务器租用等,数据中心包括香港沙田、美国洛杉矶、日本大阪等,VPS主机基于XEN架构,均为国内直连线路,主机支持异地备份与自定义镜像,可提供内网IP。最近,商家对香港机房VPS提供5折优惠码,最低2GB内存起优惠后仅需50元/月。下面就以香港机房为例,分享几款VPS主机配置信息。CPU:2cores内存:2GB硬...