51单片机自学笔记.doc_第1页
51单片机自学笔记.doc_第2页
51单片机自学笔记.doc_第3页
51单片机自学笔记.doc_第4页
51单片机自学笔记.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1天 从哪儿开始你的单片机学习.单片机技术是非常有趣的一门技术,但是许多初学者往往苦于找不到正确的学习方法和合适的学习工具而一直在门外徘徊,今天就和大家分享一下几位书呆子是如何幸运的找到学习51单片机的“神秘武器”的,并告诉大家如何使用这些工具,最后和大家一起冲出困惑、不解和原地踏步的重围,快速踏上51单片机学习和应用的溜光大道,去领略探索中发现的美景。1.1 神秘武器的得来从前,有个贫穷的书呆子,他的名字叫阿范。他的智商不高,可就是有股子轴劲儿,相信知识可以改变命运,他就刻苦学习,脑袋里装了许多知识,把内存都装的差不多了,以至于运行速度都很慢了。因为他是工业自动化专业的,听很多老师和学哥说嵌入式在将来会很有发展,而且还告诉他,要想把嵌入式弄明白,51单片机的学习是基础,阿范很听话,每天就拿本51单片机的教材看啊看啊一年过去了,阿范还是在看书,把那本“宝典”看了很多遍,很多知识都背下来了,可就是不会编程序。正当阿范百思不得其解之时,在一个风雨交加的深夜,一个神秘老人突然出现在阿范的面前,他用祥和而温暖的眼神看着阿范,微笑着神秘老人:“孩子,是你用执着、勤奋、刻苦打动了我,我真的不想让你再在黑暗中摸索前进了,所以,我这次现身是给你光明,给你方向、给你真正的宝典来了,不过,你要答应我,当你真正掌握了这些知识,一定要帮我把这些知识传授给那些像你一样对单片机感兴趣又勤奋的孩子们,你能做到吗?”阿范:“神秘老人,请相信我,我一定能。”神秘老人:“那好吧,现在我就告诉你为什么你这些年都没有学好单片机的原因了,你要认真听好”第一、选择比努力更重要,你这些年用的书不适合你,那些书都是给会的人准备的。还有部分书中的例程不完整,或者有些错误,或者就是全对,程序太长,又没有注释,所以我给你的第一个“法宝”“葵花宝典”。第二、这些年你只是看书,从不实战,你连“枪”都没有,怎么能在实践中取得胜利呢?所以我给你的第二个“法宝”实用开发板一块第三、为了把程序下载到单片机中,我再给你一条下载线,至于电脑我就不给你了,现在电脑都便宜了,自己去买吧;还有就是要准备一个编程软件和一个下载程序用的软件,这个我也帮不了你,你自己去网上下载一个就行。至于怎么用,你看葵花宝典就可以了。第四、我走后就不会再出现了,机会你自己要把握好,为了帮你在最困难的时候能度过难关,我再给你一些锦囊,当你在需要的时候就打开看看。你都记住要学好单片机要准备什么了吗?”阿范:“我记住了,要准备电脑、实验板、下载线、编程软件、下载软件、葵花宝典和锦囊。”神秘老人:“记住就好,千万切忌只看书不实战,那我就走了。”阿范:“神秘老人,神秘老人您给弟子个学名吧!”神秘老人:“好吧,你以后就叫行者吧。孩子,记住,你答应我的事,当你学会以后帮我把这些知识传授给那些像你一样对单片机感兴趣又勤奋的孩子们,你要遵守承诺。”阿范:“师傅弟子记住了,多谢师傅”1.2 单片机的身世本小节都什么内容:1、单片机的发展;2、51、AVR、430、PIC等几大主流单片机的区别;3、初学者最好先学51;20世纪70年代,美国仙童公司首先推出了第一款单片机F-8,随后Intel公司推出了MCS-48单片机系列,这个阶段的单片机性能较弱,属于中、低档产品;此后,随着集成技术的提高以及CMOS技术的发展,Intel公司于1980年推出了8位高档MCS-51系列单片机,性能得到了很大的提高,应用领域大为扩展;1983年Intel公司推出了16位MCS-96系列单片机,加入了许多外围接口。如:模/数转换器(AD)、看门狗、脉宽调制器(PWM)等,其他一些公司也相继推出了自己的高性能的单片机系统;近年来,许多公司先后推出了性能更高的32位单片机,单片机的应用达到了一个更高的层次。目前,无论是从单片机的位数来分,还是从生产单片机的公司来分,单片机的型号都是非常多,单说51系列兼容单片机,就有飞利浦的87LPC系列,华邦的W78系列,达拉斯的DS87系列,现代的GSM97系列等等,目前在我国比较流行的就是美国ATMEL公司的89S51,它是一种带Flash ROM的单片机,可以多次重复编程,使用方便。学单片机和学开车差不多,如果还没练熟,先找个性价比高一点的车来练习,开坏了也不心疼。51单片机简单、易学、即使带电拔插也没什么大问题,当然最好别这样。编者语录接着上面的话题再给大家介绍一下我们经常在各种刊物上看到的AVR系列、PIC系列和MSP430系列单片机是怎么回事,以便让大家对单片机的发展有一个较全面的认识,在没有学习单片机之前这是一个令很多初学者非常困惑的问题,这么多的单片机我该先学哪一种呢? AVR系列单片机也是ATMEL公司生产的一种8位单片机,它采用RISC精简指令集,它的一条指令的运行速度可以达到纳秒级,速度快,功耗低,片内资源丰富,一般都集成模/数转换器、PWM、SPI、USART、I2C等资源,大大简化了外围电路的设计,AVR单片机是8位单片机中的高端产品,由于它的出色性能目前应用范围越来越大;430单片机是美国TI公司生产的,它采用的是RISC的指令集,这款单片机除了资源丰富,其主要特点是超低功耗,但是多数都内存不大;PIC系列单片机,它是美国MICROCHIP公司生产的另一种8位单片机,它采用的也是RISC的指令集,资源较丰富,而且型号非常多,适用于不同场合的应用。虽然上述几款单片机的影响力都很大,应用都很广,但是51系列单片机在很多领域还有大量的应用,而且作为初学者51系列是首选,因为它毕竟简单。 1.3 单片机都能干什么单片机都能干什么?许多初学者会有这样的问题。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等,无不含有单片机。1.4 神秘老人的法宝1.4.1实验开发板学单片机必须得有块实验开发板,可是当年行者学单片机时还没有ISP功能,要买一个仿真器,一个编程器,一个实验板和一台电脑,那时那儿买得起,无奈只好把学习单片机的想法放一放了。现在好了,一切都变的简单了,下图是一块简单的实验板图片(当然还有一块实验开发板在后面的章节里会出现),可以完成LED闪烁、数码管显示、独立按按键、温度测量、串口通讯、数字心率检测等实验。具体各部分电路图及原理和应用程序会在后面讲解。图1-1 实验开发板1.4.2下载线下载线给大家介绍两种,首先介绍一种是并口的,外观图如图1-2所示,这种下载线在比较老的台式电脑上面可以用,新的电脑或笔记本神秘老人的法宝:1、葵花宝典一部;2、实验开发板一块;3、下载线一条;4、编程软件和下载软件;5、电脑一台;6、神秘的锦囊就在身边;图1-2并口下载线外观图电脑都没有并口了,不可以用了,这种下载线的优点就是成本低,适合在多种下载软件上使用。这款下载线的电路原理图如图1-3所示。利用了一片74LS244,起到缓冲作用,当下载结束后,下载线和用户电路的信号线都变成高阻状态,减少对用户电路板的影响。其中MOSI与51单片机的P1.5相连,MISO与51单片机的P1.6相连,SCK与51单片机的P1.7相连,RESET与 51单片机的复位引脚RST相连。这个下载线自己就可以DIY一个,很好用的,当然还有其他的电路,这里就不一一介绍了。图1-3 并口下载线原理图下面再介绍另一款下载线,下载线外形图如图1-4所示,它是USB接口的,使用方便,能够满足现在的新式电脑的要求。电路原理图如图1-5所示,其中包含一片MEGA8单片机,需要编写驱动程序,还要安装USB驱动软件,不过网上有很多大侠提供的,具体工作原理就部多讲了。图1-4 USB下载线外观图1.4.3电源单片机需要5V的电源,通常我们得到5V电源的方法是用变压器、整流电路、滤波电路和稳压电路制作一个5V电源,参考电路如图1-5所示。经变压器变压可以将220V交流电变成7V或9V的交流电,再经过4个整流二极管整流变成脉动的直流,再通过C1和C2滤波,然后通过7805稳压,最后通过C3和C4滤波即可得到+5V直流电,D3是一个发光二极管,起到电源工作是否正常的指示作用,D2的作用是当直接接直流电,并且把正负极弄反了时,起到保护作用。如果不想自己制作电源,当只需要5V电源是时,可以用一条USB线把电脑USB口的5V电引到板子上使用,图1-6是一条USB电源线。图1-5 电源电路图1-6 USB电源线1.4.4编程软件编程软件有很多,其中以KEIL和伟福WAVE6000应用较广,在此先简单介绍一下伟福WAVE6000编程软件(KEIL软件在后面再讲),该软件可以在南京伟福实业有限公司网站/的下载专区中下载,打开软件安装程序,点击“setup”,然户按着提示点击“下一步”即可完成安装,打开桌面上的图标,界面如图1-7所示。使用方法在后面讲。图1-7 wave6000打开界面1.4.5下载软件可以完成下载任务的软件很多,这里介绍一款下载软件,该软件是由智峰工作室研发的,它可以支持多种接口,如串口、并口、USB口等。打开软件界面如图1-8所示。图1-8 智峰下载软件1.5 一个古老的神灯几乎在每本单片机的书中都提到发光二极管的实验,所以行者在此也来说说“神灯”的有关问题。图1-9是普通发光二极管的外形图及电路符号,从实物图上看,管脚长的是阳极,如果是用过的可以看二极管里面有一个三角形状的片,大片的一侧是阴极,但是有些黄色的二极管正好相反,如果想弄个清楚,最好是用万用表测量,因为二极管具有单向导电性。 当电路如图1-10所示接线时,发光二极管就会发光;千万不要认为小灯实验没有用哦!图1-9 二极管外形图及电路符号而如果把电源或二极管任何一个元件反接,则二极管都不会发光。图1-10 发光二极管实物接线图 图1-11 发光二极管接线原理图接着上面的内容,行者提个小问题:如果我有规律的把电池正接、反接,那会怎样呢?如果频率合适的话是不就会看见发光二极管闪烁了,当然如果特别快就看不出闪烁了,而是一直亮,只是没有原来那么亮而已,当然行者可没有那么快的伸手,这个还是单片机厉害,后面给大家展示老单的伸手。注意了 哦!电阻选择时还要考虑功率呢,如1/4W,1/8W等,要根据你的“爱房R”判断噢!对了,行者还有个小问题,图1-11中的电阻该用多大的呢?不串接电阻不行吗?很多初学电子的朋友在选择参数时最头痛了。不用电阻是不行的,这个电阻起到限流作用,一般常用的普通发光二极管通10mA电流较为合适,所以可以估算电阻的阻值了,如果我们选择+5V电源供电,就应该选择约500欧姆的电阻(忽略二极管导通时的压降),可是电阻不是想买多少欧姆就能买到的,可以参考电阻的标称值来选择(电阻标称值见附录G),一般我们可以选择470欧姆,当然再大点或小点都可以,只是发光二极管要么就偏暗要么偏亮。关于发光二极管的封装和颜色再说说,封装主要有图1-10中这样的,再就是贴片的,一般贴片的价格高一些;关于颜色,普通红、黄、绿的比较便宜,几角钱一个,蓝光的、翠绿光的比较贵,要几元钱,当然也和你的购货渠道有关,一般网上的便宜一些。不说了,还是快点让神灯闪起来吧,玩个一亮一灭的鬼火。把单片机先接上,当然现在对于初学者来说,还没看见单片机的真面目呢,有关单片机的外在形象和内芯世界后面再讲,现在只是展示给大家先看看而已。电路图1-12所示,是单片机控制一个LED的电路图,要求完成LED闪烁的任务。图1-12 单片机控制一个LED发光二极管首先,将该电路的实际接线接好,然后打开编程软件WAVE6000,新建一个文件如图1-13所示,然后将该文件保存,保存时文件的扩展名要为“asm”,表示编写的是汇编程序。图1-13 WAVE6000中新建一个文件编写程序代码如图1-14所示,程序代码写完就可以编译了,让软件帮我们把程序变成单片机能够认识的“.HEX”文件,当图1-14中下方出现的都是绿色的对号时表示编译通过。图1-14 编写LED闪烁程序并编译接下来就可以打开下载软件,如图1-15所示,将“编程器及接口”选项设置为“USBASP”,选择芯片选项设置为你用的芯片型号,其他如图中所示设置,然后点击“调入Flash”找到在WAVE6000下编程编译生成的“LED.HEX”文件,然后点击“自动”。程序就跑到单片机里去了,至于程序放在哪了,我们后面再详细讲解,然后你观察实验板上是不有个神灯在闪烁啊。(光盘:实验现象1.avi)图1-15 编程软件界面1.6 互动环节良子:“行者在上面编的程序也看不懂啊,那个R0、R1、DJNZ都是什么东东啊?还有你说打开下载软件,找到那个LED.HEX的文件,一点击“自动”程序就进单片机的肚子里去了,究竟把程序放在哪了?”行者:“噢,在这里我们只是展示一下,有关单片机内部的寄存器和指令系统我们会在后面与大家分享;有关程序下载到哪儿去了?程序下载的过程我们就不用管了,这些都是设备来完成的,通过设备和软件把程序下载到单片机的内部程序存储器ROM中,有关ROM和RAM的问题在下节讲。” 第2天 认识一下著名的单片机先生请问吃掉一个大象怎么吃?显然要一口一口吃,学知识也一样,要一步一步来,千万别着急;认识一个事物要有一个过程,先是外表,然后是内心,今天就和大家分享一下单片机先生的外在形象和丰富的“内芯”世界。2.1 单片机的外在形象51单片机的封装形式有三种,图2-1是TQFP和PLCC封装,TQFP封装的体积小,成本低,为目前商品的主流;PLCC封装可以直接应用在电路板上,而不必钻孔,在研发、试验或教学时,还可以利用插座,以缩短开发与生产周期;第三种封装为双列直插封装(DIP),如图2-2所示,这种封装刚好可以插在面包板或40引脚的DIP插座上,特别适用于学校、培训机构,但是由于该封装体积大、电路板制作成本高,在商品里应用较少。把引脚按照功能分类介绍如下:图2-1 TQFP封装和PLCC封装2.1.1要工作就得吃饭要让单片机工作就得让它“吃饭”,所以要给它提供电源。1 VDD(40脚):接+5V电源 2 GND(20脚):接地也就是+5V电源负极2.1.2 庞大的组织要有个总指挥18脚和19脚:大家已经知道,单片机是在一定的时序控制下工作的,那么时序和时钟又有什么关系呢?时钟是时序的基础,单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路必须在脉冲信号的统一指挥下才能工作(如同军训时教官的口令),按时序进行工作,那么单片机内的时钟是如何产生的呢?有两种方式:一种是内部振荡方式,只要接上两个电容和一个晶振即可,电路如图2-3所示,电容的大小影响着振荡器振荡的稳定性和起振的快速性,通常选择10-30pF的相等的两个瓷片电容,另外在设计电路时晶振和电容应尽可能的靠近芯片,以减少PCB板的分布电容,保证振荡器工作的稳定性,提高系统的抗干扰能力;另一种是外部振荡方式,采用外部振荡方式时需在XTL2上加外部时钟信号,XTL1接地。此种方式应用于系统由多片单片机组成,为了保证各单片机之间时钟信号的同步,就应当引入唯一的公用的外部脉冲信号作为各单片机的振荡脉冲。2.1.3 控制信号引脚1 PSEN(29脚):片外ROM选通信号。当单片机要扩展存储器时,该引脚通常与外部存储器的片选OE引脚相连,当单片机要读取外部存储器数据时,该引脚输出低电平信号。图2-2 DIP封装引脚分布图2 ALE/PROG(30脚):地址锁存信号输出端/EPROM编程脉冲输入端。当访问外部存储器时,用于将P0口的地址锁存在外部锁存器中;另一个功能是EPROM编程脉冲输入端。3 RST/VPD(9脚):复位信号输入端/备用电源输入端。何为复位,都知道电脑死机时我们按了“reset”键吧,这就是复位,通常只要保证该引脚持续2个机器周期的高电平就会使单片机复位。4 EA/VPP(31脚):内/外部ROM选择端。当单片机片内的程序存储器不够用时,就需要外扩存储器,当我们需要把程序存储在外部存储器中时,需要将31脚接地,表示使用外部存储器;当使用内部程序存储器时需要将31脚接在+5V上,表示使用片内存储器。2.1.4 输入输出引脚P0、P1、P2、P351单片机有4个并行I/O口,分别是P0、P1、P2和P3口,每个并行口由8个引脚组成,都可以用作普通I/O操作,除了P1口外,其他并行口都具有第单片机想正常运行必须具备的条件:1、必须加电;2、必须接晶振电路;3、必须接复位电路;4、如用内部程序存储器,31引脚必须接+5V;二功能,下面分别介绍:P0口(39-32脚):当向外部存储器读写数据时,P0口是复用口,P0口和P2口配合完成低8位地址的传送后,P0口再传送8位数据。 P1口(1-8脚):只具有普通I/O功能。P2口(21-28脚):当向外部存储器读写数据时, P2口用于传送高8位地址。 P3口(10-17脚):P3口除了能够完成I/O功能这一本职工作,还有许多非常重要的兼职任务,具体功能见表2-1所示,具体功能的实现和应用方法后面再讲。 表2-1 P3口的第二功能表端口位第二功能注释P3.0RXD串行口输入P3.1TXD串行口输出P3.2INTO外部中断0P3.3INT1外部中断1P3.4T0计数器0计数输入P3.5T1计数器1计数输入P3.6WR外部RAM写入选通信号P3.7RD外部RAM读出选通信号锦囊: P1、P2、P3口都能驱动4个TTL门,且不需要上拉电阻就能驱动MOS电路;P0口内部没有上拉电阻,驱动TTL电路时能带8个TTL门,但是驱动CMOS电路时,若作为地址/数据总线,可以直接驱动,而作为I/O口时,需外接上拉电阻。2.2 单片机丰富的内芯世界单片机究竟是个什么东东?为什么给人的感觉它如此的神通广大?它的内部都由哪些部件组成呢?其实,它就是一种能进行数学和逻辑运算并可以根据不同对象完成不同控制任务的集成电路。它和电脑有些相似,也有CPU中央处理器、RAM(类似电脑内存条)、ROM程序存储器(类似电脑硬盘)和输入输出设备(即P0、P1、P2和P3口)等。下面就和大家一起分享单片机的内芯世界。2.2.1 好东西都放在哪了?单片机内部有两个地方可以存储东西,一处是ROM程序存储器;另一处是RAM数据存储器。其实,这两处里面放的信息都是二进制数,但是还是有区别的,下面分别介绍。图2-4 单片机程序存储器和数据存储器程序存储器(英文名称ROM全称为Read Only Memory)叫只读存储器,所谓只读存储器是指单片机在正常工作时只能读取不能写入修改,但是当我们要把编译好的程序下载到单片机里时,是可以修改的。 所以,程序存储器ROM里存放的就是编译好的二进制程序代码。AT89S51单片机片内有4K的存储空间,AT89S52单片机片内有8K的存储空间,如果片内空间够用就不必外扩了,所以单片机的31(EA)引脚要接+5V上去,如果空间不够,需要外扩,把程序代码存放在片外,则31(EA)引脚要接在GND上,表示选择片外程序存储器,代码执行时到片外去取指令执行,最大可以扩展64K字节的程序存储空间,可以参考图2-4(a)。提示:编译通过的程序无论下载到片内4KROM中,还是外扩的ROM中,程序执行都是从头开始的(即从0000H开始),之后紧跟着就跳转到0023H之后继续执行,因为0000H、0003H、000BH、0013H、001BH和0023H是特殊房间,留给突然来住的人,后面我们详细和大家分享。数据存储器(英文名称RAM全称为Random Access Memory)叫随机存取存储器,也叫内存,它是一种既可以随时改写,也可以随时读出里面数据的存储器,类似于我们上课时用的黑板,可以随时写东西上去,也可以用黑板擦随时擦掉重写。51单片机内部的256个字节的RAM空间分成两个区域,参考图2-4(b),从0127(即00H7FH)这128个字节空间是用户可以随意操作的空间,而从128255(即80HFFH)这128个字节空间被21个特殊功能寄存器所占用,所以高128个字节并没有完全利用,但是我们用户也不能够使用剩余的107个字节,所以,我们用户真正可以利用的只有低128个字节(对于52单片机是可以用高128个字节的),要珍惜哦。下面就详细和大家分享一下这256个字节的分配情况。低128个字节的RAM空间分配情况如图2-5所示,它被分成三个部分。1、工作寄存器区提示:其实位寻址区相当于是一个旅店中有这么16个房间,每个房间有8张床,每个床位可以单独提供给任何一个客人住(该位置1),而其它区域,如上面讲提到的工作寄存器区(00H1FH),这32个房间就不可以位操作,即这32个房间中的任何一个只能提供给一个团住(这个团可能1人,也可能8人把这个房间包下来了),而不对单个人提供单个床位服务。而位寻址区则可以对单个人服务,当然也支持包房的,即可以当成普通区整体操作8位一个字节在单片机内部有八个工作寄存器,分别是R0、R1、R2、R3、R4、R5、R6和R7,这哥儿八个也可以理解为用来存放临时物品(即临时数据)的房间,在单片机内部有32个房间用这哥八个的名字命名,即从00H1FH(即从031)这32个房间,被分成4组,每组8个房间分别是R0R7,当有客人(其实是数据)来了,要住店,我们可以和他说,你住在00H房间,也可以和他说你住在R0房间,这是一个意思。当你说把数据放在R0中了,我就知道你把这个数据放在了00H房间中。你可能会说,不对啊?从00H1FH共计32个房间,用R0R7命名的分别都有4个房间,客人怎么才能知道你分给他的R0房间究竟是00H、08H、10H还是18H房间呢?很好,其实这个是由单片机内部的一个特殊功能寄存器PSW中的RS0和RS1这两位负责区分的,具体分配情况见房间分配示意图2-5所示,大家一看便知。为了弄清楚这个问题,大家看下面一段程序,当然仅这一段程序是不能完成什么任务,只是为了说明问题用。CLR RS0;把PSW中的RS0位置0CLR RS1;把PSW中的RS1位置0MOV R0,#22H;给R0里(即内存地址为00H空间)装一个十六进制数22HSETB RS0;把PSW中的RS0位置1SETB RS1;把PSW中的RS0位置1MOV R0,#22H;给R0里(即内存地址为18H空间)装一个十六进制数22H上面的程序先将PSW中的RS0、RS1两位置0,选则了第0组工作寄存器组,表示R0R7位于00H07H处,然后执行MOV R0,#22H,就相当于是给内存地址为00H的房间赋十六进制数据22H;然后又将RS0、RS1两位置1,选则第3组工作寄存器组,这时执行MOV R0,#22H,就是在向内存地址为18H的房间赋十六进制数据11H。2、位寻址区从20H-2FH共16个字节定义为位寻址区,每个字节中包含8个位,位寻址区共计128个位,之所以称该区为位寻址区,是因为这个区域可以整体操作某个字节,也可以单独操作某个字节中的某个位(其它区域不可以单独操作位),为了使用方便,把这128个位统一编号,如图2-5所示,比如我想把位寻址区中的第9个位置1(setb 9),相当于是把21H字节单元中的最低位置1,即21H单元中的数据变成了01H(假设21H单元原来数据是00H)。那我们来看看下面的指令是什么意思?图2-5 单片机片内数据存储器空间分布图SETB 11H MOV 11H,#55HSETB 11H是将位寻址区的第11H位置1,即将内存22H单元中的第2位置1,使得22H单元中的数据变成02H(假设22H单元原来的数据是00H);而MOV 11H,#55H是将内存地址11H中赋一个十六进制数据55H,相当于是给工作寄存器组2中的R1赋一个十六进制数据55H。所以,位操作指令SETB不能用在工作寄存器区和一般工作区,而MOV 指令可以用在各个区。3、一般工作区从30H7FH这80个字节单元是一般工作区,具体那一个单元的用途完全是由用户决定的,比如我要设计一个温度控制系统,我可以用30H单元存放采集的温度,用31H单元存放设定的理想温度等等。当然位寻址区也可以由用户决定每个字节单元的作用,可以当成一般工作区来分配使用,甚至工作寄存器区的32个字节单元也可以由用户决定每个单元的作用。但是一般在空间分配够用的情况下尽量不要把工作寄存器区的单元改为其它用途。关于这方面的实际练习会在后面讲解,大家也可以打开WAVE6000软件,输入下面的代码,编译通过后,按“F8”按键单步执行,观察窗口中“DATA”区中内存单元数据的变化情况来体会有关上述内容,这里就不细说了,好好体会吧!这个很重要哦! ORG 0000H; SETB 20H;MOV R0,#55H; SETB 21H;MOV R7,#44H; CLR 20H;SETB RS0; CLR 21H;SETB RS1; SETB 00H;MOV R0,#0AAH; SETB 01H;MOV R7,#0BBH; MOV 20H,#0FFH4、特殊功能寄存器区从128255(即80HFFH)是特殊功能寄存器(SFR)空间, 21个特殊功能寄存器离散地分布在80HFFH地址空间内,如表2-2所示。各个功能寄存器将在后面各部分出现时再和大家分享。(附录A中有特殊功能寄存器的详细介绍)表2-2 特殊功能寄存器简介表符号地址初始值是否可以位操作功能介绍BF0H00H是B寄存器ACCE0H00H是累加器PSWD0H00H是程序状态字IPB8H00H是中断优先级控制寄存器P3B0HFFH是P3口锁存器IEA8H00H是中断允许控制寄存器P2A0HFFH是P2口锁存器SBUF99H不定否串行口锁存器SCON98H00H是串行口控制寄存器P190HFFH是P1口锁存器TH18DH00H否定时器/计数器1(高8位)TH08CH00H否定时器/计数器1(低8位)TL18BH00H否定时器/计数器0(高8位)TL08AH00H否定时器/计数器0(低8位)TMOD89A00000000B否定时器/计数器方式控制寄存器TCON88H0X000000B是定时器/计数器控制寄存器DPH83H00H否数据地址指针(高8位)DPL82H00H否数据地址指针(低8位)SP81H07H否堆栈指针P080HFFH是P0口锁存器PCON87H0XXX0000B否电源控制寄存器2.2.2 芯里还有别人吗?在前面已经和大家分享了单片机的I/O口,即P0、P1、P2和P3,还和大家一起探讨了有关程序存储器ROM和数据存储器RAM的一些知识,现在我们继续看看还有什么。这里只是简单介绍,后面详细讲解。1、串行口51单片机内部有一个可编程的、全双工的串行接口。串行收发的数据存储在特殊功能寄存器中的串行数据缓冲器SBUF中,串行发送和接收是通过单片机的P3.1和P3.0引脚完成的。2、定时器/计数器51单片机内部有两个16位的可编程定时器/计数器,分别是T0和T1,可编程是指它们的工作方式由指令设定,可以当计数器用,也可以当定时器用,即设置寄存器TMOD中的内容即可。并且计数或定时范围由指令来设置。 3、中断系统51单片机的中断系统可以处理五个中断,分别是两个外部中断、两个定时器/计数器中断和一个串口中断。外部中断申请通过引脚P3.2和P3.3输入,输入方式可以是低电平信号或下降沿信号有效,可以通过设置选择;定时器/计数器中断请求是当定时器溢出时向CPU提出的,即由最大值变成0时提出的请求;串行口每次发送完一个数据或是接收完一个数据就可以提出一次中断申请。51单片机可以设置两个中断优先级,通过中断优先控制寄存器IP来设置,改变各个中断的中断优先级别。2.3 互动环节甲子:在许多书上看见过介绍ROM的,你能详细介绍一下ROM都有哪些种好吗?行者:哦,程序存储器有好几种,不管哪种其作用都是用于存储我们设计的程序代码,下面就分类介绍给你:ROM只读内存是一种只能读取资料的内存。在制造过程中,将资料以一特制光罩烧录于线路中,其资料内容在写入后就不能更改,所以有时又称为“光罩式只读内存”;PROM可编程程序只读内存内部有行列式的镕丝,视需要利用电流将其烧断,写入所需的资料,但仅能写录一次;OTPROM是一次编程只读内存,当产品批量生产又要求价格比较低时,用这种程序存储器的单片机是非常合适,编程写入之后就不再抹除;EPROM是可擦除可编程只读内存,可利用高电压将资料编程写入,擦除时需要通过封装外壳上预留石英透明窗口进行紫外线曝光,则资料可被清空,并且可重复使用,但是每次操作时间较长,要15分钟;EEPROM是电子式可擦除可编程只读内存,原理类似于EPROM,但是擦除的方式是使用高电场来完成,不需要透明窗进行紫外线照射,大大节省时间;Flash ROM是一种快速存储式只读存储器,简称闪存,这种程序存储器的特点是既可以电擦写而且掉电后程序还能保存,可以达到反复烧写一千次左右,速度快,目前,新型的单片机都采用这种程序存储器。大原:ROM和RAM中都有数据,有什么不同啊?程序执行时是怎么用RAM和ROM的?行者:这个问题非常的棒。我还是先给你讲个生活故事吧。比如在一个旅馆,有老板、卫生员,领班小经理,当然一定也有房间。这个老板每天晚上就把第二天要做的每件事都写在了一张纸上,上面清楚的写着:第一、把201房间里8张床上面的东西搬到203房间8张床上去;第二、205房间的客人走后把房间收拾出来,把207房间6号床上的被罩扯下来,第三、去隔壁商店买8个不同花样的被罩给209房间换上。第二天领班小经理就拿着那张纸,安排人干活儿,完成一件就下一件,如此循环的工作。在上面的故事里,白纸就是程序存储器,上面写下的东西就相当于是我们编写的程序,老板就是设计程序的人,即编写程序的人,领班小经理就相当于是程序指针PC,负责读出并安排程序上的每件事,而被操作的那些房间就相当于内存RAM,而房间里面的每张床位就相当于内存中每个字节中的一个位,到隔壁商店买8个不同花样的被罩给209房间换上就相当于到片外的某个器件里去读数据并拷贝到内存209单元。现在再考虑ROM和RAM中存储的二进制数据0和1的关系,ROM中的这些0和1是由我们编写的程序经过编程软件编译后生成的单片机能够认识的0和1这些代码,单片机就根据ROM中这些数字就可以知道一步一步都干什么,一旦将程序烧写进ROM中,在程序执行过程中就不能改了(老板的那张纸是不能改的,除非老板本人重新写),除非重新编程、编译、下载。而内存RAM就相当于是旅馆的房间,有的高级房间上面不但有房间号,也有名称,如R0等,这些房间不会分租给个人,只能整体包下来,而有些房间可以把单个床位提供给某个客人,也可以整体包给一个团,还有些特殊房间只能给指定的人住,因为他把这个房间给永久包下来了,这几类房间就相当于是内存RAM中的工作寄存器区、位寻址区、一般区和特殊功能寄存器区。好了,现在明白了吧。自己好好体会吧,这个问题很重要的哦!峰巍:ROM和RAM都是可以存储数据的空间,当我想在片外分别扩展64K的空间时,单片机到片外地址101去取数据,怎么区分是到ROM还是RAM中取数据呢?有点乱?行者:不乱,捋捋就不乱了。是这样的,单片机到片外取数据虽然都是派相同的人去取,即用P0和P2去取,但是领P0和P2去的人不是一个,领P0和P2去片外程序存储器取程序代码的是由单片机的29脚(PSEN)负责,当然30脚和31脚也要配合;领P0和P2去片外数据存储器取数据是由单片机的P3.6(WR)和P3.7(RD)负责,所以虽然是一个地址101,但是不同的人带路,带到的地方是不一样的。比如有两个楼都有101房间,而负责领路的人分别负责这两个楼,所以小涛:为什么提供位寻址区,有什么用?行者:在位寻址区可以单独操作某个字节中的某一个位。当然这一位里只能存放0或1,这样我们就可以表示一个事件的两种状态。比如八路军的两个连队要攻打鬼子的一个山头,他们事先商量好了,如果谁把原先放到的彩旗升起来,则表示另一个连队现在可以全速进军攻打了。红旗放倒和升起来就是两种状态,可以分别用0和1表示。再举个例子,当我们用单片机检测金属铁片时,当检测的铁片数等于三块儿时,就可以把位寻址区事先选定的某一位置1了,相当于做了一个标志,当单片机查询到该位为1时就知道已经检测了三块铁片了,如果是0就表示还没检测到三块。总之,通常位寻址区是用来做标志的。娜仁:今天的理论知识好像很多,许多知识都背不下来,怎么办?有什么好方法吗?行者:是的,今天的理论知识确实很多,也很重要。但是都不用去背,只要能理解上面所叙述的内容就可以。等到用的时候手里拿着单片机的引脚分布图和内存分布图就可以了。没有必要背下来,我们的脑子是用来创造性的分析和处理问题的,不是用来存放知识的仓库,知识是知识,会用知识才有力量,记住,能用电脑存储的就让它去存储,能让电脑干的就让它去干。锦囊: 学单片机如同带兵远征,最后能否取得胜利,和许多因素有关,这其中就包括你是否坚持克服困难,你是否带足了粮食和弹药以及行军地图。所以先告诉你,你一定要手握(或优盘里)有单片机引脚分布图、内存分布图、指令表、特殊功能寄存器功能表、常用元器件手册等。第3天 用语言尝试着与单片机交流了解了单片机的外部引脚分布及功能,也知道了单片机丰富的内芯世界,这还不够。如果真想把这位“圣人”请出来,我们还要学会和她交流,主要是语言的交流。单片机的母语是汇编语言,她也懂世界上比较通用的语言C语言(其实它只懂机器语言,汇编语言和C语言是要经过编程软件翻译成机器语言它才懂)。我们今天先和她用汇编语言交流。她的汇编语言词汇并不多,只有111条指令,不过要能把这111条指令合理的组织起来,那可是会产生奇迹的哦。只要把它的语言弄清楚了,你想让她帮你做什么都行。想不想让她帮你控制智能小车、监控温度?那就加快脚步吧!下面我们就来学学她的词汇,不过可不能象学英语似的,先背单词,背会了再练习句子,最后再写文章。学习英语对我来说体会那是相当深刻,用这样的方法六级到现在还没过。后来学单片机才弄明白,其实有时可以直接看文章,发现不懂的词汇再去查词典,感觉这样效果不错。现在我们就以任务为中心,提出设计要求,根据要求设计电路、编写程序,在分析程序的过程中和大家分享指令。具体指令见附录B51单片机的指令表。3.1 一个LED灯闪烁下面我们通过神灯的实验给大家介绍几个常用的指令。首先我们看一个LED小灯闪烁的实验,即一个小灯一亮一灭的实验。电路如图3-1所示。1硬件电路设计实现LED小灯闪烁实际上就是让小灯亮一下灭一下,即让发光二极管导通一会儿再关断一会儿即可。因此,只需要将LED发光二极管的一个极接到电源上,另一个极接到单片机32个IO口的任何一个即可。这里需要注意:如果把发光二极管接到P0口,需要给P0口接上拉电阻,电路如图3-1所示。由于89S51单片机IO口输出低电平时的灌电流能力较强(可达20mA),而输出高电平时的拉电流能力较弱,这里设计时将LED发光二极管的阴极接到了单片机的P0.7引脚上,而阳极通过一个R1(470欧姆)这个限流电阻接到+5V上。图3-1 单片机控制一个LED小灯闪烁电路图2软件设计思想让P0.7引脚输出低电平(发光二极管导通发光),延时一段时间后再输出高电平(发光二极管截止不发光),再延时一段时间后输出低电平,反复循环即可。3程序代码清单ORG 0000H ;复位时程序从此开始SJMP START ;跳到START进行初始化ORG 0030H ;初始化程序从30H开始START:MOV SP, #60H ;给堆栈指针赋值 MOV P0, #0FFH ;让P0口输出高电平,即让灯灭;-主程序-MAIN:CLR P0.0 ;P0.0口置低电平,灯亮 CALL DELAY ;调用延时程序 SETB P0.0 ;P0.0口置高电平,灯灭 CALL DELAY ;调延时程序 SJMP MAIN ;跳到MAIN;-延时子程序-DELAY:MOV R0, #250 ;给R0赋值 D2:MOV R1, #250 ;给R1赋值 D1:DJNZ R1, D1 ;R1减1不等于0跳到D1处 DJNZ R0, D2 ;R0减1不等于0跳到D2处 RET ;子程序结束返回 END ;程序结束4程序代码分析(略)5互动环节大海:我是初学者,没有电路方面的任何基础,你能不能把电路图中的C1、R2和那8个并排的电阻方面的知识再详细说说吗? 行者:NO问题!C1和R2构成了复位电路。当刚开始上电时,即刚一接上电源VCC时,C1瞬间相当于短路(电路里有关于暂态分析部分的知识),C1两端保持0伏电压,VCC的电源电压就都加在了R2上,因此在单片机9脚RST上出现高电平,此后C1上逐渐充电,也就在C1上出现电压,R2上的电压开始下降,最后单片机9脚RST上变成了低电平,在此过程中只要满足单片机9脚RST上的高电平持续24个振荡周期即可使单片机复位,即使程序从头从新开始执行。关于那8个并排的电阻是上拉电阻。因为单片机P0口内部没有上拉电阻,因此需要外接上拉电阻。在市场上可以买到这个排阻,它有9个引脚,一个是公共的引脚,公共引脚接在VCC上,其余8个引脚分别接到P0口的8个引脚上,这样比接分立的8个普通电阻方便,但是价格相对高些。31引脚接VCC上表示选择内部程序存储器。华建:通过上面程序中的汉语注释部分我们大致理解每条指令的意思,但是我还是对完成一个完整的程序的思路或者说程序是怎么执行的弄不太懂?行者:先给大家讲个小故事轻松一下吧。记得有一部电视剧雍正王朝,里面有个掌管皇宫安全的官,好像叫九门提督吧。他每天起床、洗漱、用餐完后就开始不停的在宫内循环转悠以确保皇宫安全,在转悠的过程中,当遇到了什么问题他会处理,甚至会调一些人来处理。单片机也一样,每当开始执行时,一定是从程序存储器的0000位置开始执行,跳到一个合适的位置(后面再讲)进行初始化(相当于是九门提督起床、洗漱、用餐),初始化相当于是做准备工作,接下来就进入主程序无限的循环(不停的在宫内循环转悠)。德华:是所有单片机程序都是从头跳到一个位置,然后进行初始化准备,最后进入一个无限循环的主程序中吗?为什么要跳过一段ROM的空间不用呢?ORG又是什么意思,初始化程序START:MOV SP,#60H 在这里有什么作用呢?行者:是的,所有程序都要从头执行并跳到一个合适的位置继续初始化的准备工作。原因就是从0000H到0030H之间有几个地址是有特殊用途的,我们在此预留了,具体用法我们后面再说。当然在本例中完全可以不跳也不会影响到LED小灯闪烁的效果。ORG是一条伪指令,仅起到宣布其下面的一条指令编译后生成的二进制代码存放的地点而已。如本例中SJMP START这条指令就放在了程序存储空间的0000H处了,而START:MOV SP,#60H就存放在程序存储器的0030H处了。初学者常犯的错误如下面这段程序所示,程序一开始从30H开始执行这是错误的,要从0H地址开始执行;在ORG 0040H后面又出现了ORG 0025H,即后面宣布的地点比前面的还小,这也是错误的,这就相当于在二楼上面建地下室。ORG 0030H SJMP START ORG 0040H START:MOV SP, #60H MOV P0, #0FFH ORG 0025H MOV P0, #45H 初始化就是做准备工作,例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论