51八脚单片机机检测到p1.0脚输入一个持续高电平.然后让p1.1输出五秒低电平

一台能够工作的计算机要有这样幾个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)在个人计算机上這些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上而在八脚单片机机中,这些部份全部被做到一块集成电路芯片中了,所以就称为八脚单片机(单芯片)机而且有一些八脚单片机机中除了上述部份外,还集成了其它部份如A/DD/A等。

   八脚单片机机是一种控淛芯片一个微型的计算机,而加上晶振存储器,地址锁存器逻辑门,七段译码器(显示器)按钮(类似键盘),扩展芯片接口等那是八脚单片机机系统。

 天!PC中的CPU一块就要卖几千块钱这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了

 不,价格并不高从几元人民币到几十元人民币,体积也不大一般用40脚封装,当然功能多一些八脚单片机机也有引脚比较多的如68引脚,功能尐的只有10多个或20多个引脚有的甚至只8只引脚。

 功能有强弱打个比方,市场上面有的组合音响一套才卖几百块钱可是有的一台功放机僦要卖好几千。另外这种芯片的生产量很大技术也很成熟,51系列的八脚单片机机已经做了十几年所以价格就低了。

既然如此八脚单爿机机的功能肯定不强,干吗要学它呢

 话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能一个控制電冰箱温度的计算机难道要用PIII?应用的关键是看是否够用是否有很好的性能价格比。所以8051出来十多年依然没有被淘汰,还在不断的发展中

更多八脚单片机机学习资料请来 

我们平常老是讲8051,又有什么8031现在又有89C51,89s51它们之间究竟是什么关系?

MCS51是指由美国INTEL公司(对了就是大洺鼎鼎的INTEL)生产的一系列八脚单片机机的总称,这一系列八脚单片机机包括了好些品种如8031,80518751,80328052,8752等其中8051是最早最典型的产品,该系列其它八脚单片机机都是在8051的基础上进行功能的增、减、改变而来的所以人们习惯于用8051来称呼MCS51系列八脚单片机机,而8031是前些年在我国朂流行的八脚单片机机所以很多场合会看到8031的名称。INTEL公司将MCS51的核心技术授权给了很多其它公司所以有很多公司在做以8051为核心的八脚单爿机机,当然功能或多或少有些改变,以满足不同的需求其中89C51就是这几年在我国非常流行的八脚单片机机,它是由美国ATMEL公司开发生产嘚以后我们将用89C51八脚单片机机来完成一系列的实验。

⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端

  80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)  

   拿到一块芯片,想要使用它首先必须要知道怎样连线,峩们用的一块称之为89C51的芯片下面我们就看一下如何给它连线。

1、 电源:这当然是必不可少的了八脚单片机机使用的是5V电源,其中正极接40管脚负极(地)接20管脚。
2、 振蒎电路:八脚单片机机是一种时序电路必须供给脉冲信号才能正常工作,在八脚单片机机内部已集成叻振荡器使用晶体振荡器,接18、19脚只要买来晶体震荡器,电容连上就能了,按图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,这是规定不能由我们来更改。

 名字有了我们又怎样让它变'高'或变'低'呢?叫人做事说一声就能,這叫发布命令要计算机做事,也得要向计算机发命令计算机能听得懂的命令称之为计算机的指令。让一个管脚输出高电平的指令是SETB讓一个管脚输出低电平的指令是CLR。因此我们要P1.0输出高电平,只要写SETB P1.0要P1.0输出低电平,只要写 CLR

 现在我们已经有办法让计算机去将P10输出高或低电平了但是我们怎样才能计算机执行这条指令呢?总不能也对计算机也说一声了事吧要解决这个问题,还得有几步要走第一,计算机看不懂SETB CLR之类的指令我们得把指令翻译成计算机能懂的方式,再让计算机去读计算机能懂什么呢?它只懂一样东西——数字因此峩们得把SETB ),至于为什么是这两个数字这也是由51芯片的设计者--INTEL规定的,我们不去研究第二步,在得到这两个数字后怎样让这两个数芓进入八脚单片机机的内部呢?这要借助于一个硬件工具"编程器"如果你还不知道是什么是编程器,我来介绍一下就是把你在电脑上写絀来来的代码用汇编器等编译器生成的一个目标烧写到八脚单片机机的eprom里面去的工具,80c51这种类型的八脚单片机机编程是一件很麻烦的事情必要要先装到编程器上编程后才能在设备上使用,而目前最新的89s51八脚单片机机居然在线编程(isp)功能不用拔出来利用简单的电路就可鉯实现把代码写入八脚单片机机内部,本站有详细的at89s51编程器制作教程

 我们将编程器与电脑连好运行编程器的软件,然后在编缉区内写入(D2H,90H)见图2

 写入……好,拿下片子把片子插入做好的电路板,接通电源……什么?灯不亮这就对了,因为我们写进去的指令就是让P10输出高电平灯当然不亮,要是亮就错了现在我们再拨下这块芯片,重新放回到编程器上将编缉区的内容改为(C2H,90H),也就是CLR P1.0写片,拿下爿子把片子插进电路板,接电好,灯亮了因为我们写入的()就是让P10输出低电平的指令。这样我们看到硬件电路的连线没有做任哬改变,只要改变写入八脚单片机机中的内容就能改变电路的输出效果。

3:八脚单片机机存储器结构

八脚单片机机内部存储结构分析
   我們来思考一个问题当我们在编程器中把一条指令写进八脚单片机要内部,然后取下八脚单片机机八脚单片机机就可以执行这条指令,那么这条指令一定保存在八脚单片机机的某个地方并且这个地方在八脚单片机机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢这个地方就是八脚单片机机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢刚才我们不是明明把两个数字写进去了吗?原來在89C51中的ROM是一种电可擦除的ROM称为FLASH ROM,刚才我们是用的编程器在特殊的条件下由外部设备对ROM进行写的操作,在八脚单片机机正常工作条件丅只能从那面读,不能把数据写进去所以我们还是把它称为ROM。

数的本质和物理现象:我们知道计算机能进行数学运算,这可令我们非常的难以理解计算机吗,我们虽不了解它的组成但它总只是一些电子元器件,怎么能进行数学运算呢我们做数学题如37+45是这样做的,先在纸上写37然后在下面写45,然后大脑运算最后写出结果,运算的原材料:37、45和结果:82都是写在纸上的计算机中又是放在什么地方呢?为了解决这个问题先让我们做一个实验:这里有一盏灯,我们知道灯要么亮要么不亮,就有两种状态我们能用’0’和’1’来代替这两种状态,规定亮为’1’不亮为’0’。现在放上两盏灯一共有几种状态呢?我们列表来看一下:

不就是我们学过的的二进制数吗本来,灯的亮和灭只是一种物理现象可当我们把它们按一按的次序排更好后,灯的亮和灭就代表了数字了让我们再抽象一步,灯为什么会亮呢看电路1,是因为输出电路输出高电平给灯通了电。因此灯亮和灭就能用电路的输出是高电平还是低电平来替代了。这样数字就和电平的高、低联系上了。(请想一下我们还看到过什么样的类似的例程呢?(海军之)灯语、旗语电报,甚至红、绿灯)

  通过上面的实验我们已经知道:一盏灯亮或者说一根线的电平的高低能代表两种状态:0和1。实际上这就是一个二进制位因此我们就把┅根线称之为一“位”,用BIT表示

 一根线能表于0和1,两根线能表达0001,1011四种状态,也就是能表于0到3而三根能表达0-7,计算机中常常用8根線放在一起同时计数,就能表过到0-255一共256种状态这8根线或者8位就称之为一个字节(BYTE)。不要问我为什么是8根而不是其它数因为我也不知道。(计算机世界是一本人造的世界不是自然界,很多事情你无法问为什么只能说:它是一种规定,大家在以后的学习过程中也要紸意这个问题)

   存储器就是用来存放数据的地方它是利用电平的高低来存放数据的,也就是说它存放的实际上是电平的高、低,而不昰我们所习惯认为的1234这样的数字这样,我们的一个谜团就解开了计算机也没什么神秘的吗。

让我们看图2八脚单片机机里面都有这样嘚存储器,这是一个存储器的示意图:一个存储器就象一个个的小抽屉一个小抽屉里有八个小格子,每个小格子就是用来存放“电荷”嘚电荷通过与它相连的电线传进来或释放掉,至于电荷在小格子里是怎样存的就不用我们操心了,你能把电线想象成水管小格子里嘚电荷就象是水,那就好理解了存储器中的每个小抽屉就是一个放数据的地方,我们称之为一个“单元”

那么,我们怎样来控制各个單元的控制线呢这个还不简单,把每个单元元的控制线都引到集成电路的外面不就行了吗事情可没那么简单,一片27512存储器中有65536个单元把每根线都引出来,这个集成电路就得有6万多个脚不行,怎么办要想法减少线的数量。我们有一种办法称这为译码简单介绍一下:一根线能代表2种状态,2根线能代表4种状态3根线能代表几种,256种状态又需要几根线代表8种,8根线所以65536种状态我们只需要16根线就能代表了。

3、存储器的选片及总线的概念

至此译码的问题解决了,让我们再来关注另外一个问题送入每个单元的八根线是用从什么地方来嘚呢?它就是从计算机上接过来的一般地,这八根线除了接一个存储器之外还要接其它的器件,如图4所示这样问题就出来了,这八根线既然不是存储器和计算机之间专用的如果总是将某个单元接在这八根线上,就不好了比如这个存储器单元中的数值是0FFH另一个存储器的单元是00H,那么这根线到底是处于高电平还是低电平?岂非要打架看谁历害了所以我们要让它们分离。办法当然很简单当外面的線接到集成电路的管脚进来后,不直接接到各单元去中间再加一组开关(参考图4 )就行了。平时我们让开关关闭着如果确实是要向这個存储器中写入数据,或要从存储器中读出数据再让开关接通就行了。这组开关由三根引线选择:读控制端、写控制端和片选端要将數据写入片中,先选中该片然后发出写信号,开关就合上了并将传过来的数据(电荷)写入片中。如果要读先选中该片,然后发出讀信号开关合上,数据就被送出去了注意图4,读和写信号同时还接入到另一个存储器但是由于片选端不一样,所以虽有读或写信号但没有片选信号,所以另一个存储器不会“误会”而开门造成冲突。那么会不一样时选中两片芯片呢只要是设计好的系统就不会,洇为它是由计算控制的而不是我们人来控制的,如果真的出现同时出现选中两片的情况那就是电路出了故障了,这不在我们的讨论之列

   从上面的介绍中我们已经看到,用来传递数据的八根线并不是专用的而是很多器件大家共用的,所以我们称之为数据总线总线英攵名为BUS,总即公交车道谁者能走。而十六根地址线也是连在一起的称之为地址总线。

 按功能能分为只读和随机存取存储器两大类所謂只读,从字面上理解就是只能从里面读不能写进去,它类似于我们的书本发到我们手回之后,我们只能读里面的内容不能随意更妀书本上的内容。只读存储器的英文缩写为ROM(READ ONLY MEMORY)

所谓随机存取存储器即随时能改写,也能读出里面的数据它类似于我们的黑板,我能隨时写东西上去也能用黑板擦擦掉重写。随机存储器的英文缩写为RAM(READ RANDOM MEMORY)这两种存储器的英文缩写一定要记牢

注意:所谓的只读和随机存取都是指在正常工作情况下而言,也就是在使用这块存储器的时候而不是指制造这块芯片的时候。不然只读存储器中的数据是怎么來的呢?其实这个道理也很好理解书本拿到我们手里是不能改了,能当它还是原材料——白纸的时候当然能由印刷厂印上去了。

顺便解释一下其它几个常见的概念

  PROM,称之为可编程存储器这就象我们的练习本,买来的时候是空白的能写东西上去,可一旦写上去就擦不掉了,所以它只能用写一次要是写错了,就报销了(现在已经被淘汰)

  EPROM,称之为紫外线擦除的可编程只读存储器它里面的内容寫上去之后,如果觉得不满意能用一种特殊的办法去掉后重写,这就是用紫外线照射紫外线就象“消字灵”,能把字去掉然后再重寫。当然消的次数多了也就不灵光了,所以这种芯片能擦除的次数也是有限的——几百次吧(现在已经被淘汰)

   EEPROM,也叫 E2PROM称之为电可擦鈳编程只读存储器它和EEPROM类似,写上去的东西也能擦掉重写但它要方便一些,不需要光照了只要用电就能擦除或者重新改写数据,所鉯就方便许多而且寿命也很长(几万到几十万次不等)。

  FLASH称之为闪速存储器,属于EEPROM的改进产品它的最大特点是必须按块(Block)擦除(每个区塊的大小不定,不同厂家的产品有不同的规格) 而EEPROM则可以一次只擦除一个字节(Byte)。FLASH现在常用于大容量存储,比如u盘

 再次强调这里的所有的写嘟不是指在正常工作条件下。不管是PROM还是EPROM它们的写都要有特殊的条件,一般我们用一种称之为“编程器”的设备来做这项工作一旦把咜装到它的工作位置,就不能随便改写了

4:第一个八脚单片机机小程序

  上一次我们的程序实在是没什么用,要灯亮还要重写一下片孓下面我们要让灯持续地闪烁,这就有一定的实用价值了比如能把它当成汽车上的一个信号灯用了。怎样才能让灯持续地闪烁呢实際上就是要灯亮一段时间,再灭一段时间也就是说要P10持续地输出高和低电平。怎样实现这个要求呢请考虑用下面的指令是否可行:

这昰不行的,有两个问题第一,计算机执行指令的时间很快执行完SETB P10后,灯是灭了但在极短时间(微秒级)后,计算机又执行了CLR P10指令燈又亮了,所以根本分辨不出灯曾灭过第二,在执行完CLR P10后不会再去执行SETB P10指令,所以以后再也没有机会让灭了

  为了解决这两个问題,我们能做如下设想第一,在执行完SETB P10后延时一段时间(几秒或零点几秒)再执行第二条指令,就能分辨出灯曾灭过了第二在执行唍第二条指令后,让计算机再去执行第一条指令持续地在原地兜圈,我们称之为"循环"这样就能完成任务了。

以下先给出程序(后面括號中的数字是为了便于讲解而写的实际不用输入):

    CLR P10     ;(3)

    AJMP LOOP    ;(5)

  DJNZ R7,D1     ;(9)

  RET         ;(10)

  END         ;(11)

按上面的设想分析一下前面的五条指令

  第一条是让灯灭,第二条应當是延时第三条是让灯亮,第四条和第二条一模一样也是延时,第五条应当是转去执行第一条指令第二和第四条实现的原理稍后谈,先看第五条LJMP是一条指令,意思是转移往什么地方转移呢?后面跟的是LOOP看一下,什么地方还有LOOP对了,在第一条指令的前面有一个LOOP所以很直观地,我们能认识到它要转到第一条指令处。这个第一条指令前面的LOOP被称之为标号它的用途就是给这一行起一个名字,便於使用是否一定要给它起名叫LOOP呢?当然不是起什么名字,完全由编程序的人决定能称它为A,X等等当然,这个时候第五条指令LJMP后媔的名字也得跟着改了。

  第二条和第四条指令的用途是延时它是怎样实现的呢?指令的形式是LCALL这条指令称为调用子程序指令,看┅下指令后面跟的是什么DELAY,找一下DELAY在第六条指令的前面,显然这也是一个标号。这条指令的作用是这样的:当执行LCALL指令时程序就轉到LCALL后面的标号所标定的程序处执行,如果在执行指令的过程中遇到RET指令则程序就返回到LCALL指令的下面的一条指令继续执行,从第六行开始的指令中能看到确实有RET指令。在执行第二条指令后将转去执行第6条指令,而在执行完67,89条指令后将遇到第10条令:RET,执行该条指令后程序将回来执行第三条指令,即将P10清零使灯亮,然后又是第四条指令执行第四条指令就是转去执行第6,78,910條指令,然后回来执行第5条指令第5条指令就是让程序回到第1条开始执行,如此周而复始灯就在持续地亮、灭了。

  在标号DELAY标志的这┅行到RET这一行中的所有程序这是一段延时程序,大概延时零点几秒至于具体的时间,以后我们再学习如何计算 程序的最后一行是END,這不是一条指令它只是告诉我们程序到此结束,它被称为"伪指令"

八脚单片机机内部结构分析:为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号就从R1开始,R1被称之为工作寄存器什么是工作寄存器呢?让我们从现实生活中来找找答案如果出一道数学题:123+567,让你回答结果是多少你会马上答出是690,再看下面一道题:123+567+562要让你要上回答,就不这么不难了吧我们会怎样做呢?如果有张纸就不难了,我们先算出123+567=690把690写在纸上,然后再算690+562得到结果是1552这其中1552是我们想要的结果,而690并非我们所要的结果但是为叻得到最终结果,我们又不得不先算出690并记下来,这其实是一个中间结果计算机中做运算和这个类似,为了要得到最终结果一般要莋很多步的中间结果,这些中间结果要有个地方放才行把它们放哪呢?放在前面提到过的ROM中能吗显然不行,因为计算机要将结果写进詓而ROM是不能写的,所以在八脚单片机机中另有一个区域称为RAM区(RAM是随机存取存储器的英文缩写)它能将数据写进去。 特别地在MCS-51八腳单片机机中,将RAM中分出一块区域称为工作寄存器区

5:八脚单片机机延时程序分析

上一次课中,我们已经知道程序中的符号R7、R6是代表叻一个个的RAM单元,是用来放一些数据的下面我们再来看一下其它符号的含义。

RET        ;(10)

  MOV:这是一条指令意思是传递數据。说到传递我们都很清楚,传东西要从一本人的手上传到另一本人的手上也就是说要有一个接受者,一个传递者和一样东西从指令MOV R7,#250中来分析R7是一个接受者,250是被传递的数传递者在这条指令中被省略了(注意:并不是每一条传递指令都会省的,事实上大部份數据传递指令都会有传递者)它的意义也很明显:将数据250送到R7中去,因此执行完这条指令后R7单元中的值就应当是250。在250前面有个#号这叒是什么意思呢?这个#就是用来说明250就是一个被传递的东西本身而不是传递者。那么MOV R6#250是什么意思,应当不用分析了吧

DJNZ:这是另一条指令,我们来看一下这条指令后面跟着的两个东西一个是R6,一个是D2R6我们当然已知是什么了,查一下D2是什么D2在本行的前面,我们已学過这称之为标号。标号的用途是什么呢就是给本行起一个名字。DJNZ指令的执行过程是这样的它将其后面的第一个参数中的值减1,然后看一下这个值是否等于0,如果等于0就往下执行,如果不等于0就转移,转到什么地方去呢可能大家已猜到了,转到第二个参数所指萣的地方去(请大家用自已的话讲一下这条语句是怎样执行的)本条指令的最终执行结果就是,在原地转圈250次

 执行完了DJNZ R6,D2之后(也就昰R6的值等于0之后)就会去执行下面一行,也就是DJNZ R7D1,请大家自行分析一下这句话执行的结果(转去执行MOV R6,#250同时R7中的值减1),最终DJNZ R6D2這句话将被执行250*250=62500次,执行这么多次同一条指令干吗就是为了延时。

一个问题:如果在R6中放入0会有什么样的结果。

 前面我们介绍了延时程序但这还不完善,因为我们只知道DJNZ R6,D2这句话会被执行62500次但是执行这么多次需要多长时间呢?是否满足我们的要求呢我们还不知噵,所以下面要来解决这个问题

 先提一个问题:我们学校里什么是最重要的。(铃声)校长能出差老师能休息,但学校一日无铃声必萣大乱整个学校就是在铃声的统一指挥下,步调一致统一协调地工作着。这个铃是按一定的时间安排来响的我们能称之为“时序��时間的次序”。一个由人组成的单位尚且要有一定的时序计算机当然更要有严格的时序。事实上计算机更象一个大钟,什么时候分针动什么时候秒针动,什么时候时针动都有严格的规定,一点也不能乱计算机要完成的事更复杂,所以它的时序也更复杂

 我们已知,計算机工作时是一条一条地从ROM中取指令,然后一步一步地执行我们规定:计算机访问一次存储器的时间,称之为一个机器周期这是┅个时间基准,好象我们人用“秒”作为我们的时间基准一样为什么不干脆用“秒”,多好很习惯,学下去我们就会知道用“秒”反洏不习惯

一个机器周期包括12个时钟周期。下面让我们算一下一个机器周期是多长时间吧设一个八脚单片机机工作于12M晶体震荡器,它的時钟周期是1/12(微秒)它的一个机器周期是12*(1/12)也就是1微秒。(请计算一个工作于6M晶体震荡器的八脚单片机机它的机器周期是多少)。

MCS-51仈脚单片机机的所有指令中有一些完成得比较快,只要一个机器周期就行了有一些完成得比较慢,得要2个机器周期还有两条指令要4個机器周期才行。这也不难再解不是吗?我让你扫地的执行要完成总得比要你完成擦黑板的指令时间要长为了恒量指令执行时间的长短,又引入一个新的概念:指令周期所谓指令周期就是指执行一条指令的时间。INTEL对每一条指令都给出了它的指令周期数这些数据,大蔀份不需要我们去记忆但是有一些指令是需要记住的,如DJNZ指令是双周期指令

 下面让我们来计算刚才的延时。首先必须要知道晶体震荡器的频率我们设所用晶体震荡器为12M,则一个机器周期就是1微秒而DJNZ指令是双周期指令,所以执行一次要2个微秒一共执行62500次,正好125000微秒也就是125毫秒。

练习:设计一个延时100毫秒的延时程序

要点分析:1、一个单元中的数是否能超过255。2、如何分配两个数

  DJNZ R7,D1     ;(9)

  RET         ;(10)

  END         ;(11)}

 任何八脚单片机机在工作之前都要有个复位的过程复位是什麼意思呢?它就象是我们上课之前打的预备铃预备铃一响,大家就自动地从操场、其它地方进入教室了在这一段时间里,是没有老师幹预的对八脚单片机机来说,是程序还没有开始执行是在做准备工作。显然准备工作不需要太长的时间,复位只需要5ms的时间就能了如何进行复位呢?只要在八脚单片机机的RST管脚上加上高电平就能了,按上面所说时间不少于5ms。为了达到这个要求能用很多种办法,这里供给一种供参考见图1。实际上我们在上一次实验的图中已见到过了。

 这种复位电路的工作原理是:通电时电容两端相当于是短路,于是RST管脚上为高电平然后电源通过电阻对电容充电,RST端电压慢慢下降降到一定程序,即为低电平八脚单片机机开始正常工作。

6:八脚单片机机并行口结构

 上两次我们做过两个实验都是让P1.0这个管脚使灯亮,我们能设想:既然P1.0能让灯亮那么其它的管脚可不能呢?看一下图1它是8031八脚单片机机管脚的说明,在P1.0旁边有P1.1P1.2….P1.7,它们是否都能让灯亮呢除了以P1开头的外,还有以P0P2,P3开头的数一下,一囲是32个管脚前面我们以学过7个管脚,加上这32个这39个了它们都以P字开头,只是后面的数字不一样它们是否有什么联系呢?它们能不能嘟让灯亮呢在我们的实验板上,除了P10之外还有P11��P17都与LED相连,下面让我们来做一个实验程序如下:

将这段程序转为机器码,用编程器写叺八脚单片机机中结果如何?通电以后我们能看到8只LED全部在闪动因此,P10��P17是全部能点亮灯的事实上,凡以P开头的这32个管脚都是能点亮燈的也就是说:这32个管脚都能作为输出使用,如果不用来点亮LED能用来控制继电器,能用来控制其它的执行机构

程序分析:这段程序囷前面做过的程序比较,只有两处不一样:第一句:原来是SETB P1.0现在改为MOV P1,#0FFH第三句:原来是CLR P1.0,现在改为MOV P1.0#00H。从中能看出P1是P1.0��P1.7的全体的代表,一个P1就表示了所有的这八个管脚了当然用的指令也不一样了,是用MOV指令为什么用这条指令?看图2我们把P1作为一个整体,就把它当莋是一个存储器的单元对一个单元送进一个数能用MOV指令。

除了能作为输出外这32个管脚还能做什么呢?下面再来做一个八脚单片机机实驗源程序如下:

先看一下这个实验的结果:所有灯全部不亮,然后我按下一个按钮第()个灯亮了,再按下另一个按钮第()个灯煷了,松开按钮灯就灭了从这个实验现象结合电路来分析一下程序。

从硬件电路的连线能看出有四个按钮被接入到P3口的P32,P33P34,P35第一條指令的用途我们能猜到:使P3口全部为高电平。第二条指令是MOV AP3,其中 MOV已经见是送数的意思,这条指令的意思就是将P3口的数送到A中去峩们能把A当成是一个中间单元(看图3),第三句话是将A中的数又送到P1口去第四句话是循环,就是持续地重复这个过程这我们已见过。當我们按下第一个按钮时第(3)只灯亮了,所以P12口应当输出是低电平为什么P12口会输出低电平呢?我们看一下有什么被送到了P1口只有從P3口进来的数送到A,又被送到了P1口所以,肯定是P3口进来的数使得P12位输出电平的P3口的P32位的按钮被按下,使得P32位的电平为低通过程序,叒使P12口输出低电平所以P3口起来了一个输入的作用。验证:按第二、三、四个按钮同时按下2个、3个、4个按钮都能得到同样的结论,所以P3ロ确实起到了输入作用这样,我们能看到以P字开头的管脚,不仅能用作输出还能用作输入,其它的管脚是否能呢是的,都能这32個管脚就称之为并行口,下面我们就对并行口的结构作一个分析看一下它是怎样实现输入和输出的。

先看P1口的一位的结构示意图(只画絀了输出部份):从图中能看出开关的打开和合上代表了管脚输出的高和低,如果开关合上了则管脚输出就是低,如果开关打开了則输出高电平,这个开关是由一根线来控制的这根数据总线是出自于CPU,让我们回想一下数据总线是一根大家公用的线,很多的器件和咜连在一起在不一样的时候,不一样的器件当然需要不一样的信号如某一时刻我们让这个管脚输出高电平,并要求保持若干时间在這段时间里,计算机当然在忙个不停在与其它器件进行联络,这根控制线上的电平未必能保持原来的值不变输出就会发生变化了。怎麼解决这个问题呢我们在存储器一节中学过,存储器中是能存放电荷的我们不妨也加一个小的存储器的单元,并在它的前面加一个开關要让这一位输出时,就把开关打开信号就进入存储器的单元,然后马上关闭开关这样这一位的状态就被保存下来,直到下一次命囹让它把开关再打开为止这样就能使这一位的状态与别的器件无关了,这么一个小单元我们给它一个很形象的名字,称之为“锁存器”

这是并行口的一位的输出结构示意图,再看除了输出之外,还有两根线一根从外部管脚接入,另一根从锁存器的输出接出分别標明读管脚和读锁存器。这两根线是用于从外部接收信号的为什么要两根呢?原来在51八脚单片机机中输入有两种方式,分别称为‘读管脚’和‘读锁存器’第一种方式是将管脚作为输入,那是真正地从外部管脚读进输入的值第二种方式是该管脚处于输出状态时,有時需要改变这一位的状态则并不需要真正地读管脚状态,而只是读入锁存器的状态然后作某种变换后再输出。

请注意输入结构图如果将这一根引线作为输入口使用,我们并不能保证在任何时刻都能得到正确的结果(为什么)参考图2输入示意图。接在外部的开关如果咑开则应当是输入1,而如果闭合开关则输入0,但是如果八脚单片机机内部的开关是闭合的,那么不管外部的开关是开还是闭八脚單片机机接受到的数据都是0。可见要让这一端口作为输入使用,要先做一个‘准备工作’就是先让内部的开关断开,也就是让端口输絀‘1’才行正因为要先做这么一个准备工作,所以我们称之为“准双向I/O口”

以上是P1口的一位的结构,P1口其它各位的结构与之相同而其它三个口:P0、P2、P3则除入作为输入输出口之外还有其它用途,所以结构要稍复杂一些但其用于输入、输出的结构是相同的。看图()對我们来说,这些附加的功能不必由我们来控制所以我们就不去关心它了。

7:八脚单片机机的特殊功能寄存器

 通过前面的学习我们已知八脚单片机机的内部有ROM、有RAM、有并行I/O口,那么除了这些东西之外,八脚单片机机内部究竟还有些什么这些个零碎的东西怎么连在一起的,让我们来对八脚单片机机内部的寄存器作一个完整的功能分析吧!
   下图中我们能看出在51八脚单片机机内部有一个CPU用来运算、控制,有四个并行I/O口分别是P0、P1、P2、P3,有ROM用来存放程序,有RAM用来存放中间结果,此外还有定时/计数器串行I/O口,中断系统以及一个内部嘚时钟电路。在一个51八脚单片机机的内部包含了这么多的东西

 对上面的图进行进一步的分析,我们已知对并行I/O口的读写只要将数据送叺到对应I/O口的锁存器就能了,那么对于定时/计数器串行I/O口等怎么用呢?在八脚单片机机中有一些独立的存储单元是用来控制这些器件的被称之为特殊功能寄存器(SFR)。事实上我们已接触过P1这个特殊功能寄存器了,还有哪些呢看下表1

定时器/计数器1(高8位)

定时器/计数器1(低8位)

定时器/计数器0(高8位)

定时器/计数器0(低8位)

定时器/计数器方式控制寄存器

定时器/计数器控制寄存器

数据地址指针(高8位)

数據地址指针(低8位)

<特殊功能寄存器地址映象表(一)>

<特殊功能寄存器地址映象表(二)>

<特殊功能寄存器地址映象表(三)>

下面,我们介紹一下几个常用的SFR看图2。

ACC:累加器常常用A表示。这是个什么东西可不能从名字上理解,它是一个寄存器而不是一个做加法的东西,为什么给它这么一个名字呢或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊身份也特殊,稍后我们将學到指令能发现,所有的运算类指令都离不开它

2、B:一个寄存器。在做乘、除法时放乘数或除数不做乘除法时,随你怎么用

3、PSW:程序状态字。这是一个很重要的东西里面放了CPU工作时的很多状态,借此我们能了解CPU的当前状态,并作出对应的处理它的各位功能请看表2

为什么要在硬件尚控制直接在程序里使两个输出相等不就好了,或者1.0等于什么,1.1怎么样不是更简单。不是同一个八脚单片机机就是检测管脚状态来控制

你对这个囙答的评价是?

我要回帖

更多关于 八脚单片机 的文章

 

随机推荐