欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    51单片机原理入门教程.doc

    • 资源ID:88147582       资源大小:443KB        全文页数:45页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    51单片机原理入门教程.doc

    51單片機教程第一課 單片機第二課 半導體存儲器第三課 第四課 第五課 第六課 第七課 單片機內部結構分析 第八課 尋址方式與指令系統第九課 數據偉遞類指令第十課 單片機指令第十一課 單片機指令 算術運算類指令第十二課 邏輯運算類指令第十三課 邏輯與指令第十四課 條件轉移指令第十五課 位及位操作指令 第十六課 定時器與計數器第十七課 定時計數器方式控制字第十八課 中斷系統第十九課 定時中斷第二十課 定時計數器第二十一課 串行接口 第二十二課 串行口應用編程實例第二十三課 常用接口電路及其編程第二十四課 動態掃描顯示接口第二十五課 鍵盤接口與第二十六課 矩陣式鍵盤接口技術及編程构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(如:串行口、并行输出口等)。在单片机中,这些部份全被做到一块芯片中,所以称为单片(单芯片)机,有些单片机还集成了A/D,D/A等。 一般用40脚封装,功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,甚至8只引脚。 MCS51单片机和8051、8031、89C51等的关系MCS51是指由美国INTEL公司生产的一系列单片机的总称,包括8031,8051,8751,8032,8052,8752等, 8051是最早最典型的产品,该系列其它单片机都是在其基础上进行功能增减、改变而来,所以习惯用8051来称呼MCS51系列单片机。89C51由美国ATMEL公司开发生产。以下用89C51来完成实验。 基本概念半导体存储器的分类 按功能分为只读存储器ROM(READ ONLY MEMORY)和随机存取存储器RAM(READ RANDOM MEMORY) PROM,可编程存储器EPROM,紫外线擦除的可编程只读存储器。擦除次数有限几百次吧。 FLASH,闪速存储器,和EPROM类似,电学方法可以擦除,寿命长(几万到几十万次不等)。这里写不是指在正常工作条件下。不管是PROM、EPROM还是FLASH ROM的写都有特殊条件,一般用编程器来做,工作位置不能改写。一、单片机的外部结构 89C51的芯片连线。 1、 电源: 5V电源,正极接40引脚,负极(地)接20引脚。 2、 振蒎电路:单片机是时序电路,必须提供脉冲信号才能正常工作,单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。按图1接上晶振,电容。 3、 复位引脚:复位电路任何单片机在工作之前都要复位,只要在单片机的RST引脚上加上高电平,时间不少于5ms即可。 4、 EA引脚:EA引脚接到正电源端。 至此,一个单片机就接好,通上电,单片机就开始工作了。 指令保存在单片机的只读存储器ROM中。  LOOP: SETB P1.0 ;()灯灭。LOOP为标号LCALL DELAY ;()调用子程序指令延时CLR P1.0 ;()灯亮LCALL DELAY ;()AJMP LOOP ;()转移指令DELAY: MOV R7,#250;()D1: MOV R6,#250 ;()D2: DJNZ R6,D2 ;()DJNZ R7,D1 ;()RET ;()END ;() LCALL为调用子程序指令。执行过程中遇到RET指令,就返回到LCALL指令下面的一条指令继续执行。标号DELAY到RET是延时程序, 程序最后一行是END,这不是一条指令,程序到此结束,称为“伪指令”。 符号Rn代表一个RAM单元,从指令MOV R7,#250中来分析,R7是接受者,250是被传递的数,传递者被省略了(大部份数据传递指令都会有传递者)。#说明250就是被传递者,而不是传递者。DJNZ指令将其后参数中的值减1.如果不等于0就转移。DJNZ R7,D1(转去执行MOV R6,#250,同时R7中的值减1),最终DJNZ R6,D2被执行250*250次。 问题:如果在R6中放入0,会有什么样的结果。0减1后变为FF,程序将不断循环至零。二、时序分析:计算机工作时,从ROM中取指令,然后执行,计算机访问一次存储器的时间,称之为一个机器周期,它包括12个时钟周期。设单片机工作于12M晶振,时钟周期是1/12(微秒)。它的一个机器周期是1微秒。MCS-51单片机的指令中,有些只要一个机器周期,有一些要2个, 4个机器周期。如DJNZ指令是双周期指令。计算刚才的延时就是125毫秒。 练习:设计一个延时100毫秒的延时程序。二、单片机内部结构分析:Rn为工作寄存器。 MOV P1,#0FFH,要送的数(源)是0FFH,送达的地方(目的地)是P1寄存器。在数据传递类指令中,均将目的地写在指令后面,将源写在最后。在单片机中另有一个区域RAM区(随机存取存储器),它可以将数据写进去。特别地,在MCS-51单片机中,将RAM中分出一块区域,称为工作寄存器区。 亮灭时间不同的程式;MAIN: SETB P1.0 ;()MOV 30H,#255LCALL DELAY ;CLR P1.0 ;()MOV 30H,#200LCALL DELAY ;()AJMP MAIN;()DELAY: MOV R7,30H()D1: MOV R6,#250 ;()D2: DJNZ R6,D2;() DJNZ R7,D1;() RET ;() END ;() P0,P1,P2,P3(80H-B0H)这32个引脚称为并行口。并行口结构分析:输出结构信号进入存储器的单元,这一位的状态就被保存下来,直到下一次命令让它把开关再打开为止。称为“锁存器”。输入结构第一种方式是将引脚作为输入,读进输入的值. 第二种方式是该引脚处于输出状态时,读入锁存器的状态,然后作某种变换后再输出。 接在外部的开关如果打开,则输入1,如果闭合,则输入0,但是如果单片机内部的开关是闭合的,那么不管外部的开关是开是闭,单片机接受到的数据都是0。可见,要作为输入使用,要先让内部的开关断开,就是端口输出1。因为要先做这么一个准备工作,所以称之为“准双向I/O口”。 其它三个口:P0、P2、P3除作为输入输出口之外还有其它用途,结构稍复杂一些,但用于输入、输出的结构是相同的。第七課 單片機內部分析五 51单片机内部有一个CPU用来运算、控制,四个并行I/O口: P0、P1、P2、P3,有ROM存放程序,有RAM存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。 单片机中有一些独立存储单元是用来控制这些器件的,称为特殊功能寄存器(SFR)。 符号地址功能介绍BF0HB寄存器 ACCE0H累加器 PSWD0H程序状态字 IPB8H中断优先级控制寄存器P3B0HP3口锁存器IEA8H中断允许控制寄存器P2A0HP2口锁存器SBUF99H串行口锁存器SCON98H串行口控制寄存器P1 90H P1口锁存器 TH1 8DH 定时器/计数器1(高8位) TH0 8CH 定时器/计数器1(低8位) TL1 8BH 定时器/计数器0(高8位) TL0 8AH 定时器/计数器0(低8位) TMOD 89A 定时器/计数器方式控制寄存器 TCON 88H 定时器/计数器控制寄存器 DPH 83H 数据地址指针(高8位) DPL 82H 数据地址指针(低8位) SP 81H 堆栈指针 P0 80H P0口锁存器 PCON 87H 电源控制寄存器 1、ACC:累加器,通常用A表示。它是一个寄存器,所有运算类指令都离不开它。 2、B:寄存器。在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。3、PSW:程序状态字。里面放了CPU工作时的状态,如下表。D7D6D5D4D3D2D1D0CYACF0RS1RS0OVP(1)CY:加(ADD,ADDC)减进位标志。8051中的运算器是8位运算器,当超过 255,CY被硬件置1。(2)AC:半进位标志。例:57H+3AH(01010111+00111010)(3)F0:用户标志位,由编程人员决定什么时候用,什么时候不用。(4)RS1、RS0:工作寄存器组选择位。为00时Rn为00H07H,为01时为08H0FH,为10时为10H17H,为11时为18H1FH。(5)0V:乘法溢出标志位。除法中除数为0。(6)P:奇偶校验位:用来表示ALU运算结果中1的个数的奇偶性。4、DPTR(DPH、DPL):数据指针,用来访问外部数据存储器中的任一单元,如果不用也可以作为通用寄存器来用。5、P0、P1、P2、P3:四个并行输入/输出口的寄存器,对应管脚的输出。6、SP:堆栈指针。在RAM中构造一个区域用来存放数据,规则是“先进后出,后进先出”,称为“堆栈”。知道第一个数据所在地址单元,如27H,那么第二、三个就在28H、29H了。 单片机中能存放数据的区域有限,堆栈分配的权利给用户(编程者),所以51单片机中堆栈的位置是可变的。这种变化体现在SP中值的变化, 在51机中,开始指针所指的位置是数据存放的前一个位置,如一开始指针指向27H单元,那么第一个数据的位置是28H单元。第八課 寻址方式与指令系统一、概述1、指令的格式 机器码格式,也说是数字的形式。助记符格式,如MOV P1,#0FFH。 2、汇编手工汇编和机器汇编。 手工汇编就是查表。用计算机软件来替代手工查表,这就是机器汇编。 二、寻址 MOV一共有28条指令(单片机共111条指令)。把寻找操作数所在单元的地址称之为寻址。直接使用数所在单元的地址称为直接寻址。从工作寄存器中寻找数据,则称之为寄存器寻址。例:如果选择工作寄存器组0,则R0就是00H单元, MOV A,00H和MOV A,R0结果都是将00H中的内容送到A中,但执行过程不同,第一条指令需要2个周期,而第二条只要1个周期,第一条指令变成目标码要两个字节(E5H 00H),而第二条只要一个字节(E8h)。 MOV R7,#20;MOV R0,#30H LOOP:MOV A,R0 INC R0 DJNZ R7,LOOP第五句, R7值减1,不等于0则转到标号LOOP处执行MOV A,R0,相当于MOV A,31H。到R7值等于0,从30H单元开始将20个数据送入A中。MOV A,R0称为间址寻址。在间址寻址中,只能用Ri存放。二、指令1. 数据传递类指令 1) 以累加器为目的操作数的指令 MOV A,Rn将Rn值送入A,Rn中的值保持不变。 以下类同MOV A,directMOV A,RiMOV A,#data2)以寄存器Rn为目的操作的指令 MOV Rn,AMOV Rn,directMOV Rn,#data2、 数据传递类指令 (3)以直接地址为目的操作数的指令MOV direct,A MOV direct,Rn MOV direct1,direct2 MOV direct,Ri MOV direct,#data (4)以间接地址为目的操作数的指令MOV Ri,A MOV Ri,direct MOV Ri,#data 不传送间接地址数和寄存器数给()Rn。(5)十六位数的传递指令MOV DPTR,#data168051是8位机,这是唯一一条16位立即数传递指令。其中高8位送入DPH,低8位送入DPL。例: MOV DPH,#35H,MOV DPL,#12H相当于执行MOV DPTR,#3512H。第十課 單片機指令三2、累加器A与片外RAM之间的数据传递类指令MOVX A,RiMOVX Ri,AMOVX A,DPTRMOVX DPTR,A说明:在51中,与外部存储器RAM打交道的是A累加器。内部RAM间可以直接进行数据的传递,而外部则不行. 在后两条指令中,地址被直接放在DPTR中。而前两条指令,只提供低8位地址。因为有时扩展的外部RAM的数量少于或等于256个,提供8位地址就够了。1. 使用时首先将地址送入DPTR或Rn中,然后再用读写命令。 例:将外部RAM中100H单元中的内容送入外部RAM中200H单元中。MOV DPTR,#0100HMOVX A,DPTRMOV DPTR,#0200HMOVX DPTR,A程序存储器向累加器A传送指令 MOVC A,A+DPTR本指令是将ROM中的数送入A中。本指令也称为查表指令,常用来查一个已做好在ROM中的表格。此条指令引出一个新的寻址方法:变址寻址。在ROM的一个地址单元中找出数据,将A和DPTR中的数相加,就是要查找的地址。结果放在A中,因此,本指令执行前后,A中的值不一定相同。 例:有一个数在R0中,用查表方法确定它的平方值(取值0-5)MOV DPTR,#TABLEMOV A,R0MOVC A,A+DPTRTABLE: DB 0,1,4,9,16,25 设R0为2, DPTR则为TABLE,则ROM单元的地址就是TABLE+2,也就是到这个单元中去取数,取到的是4。可以看到:标号的真实含义就是地址数值。它代表了,0,1,4,9,16,25这几个数据在ROM中存放的起点位置。而LCALL DELAY指令中DELAY 则代表了以DELAY为标号的那段程序在ROM中存放的起始地址。CPU正是通过这个地址找到这段程序的。 可以通过以下的例子再来看一看标号的含义: MOV DPTR,#100H MOV A,R0 MOVC A,A+DPTR ORG 0100H.DB 0,1,4,9,16,25 如果R0值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。 PUSH directPOP direct 第一条称为推入,将direct中的内容送入堆栈中,第二条指令称为弹出,将堆栈中的内容送回到direct中。推入指令首先将SP中的值加1,然后将direct中的值送进以SP中的值为地址的RAM单元中。例:MOV SP,#5FH ; MOV A,#100MOV B,#20PUSH ACC ; SP值加1,为60H,(60H)=(A)=#100.PUSH B (61H)=(B)=#20 POP指令的执行是,首先将SP中的值作为地址,并将此地址中的数送到POP指令后面的direct中,然后SP减1。 接上面程序:POP BPOP ACC将SP中的值(61H)作为地址,取61H单元中的数值(20),送到B中,所以执行完后B中的值是20,然后SP减1, SP的值变为60H,然后执行POP ACC,将SP中的值(60H)作为地址.从该地址中取数(现在是100),并送到ACC中。这些指令会把A中的值,B中的值改掉,所以在程序的结束,如果要把A和B中的值恢复原值,那么这些指令就有意义了。 如果不用堆栈,比如在PUSH ACC指令处用MOV 60H,A,在PUSH B处用指令MOV 61H,B,然后用MOV A,60H,MOV B,61H来替代两条POP指令,从结果上看一样,但过程不一样,PUSH和POP指令都是单字节,单周期指令,而MOV指令则是双字节,双周期指令。堆栈的作用不止于此,需要保存数据时,通常用堆栈的方法来实现。例:写出以下程序的运行结果MOV 30H,#12MOV 31H,#23PUSH 30HPUSH 31HPOP 30HPOP 31H 结果是30H中的值变为23,而31H中的值变为12。两者进行了数据交换。使用堆栈时,入栈的顺序和出栈的顺序必须相反,才能保证数据被送回原位。作业:在MCS51下执行上面的例程,注意观察内存窗口和堆栈的变化。 第十一課 單片機指令四1. 不带进位位的加法指令 ADD A,#DATA ;ADD A,direct ;ADD A,Rn ;ADD A,Ri ;用途:将A中的值与其后面的值相加,最终结果回到A中例:MOV A,#30HADD A,#10H则执行完本条指令后,A中的值为40H。2.带进位位的加法指令 1. ADDC A,direct2. ADDC A,Ri3. ADDC A,#data 用途:将A中的值和其后面的值相加,并且加上进位位C中的值。例:1067H+10A0H,先做67H+A0H=107H, 107H超过了0FFH,最终保存在A中的是7,而1则到了PSW中的CY位了, CY就相当于是100H。然后再做10H+10H+CY,结果是21H,所以最终的结果是2107H。带借位的减法指令 SUBB A,RnSUBB A,directSUBB A,RiSUBB A,#data 说明:没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。乘法指令 MUL AB 将A和B中的两个8位无符号数相乘,结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。乘积大于FFFFH(65535)时,OV置1(溢出),否则OV为0,而CY总是0。例:(A)=4EH,(B)=5DH,执行指令MUL AB后,乘积是1C56H,所以在B是1CH,而A是56H。除法指令 DIV AB 将A中的8位无符号数除以B中的8位无符号数(A/B)。商放在A中,余数放在B中。CY和OV都是0。如果B中的值是0,那么OV=1。加1指令 1. INC A2. INC Rn3. INC direct4. INC Ri5. INC DPTR将目标中的值加1。 从结果上看INC A和ADD A,#1差不多,但INC A是单字节单周期指令,而ADD A,#1是双字节双周期指令,而且INC A不会影响PSW位,如(A)=0FFH,INC A后(A)=00H, CY不变。如果是ADD A ,#1,则CY是1。因此加1指令并不适合做加法,它主要是用来做计数、地址增加等用途。 另外,加法类指令都是以A为核心的;运算结果必须放在A中,而加1类指令的对象则广泛得多,可以是寄存器、内存地址、间址寻址的地址等等。 减1指令DEC ADEC RnDEC directDEC Ri与加1指令类似,就不多说了。综合练习:MOV A,#12HMOV R0,#24HMOV 21H,#56HADD A,#12HMOV DPTR,#4316HADD A,DPHADD A,R0CLR CSUBB A,DPLSUBB A,#25HINC ASETB CADDC A,21HINC R0SUBB A,R0MOV 24H,#16HCLR CADD A,R0 第十二課 邏輯運算指令三、逻辑运算类指令:1. 对累加器A的逻辑操作: CLR A ;将A中的值清0,单周期单字节指令,与MOV A,#00H效果相同。CPL A ;将A中的值按位取反 2. 将A中的值逻辑左移 RL A;将A中的值进行逻辑循环左移RLC A ;将A中的值加上进位位进行逻辑循环左移 RR A ;将A中的值进行逻辑循环右移RRC A ;将A中的值加上进位位进行逻辑循环右移SWAP A ;将A中的值高、低4位交换。RL A是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。例:A中的值为68H,执行RL A。68H化为二进制为01101000,按上图进行移动。01101000化为11010000,即D0H。RLC A,是将(A)中的值带上进位位(C)进行移位。例:A中的值为68H,C中的值为1,则执行RLC A 1 01101000后,结果是0 11010001,也就是C进位位的值变成了0,而(A)则变成了D1H。SWAP A,例:(A)=39H,则执行SWAP A之后,A中的值就是93H。如果是这样的:(A)=39,执行SWAP A之后,是71H,即113。练习,已知(A)=39H,执行下列指令后写出每步的结果CPL ARL ACLR CRRC ASETB CRLC A;SWAP A实验五:ORG 0000HLJMP STARTORG 30HSTART:MOV SP,#5FHMOV A,#80HLOOP:MOV P1,ARL ALCALL DELAYLJMP LOOPdelay: MOV SP,#5FH,初始化堆栈,在本程序中有无此句无关紧要。 MOV P1,A。P1口的值是80H,也就是10000000B, P1.7接的LED不亮,而其它的LED亮, RL A,RL A是将A中的值进行左移,是01H,也就是00000001B,这样,接在P1.0上的LED不亮,而其它的都亮,调用延时程序,然后又转到LOOP处(LJMP LOOP)。依次循环,就形成了“暗点流动”现象。1. 如何实现亮点流动? 2. 如何改变流动的方向? 答案:1、将A中的初始值改为7FH即可。 2、将RL A改为RR A即可。 第十三課 邏輯與指令ANL A,Rn ;A与Rn中的值按位'与',结果送入A中ANL A,direct ;A与direct中的值按位'与',结果送入A中ANL A,Ri ;A与间址寻址单元Ri中的值按位'与',结果送入A中ANL A,#data ;A与立即数data按位与,结果送入A中ANL direct,A ;direct中值与A中的值按位'与',结果送入direct中ANL direct,#data ;direct中的值与立即数data按位与,结果送入direct中。 或指令:ORL A,Rn ;A和Rn中的值按位或,结果送入A中ORL A,direct ; A和direct中的值按位或,结果送入A中ORL A,#data ; A和立即数data按位或,结果送入A中ORL A,Ri ; A和与间址寻址单元Ri中的值按位或,结果送入A中ORL direct,A ;direct中值和A中的值按位或,结果送入direct中ORL direct,#data ;direct中的值和立即数data按位'或',结果送入direct中。异或指令:XRL A,Rn ;A和Rn中的值按位异或,结果送入A中XRL A,direct ;A和direct中的值按位异或,结果送入A中XRL A,Ri ;A和间址寻址单元Ri中的值按位'异或',结果送入A中XRL A,#data ;A和立即数data按位'异或',结果送入A中XRL direct,A ;direct中值和A中的值按位异或,结果送入direct中XRL direct,#data ;direct中的值和立即数data按位'异或',结果送入direct中。四、控制转移类指令1. 无条件转移类指令 短转移类指令 AJMP addr11长转移类指令 LJMP addr16 相对转移指令 SJMP rel 他们的区别在于跳转范围不一样。LJMP能跳64K。AJMP最多跳2K,而SJMP最多跳256。原则上,所有用SJMP或AJMP的地方都可以用LJMP来替代。AJMP是双字节指令,占用存储器(ROM)的两个单元。LJMP是三字节指令,即占用存储器(ROM)的三个单元。间接转移指令 JMP A+DPTR1. 这条指令的用途也是跳转,转到什么地方去不由标号简单地决定。MOV DPTR,#TAB ;将TAB所代表的地址送入DPTRMOV A,R0 ;从R0中取数(详见下面说明)MOV B,#2 MUL A,B ;A中的值乘2(详见下面的说明)JMP A+DPTR ;跳转TAB: AJMP S1 ;跳转表格AJMP S2;AJMP S3 在单片机开发中,经常要用到键盘。要求是:当按下功能键A.G时去完成不同的功能。前面的程序读入按键的值,如按下'A'的键值是0,按下'B'键后获得'1'等等,然后根据不同的值进行跳转,如键值为0就转到S1执行,为1就转到S2执行。若干个AJMP语句在存储器中每个AJMP语句都占用两个存储器的空间,并且连续存放。AJMP S1存放的地址是TAB。第一句MOV DPTR,#TAB执行后,DPTR中的值是TAB, MOV A,R0,假设R0是由按键处理程序获得的键值,按下B键,R0中的值是1,以此类推,现在假设按下的是B键,则执行完后,A中的值是1。第三条、第四条指令将A中的值乘2,值是2。下面执行JMP A+DPTR了,现在DPTR中的值是TAB,而A+DPTR后就是TAB+2.因此,跳到TAB+2这个地址继续执行。在TAB+2这个地址里面是AJMP S2这条指令。因此,执行AJMP S2指令,程序将跳到S2处往下执行。请分析按下键“A”、“C”、“D”之后的情况。这样我们用JMP A+DPTR就实现了按下一键跳到相应的程序段去执行的这样一个要求。为什么取得键值后要乘2?如果换成LJMP,还能正确地执行吗?如果不能,应该怎么改?第十四課 条件转移指令条件转移指令是指在满足一定条件时进行相对转移。1. 判A内容是否为0转移指令 JZ rel如果(A)=0,则转移到标号处,否则顺序执行。JNZ rel如果A中的值不等于0,就转移。2 比较转移指令 CJNE A,#data,rel CJNE A,direct,relCJNE Rn,#data,relCJNE Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就顺序执行,如果不相等,就转移。如果前面的数(A中的)大,则CY=0,否则CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。 例:MOV A,R0CJNE A,#10H,L1MOV R1,#0FFHAJMP L3L1: JC L2MOV R1,#0AAHAJMP L3L2: MOV R1,#0FFHL3: SJMP L3JC这条指令的原型是JC rel,作用和上面的JZ类似,它是判CY,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则顺序执行。 分析上面的程序,如果(A)=10H,则顺序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将顺序执行,即执行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。其它几条类似,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较。循环转移指令 DJNZ Rn,relDJNZ direct,relDJNZ 10H,LOOP调用与返回指令调用返回过程:主程序调用了子程序执行完之后再回到主程序继续执行1. 调用指令 LCALL addr16 ;长调用指令ACALL addr11 ;短调用指令(5)返回指令ret指令4空操作指令Nop空操作,就是什么事也不干,停一个周期,一般用作短时间的延时。第十五課 位及位操作指令 在8031单片机中引入一个位处理机制。1. 位寻址区 2. 在8031中,有一部份RAM和一部份SFR是具有位寻址功能的,也就是说这些RAM的每一个位都有自已的地址。内部RAM的20H-2FH这16个字节128位,就是8031的位寻址区。)字节第8位第7位第6位第5位第4位第3位第2位第1位20H07H06H05H04H03H02H01H00H21H0FH0EH0DH0CH0BH0AH09H08H22H10H-17H23H18H-1FH24H20H-27H25H28H-2FH26H30H27H38H28H40H29H48H2AH50H2BH58H2CH60H2DH68H2EH70H2FH78H可以位寻址的特殊功能寄存器 8031中有一些SFR可以进行位寻址,特点是其字节地址可被8整除,从80H到0F8H 16个字节128位,如A,B、PSW、IP(中断优先级控制)、IE(中断允许控制)、SCON(串行口控制)、TCON(定时器/计数器控制)、P0-P3。同样从80H到0F8H中的16个字节128位按顺序用80H-0FFH表示.(当指令有两个位时,必须有一个是C) 在进行位处理时,CY(进位位)称“位累加器”。 位传送指令 MOV C,BITMOV BIT,C位修正指令 1.位清0指令 CLR C ;使CY=0CLR bit 2.位置1指令 SETB C ;使CY=1SETB bit ;使指定的位地址等于1。例:SETB P1.0 ;使变为13.位取反指令 CPL C ;使CY等于原来的相反的值。CPL bit ;使指定的位的值等于原来相反的值。位逻辑运算指令 位与指令 1. ANL C,bit ;CY与指定的位地址的值相与,结果送回CY2. ANL C,/bit ;先将指定取反,再和CY相与,结果送回CY,但指定不变。位或指令 ORL C,bitORL C, /bit位条件转移指令 判CY转移指令 JC rel如果CY等于1就转移,如果不等于1就顺序执行。JNC rel和第一条指令相反,即如果CY=0就转移,不等于0就顺序执行。判位变量转移指令 JB bit,rel;如果指定的bit位中的值是1,则转移,否则顺序执行。JNB bit,relJBC bit,rel ;如果指定的bit位中的值是1,则转移,同时将该位清0。下面我们举个例子说明:ORG 0000HLJMP STARTORG 30HSTART:MOV SP,#5FHMOV P1,#0FFHMOV P3,#0FFHL1: ,L2 上接有一只按键,它按下时,P3.2=0JNB P3.3,L3 上接有一只按键,它按下时,P3.3=0LJMP L1;均未按下时循环检测L2: MOV P1,#00HLJMP L1L3: MOV P1,#0FFHLJMP L1END按下接在上的按键,P1口的灯全亮了,按下接在上的按键,灯就全灭了。如果是高电平(键没有按下),则顺序执行JNB P3.3,L3语句,同样,如果是高电平(键没有按下),则顺序执行LJMP L1语句。这样就不停地检测、,如果有一次上的按键按下去了,则转移到L2,使灯全亮,直到检测到为0,执行MOV P1,#0FFH,灯全灭,如此循环不已。稍加改动,将本程序用JB指令改写?第十六課 定時器與計數器一、计数概念的引入二、计数器的容量 8031单片机中有两个计数器, T0和T1,分别由两个8位的RAM单元组成的,即都是16位的计数器,最大计数是65536。 8031中的计数器除了可以作为计数之用外,还可以用作时钟,计数脉冲的间隔与晶振有关,12M的晶振,计数脉冲的间隔是1微秒。四、溢出五、任意定时及计数的方法 计数器最大的计数值到65536,计到65536就会产生溢出。 采用预置数的方法定时。第十七課 定時計數器的控制方式TMOD和TCON,它们的地址是89H和88H。 从图1中看出,TMOD被分成两部份,每部份4位。分别控制T1和T0。 TCON也被分成两部份,高4位用于定时/计数器,低4位用于中断。当计数溢出后TF1(0)由0变为1。看图。计数脉冲要进入计数器, TR0(1)要为1。因此,TR0(1)称为运行控制位,可用指令SETB置位以启动计数器/定时器运行,用指令CLR关闭定时/计数器的工作。 工作方式0 定时器/计数器的工作方式0为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位构成13位的计数器,此时TL(1/0)的高3位未用。M1M0:定时/计数器一共有四种工作方式,用M1M0来控制。 C/T:如果为0用作定时器,为1用作计数器。GATE=0,非后是1,或门输出

    注意事项

    本文(51单片机原理入门教程.doc)为本站会员(e****s)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开