单片机经典教程.docx
- 文档编号:7153335
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:50
- 大小:117.48KB
单片机经典教程.docx
《单片机经典教程.docx》由会员分享,可在线阅读,更多相关《单片机经典教程.docx(50页珍藏版)》请在冰豆网上搜索。
单片机经典教程
本文由逆凡007贡献
doc文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
单片机教程
第一课单片机的概述单片机,专业名称—MicroControllerUnit(微控制器件),它是由大名鼎鼎的INTEL公司发明的,最早的系列是MCS-48,后来有了MCS-51,现在还有MCS-96系列。
我们经常说的51系列单片机就是MCS-51,它是一种8位的单片机,MCS-96而系列则是一种16位的单片机,至于它们之间有何区别,我们以后会讲到。
后来INTEL公司把它的核心技术转让给了世界上很多的小公司(不过,再小也有几个亿的销售/年哦)所以世界上就有许多公司生产51系列兼容单片机,,比如飞利浦的87LPC系列,华邦的W78L系列,达拉斯的DS87系列,现代GSM97系列等等。
目前在我国比较流行的就是美国ATMEL公司的89C51它是一种带FlashROM的单片机(至于什么是FlashROM,我在这儿先不作介绍,等以后大家学到相关的知识时自然就会明白),我们的讲座就是以该型号的单片机来作实验的。
讲到这里,也许有的人会问:
我平时在各种书上看到全是讲解8031,8051等型号的单片机,它们又有什么不同呢?
其实它们同属于一个系列,只是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系列(极低功耗的单片机),还有日本的TOSHIBA,日立的HITACH,德国的西门子SIEMENS等等,它们都有各自的结构体系,并不与51系列兼容。
为了不搞大家的脑筋,这里就不介绍了,等大家入门了以后自己再去研究它吧!
现在我们还是回来了解一下51系列单片机到底是个什么东西,它有那些部分组成,请接着往下看:
三.单片机的结构及组成单片机到底是一种什么东东,它究竟能做什么呢?
其实它就是一种能进行数学和逻辑运算,根据不同使用对象完成不同控制任务的面向控制而设计的集成电路。
此话好象有点绕口,没关系,大家都应该知道我们经常使用的电脑吧,在电脑上,我们可以用不同的软件在相同的硬件上实现不同的工作。
比如我们用WORD可以打字,用PROTEL可以设计图纸等等,单片机其实也是如此,同样的芯片可以根据他不同的要求做出截然不同的产品,只不过电脑是面向应用的,而单片机是面向控制的,比如控制一个指示灯的亮和灭,控制一台电机的启动和停止等等。
那么它的内部究竟由哪些部件组成的呢?
大家都知道我们的电脑有很多的零件,比如CPU(中央处理),RAM(内存),ROM(程序存储器),输入输出设备(并行串行口)等等,在单片机中这些部件都有,而且还把它们全部做到了一块芯片上(这就是单片机名称的由来)。
讲到这里,您一定会想,这么多零件集成在一块芯片上,那为什么单片机的价格会这么便宜(89S51每块才10元左右),其实原因很简单功能有强弱,就象我们平时用的PLC,控制一台数控机床要用128点的,而控制一台电机有几点的就足够了,另外这种芯片的产量很大,技术也非常的成熟,自然价格也就很低了。
那么单片机是如何来工作的,我们学习单片机又需要做哪些准备呢?
对于一个初学者来说这是很有必要了解的:
四.学习单片机的准备工作首先您需要一台电脑,这是最基本的,配置嘛,P2以上的就可以了;然后您需要一套开发单片机的软件,这个软件叫KEILC51,它是美国KeilSoftware公司专门为MCS-51系列单片机开发的第三方软件,最新版本是V7.09,安装时选择Uvision2,虽然有2K代码的限制,但足以满足我们学习的需要;其次,您还需要一台编程器,它一种把程序写进单片机芯片的设备,这种设备品种很多,操作也很简单,大家既可以1买现成的产品(价格从200多元到2000多元的都有),也可以自己制作;有了这两样东西还不行,为了看到程序执行的结果,我们还需要一块实验板。
好在现在出现了一种支持在线下载的单片机,只要满足一定的外部条件,就能够直接把汇编的程序下载到目标单片机中。
经过反复的实验,我们开发设计了这样的一套实验系统,它采用了一套集源代码编辑、软件汇编、程序下载于一体的专业软件,采用具有在线下载功能的FLASH储器,烧写次数可以达到1000次以上。
第二课单片机引脚功能介绍1.VCC(40):
电源+5V。
2.VSS(20):
接地,也就是GND。
3.XTL1(19)和XTL2(18):
振荡电路。
单片机是一种时序电路,必须有脉冲信号才能工作,在它的内部有一个时钟产生电路,有两种振荡方式,一种是内部振荡方式,只要接上两个电容和一个晶振即可;另一种是外部振荡方式,采用外部振荡方式时,需在XTL2上加外部时钟信号(详细的内容将在以后的课程中专门介绍)。
4.PSEN(29):
片外ROM选通信号,低电平有效。
5.ALE/PROG(30):
地址锁存信号输出端/EPROM编程脉冲输入端。
6.RST/VPD(9):
复位信号输入端/备用电源输入端。
什么是复位信号,为什么要加复位信号?
当然也暂时不去管它。
7.EA/VPP(31):
内/外部ROM选择端。
在30、9脚的功能上不知大家注意没有,都有一个/,什么意思呢?
这是引脚的第二功能,也就是说,该引脚既可以作前面的功能,也可以作后面的功能,至于它是如何工作的,我们暂时也别去研究。
8.P0口(39-32):
双向I/O口。
9.P1口(1-8):
准双向通用I/0口。
10.P2口(21-28):
准双向I/0口。
11.P3口(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.0(1脚)的LED1亮了起来;改变源代码,变成SETBP1.0;进行编译,下载,看看结果是不是LED1不亮了。
2ROM单片机89S52,配合本教程,可以完成教程中的每一个实验。
这样既免去了您ROM的存添置编程器和仿真器等设备的昂贵费用,又可以直接在实验板上看到程序执行的结果,更由于采用的是FLASH
第三课单片机内部结构
(一)第三课单片机内部结构(单片机内部结构单片机的内部究竟有哪些部分组成的,它们都有些什么作用呢?
让我们先来了解其中的ROM存储器:
一.半导体存储器ROM1.几个基本概念上一课我们讲到了把编译后的指令下载到单片机后这条指令一定在单片机内的某个地方,那么它究竟在哪里呢?
原来它就放在一个叫程序存储器的地方,英文名称ROM(全称为ReadOnlyMemory),叫只读存储器。
它是一个什么东西呢?
在讨论这个问题之前,让我们先来看几个物理现象:
(1)数和物理现象的关系不知大家是否还记得,在学习数字电路时我们曾用一盏灯的亮和灭来表示电平的高和低,即用“1”来表示高电平,用“0”来表示低电平,如果现在有两盏灯那它会有几种状态呢?
00011011两盏灯的组合就是四种状态:
00,01,10,11。
如此看来灯的亮和灭这种物理现象同数字确实有着某种联系,如果我们把它们按一定的规律排列好,那么电平的高或低就可以用数字来表了,换句话说:
不同的数字可以代表不同数量灯的电平高或低。
比如:
0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111这十六种组合就可以代表四盏灯的状态,能理解吗?
(2)位及字节的含义在单片机中,一盏灯(实际上是一根线)我们称它为一位,它有两种状态(“0”或“1”),分别应电平的高或低,它是单片机最基本的数量单位,用BIT来表示。
8盏灯(八根线)有256种状态,这8盏灯(也就是8位)我们把它称为一个字节,用BYTE表示。
至于为什么要怎么规定,这就不需要你我操心了,我们只要记住就可以了。
那么单片机是如何来储存这些数字所代表的字节的状态的呢?
接着往下看:
2.半导体存储器的工作原理存储器就是用来存放数据的地方,它其实是利用电平的高或低来存放数据的,也就是说,它实际上存放的是电平的高或低的状态,而不是我们所习惯上认为的“1234”这样的数字。
那它是如何工作的呢?
一个存储器就象一个小抽屉,一个小抽屉里有8个小盒子每个小盒子用来存放1位“电荷”,电荷通过与它相连的电线传进来或释放掉,至于电荷在小盒子里是怎样存放的,这就不用我们操心了,您可以把电线想象成水管,小盒子里的电荷就象是水,那就好理解了存储器中的1个小抽屉我们把它称之为1个“单元”,相当于1个字节,而1个小盒子就相当于1位。
有了这么一个构造,我们就可以开始存放数据了,比如我们要放进一个数据“00011010”,我们只要把第2号、第4号和第5号小盒子里存满电荷,而其它小盒子里的电荷给放掉就行了。
可是问题又出来了,一个存储器有好多相同的单元,线是并联着的(看D7-D0),在放入电荷的时候,会将电荷放入所有的字节单元中,而释放电荷的时候,会把每个单元中的电荷都放掉,这样的话,不管存储器有多少个字节单元,都只能放同一个数,这当然不是我们所希望的。
因此,我们要在结构上稍作变化,看上面的图,在每个单元上有根线与译码器相连,我想要把数据放进哪个单元,就通过译码器给哪个单元发一个信号,由译码器的通过这根线把相应的开关打开,这样电荷就可以自由地进出了。
那么这样是不是就能随意地向存储器写入或者读出数据了呢?
其实还不能,当我们向存储器写入数据时,必须先把这个开关切换到写入端;而要读出数据时,就得先把开关切换到读出端;而片选端则是为了区分不同的存储器设置的。
3.半导体存储器的译码简单介绍一下:
我们知道,1根线可以代表2种状态;2根线可以代表4种状态;3根线可以代表8种;256种状态又需要几根线代表?
8根线,所以一片6264存储器我们只需要16根线就可以了。
4.存储器的选片及总线的概念至此,译码的问题解决了,让我们再来关注另外一个问题:
送入每个字节的8根线又是从什么地方来的呢?
它就是从单片机的外部引脚上接过来的,一般这8根线除了接一个存储器之外,还要接其它的器件,这样问题又出来了,这8根线既然不是存储器和单片机之间专用的,如果总是将某个单元接在这8根线上,就不行了,比如这个存储器单元中的数值是“FFH”,另一个存储器的单元是“00H”,那么这根线到底是处于高电平,还是低电平?
岂不是要打架看谁历害了?
所以我们必须让它们分离。
办法当然也简单,当外面的线接到集成电路的引脚上来后,不直接接到各单元去,中间再加一组开关就行了。
这组开关就是前面提到的控制器(看前面的图),平时我们让开关打开着,如果确实是要向这个存储器中写入数据,或要从存储器中读出数据,再让开关切换到相应的位置就行了。
这组开关由三根引线选择读控制端、写控制端和片选端,要将数据写入,先由控制器选中该片,然后发出相应的写信号,开关切换到相应的位置,并将传过来的数据(电荷)写入片中;如果要读信号,先选中该片,然后发出读信号,开关也切换到相应的位置上,数据就被送出去了;另外读和写信号还同时受到译码器的控制,由于选端的不同,所以虽有读或写信号,但没有片选信号,所以另一个存储器就不会“误会”而开门,造成冲突,那么会不会同时选中两个存储器呢?
只要是设计好的系统就不会,因为它是由计算机来控制的,如果真的出现同时选中两个存储器的话,那就是电路出故障了。
3如此看来,存储器要想写入或者读出数据还真是不简单,不过好在这些都是由计算机自动完成的,不需要我们去操心。
从上面的介绍中我们已经看到,用来传递数据的8根线(51单片机是8根)并不是专用的,而是很多器件大家共用的,所以我
们把它们称之为数据总线(总线英文名为BUS),即公交道,谁都可以走;而16根地址线(51单片机共有16根地址线,这些以后会讲解,这里不必死记硬背)也是连在一起的,我们把它们称之为地址总线,
5.半导体存储器的分类第一课中我们提到过,89C51是一种带FlashROM的单片机,什么是FlashROM?
它到底是一种什么东西呢?
ROM我们已经知道,是只读存储器,所谓只读,从字面上理解那就是只可以从里面读出数据,而不能写进去,它类似于我们的书本,发到我们手里之后,我们只能读里面的内容,不可以随意更改书本上的内容。
ROM就是单片机中用来存放程序的地方,前面我们下载到单片机的指令就放在这个地方。
讲到这里大家也许会感到困惑,既然ROM是只读存储器,那么指令又是如何进入其中的呢?
其实所谓的只读只是针对正常工作情况下而言,也就是在使用这块存储器的时候,而不是指制造这块芯片的时候,只要让存储器满足一定的条件就能把数据预先写进去,这个道理也很好理解,书本拿到我们手里是不能改了,但当它还是原材料--白纸的时候,我们完全可以由印刷厂把内容印上去嘛。
前面的编程就是这么回事!
FlashROM是一种快速存储式只读存储器,这种程序存储器的特点就是既可以电擦写,而且掉电后程序还能保存,编程寿命可以达到几千至几万次,所以我们的实验系统是可以反复烧写的,您尽管使用。
目前新型的单片机都采用这种程序存储器;当然,除了这种程序存储器外,还有两种早期的程序存储器产品,简单介绍一下:
PROMEPROM和EEPROM,PROM称之为可编程只读存储器,就象我们的练习本,买来的时候是空白的,可以写东西上去,可一旦写上去,就擦不掉了,所以它只能写一次,要是写错了,就报废了,习惯上我们把带这种程序存储器的单片机称为OTP型单片机,如果您的产品批量生产,又要求价格比较低的话,带这种程序存储器的单片机是非常合适的;EPROM,称之为紫外线擦除的可编程只读存储器,它里面的内容写上去之后,如果觉得不满意,可以用一种特殊的方法去掉后重写,就是用紫外线照射,紫外线就象“消字灵”,可以把字去掉,然后再重写,当然消的次数多了,也就不灵光了,所以这种芯片可以擦除的次数也是有限的——几百次吧,电脑上的BIOS芯片采用的就是这种结构的存储器;EEPROM,前一种存储器的擦写要用紫外线,而这种存储器可以直接用电擦写,比较方便数据的改写,它有点类似于FLASH存储器,但比FLASH存储器速度要慢,现在新型的外部扩展存储器都是都是这种结构。
了解了ROM,让我们再来简单讲讲另一种存储器,叫随机存取存储器,也叫内存,英文缩写为RAM(RandomAccessMemory),它是一种既可以随时改写,也可以随时读出里面数据的存储器,类似于我们上课用的黑板,可以随时写东西上去,也可以用黑板擦随时擦掉重写,它也是单片机中重要的组成部分,单片机中有很多的功能寄存器都与它有关。
二.本课总结本课主要讲述了单片机的两种半导体存储器—只读存储器ROM和随机存储器RAM的工作原理,它们是单片机的重要组成部分,了解它的内部结构对我们学习单片机是很有帮助的。
不过如果您一时对本课的内容还无法搞得很明白,也没有关系,随着学习的深入,我们还会慢慢地讲解相应的基础知识,可千万不要放弃哟?
我在没有学会单片机之前也是如此囫囵吞枣的。
第四课单片机内部结构
(二)单片机内部结构(一.LED灯闪烁的实验程序我们要让LED1不断的闪烁,就象大海中用的航标灯。
怎样才能让LED1不断的闪烁呢?
实际上就是让它亮几秒,再灭几秒,也就是让P1.0交替地输出高电平或低电平,按照前面所学的知识,我们写出下面的程序:
CLRP1.0;SETBP1.0;编译后下载到单片机?
这里有两个问题:
首先计算机执行指令的速度很快,执行完第1条指令后LED1是灭了,但在极短的时间内又去执行第2条指令,LED1又亮了,我们根本无法看到灯曾经灭过;第二个问题是当执行完第2条指令后,不会再去执行第1条指令了,因为单片机执行指令的过程是一条一条地顺序执行的。
如何解决这两个问题呢?
我们可以作如下的设想:
第一,执行完第1条指令后让单片机延时一段时间(几秒或零点几秒),然后再去执行第2条指令,这样就可以看到LED1曾经灭过了;第二,让单片机执行完全部指令后再返回去执行第1条指令,如此不断的循环就可以达到我们的要求了。
实验程序如下:
主程序MAIN:
SETBP1.0;(1)LCALLDELAY;(2)CLRP1.0;(3)LCALLDELAY;(4)LJMPMAIN;(5)子程序DELAY:
MOVR7,#250;(6)D1:
MOVR6,#250;(7)4
D2:
DJNZR6,D2;(8)DJNZR7,D1;(9)RET;(10)END.(11)还记得软件的使用方法吗?
调试,写入源代码,编译,下载到单片机,看看是不是我们想要的结果?
?
在分析这段程序之前,先来说明几个标点符号的意义:
1.分号在这里起一个分隔符的作用,表示这条指令到此为止;2.括号内的数字在这里是为了解释程序用的,实际的编译过程中是没有意义的,也就是说没有也是一样的,只是为了程序的可读性更强,我们一般会在分号的后面加上程序的注释文字(后面我们会用到);
3.特别:
程序中的标点符号只能在英文状态下输入,当使用中文输入时,必须切换到半角状态,不然编译软件会出错。
接下来我们分析一下这段程序:
按照我们的要求,第1条,让灯灭,第2条应该是延时,第3条是让灯亮,第4条和第2条一样也应该是延时,第5条应当返回去执行第1条指令。
看一下上面的程序,第1条我们已经懂了,是让LED1灭,第2条和第4条我们等一下讨论,第5条是LJMPMAIN,LJMP是一条指令,意思是转移,转移到什么地方去呢?
看一下LJMP后面跟着什,是MAIN,什么地方有MAIN,在第1条指令的开头就是MAIN,所以第5条指令的意思就是跳转到MAIN(即第1条指令处继续执行),如此一来,就不断地重复执行这些指令。
那么MAIN又是什么意思呢?
它实际上是我们为这段程序起的一个名称,专业术语叫标号,既然是一个名称那可不可以用mcu,CHINA等等的其他名字呢?
当然可以,这完全取决于您的需要(?
:
不过也有一些是不能采用的,我们以后再讲)。
再来分析第2条和第4条指令,看看它们是如何实现延时的?
LCALLDELAY,LCALL也是一条指令,这条指令叫做调用子程序指令,看看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的这一段指令我们称之为子程序,它是一段延时程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 经典 教程