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





《51单片机原理入门教程.doc》由会员分享,可在线阅读,更多相关《51单片机原理入门教程.doc(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、51單片機教程第一課 單片機第二課 半導體存儲器第三課 第四課 第五課 第六課 第七課 單片機內部結構分析 第八課 尋址方式與指令系統第九課 數據偉遞類指令第十課 單片機指令第十一課 單片機指令 算術運算類指令第十二課 邏輯運算類指令第十三課 邏輯與指令第十四課 條件轉移指令第十五課 位及位操作指令 第十六課 定時器與計數器第十七課 定時計數器方式控制字第十八課 中斷系統第十九課 定時中斷第二十課 定時計數器第二十一課 串行接口 第二十二課 串行口應用編程實例第二十三課 常用接口電路及其編程第二十四課 動態掃描顯示接口第二十五課 鍵盤接口與第二十六課 矩陣式鍵盤接口技術及編程构成:CPU(进行
2、运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(如:串行口、并行输出口等)。在单片机中,这些部份全被做到一块芯片中,所以称为单片(单芯片)机,有些单片机还集成了A/D,D/A等。 一般用40脚封装,功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,甚至8只引脚。 MCS51单片机和8051、8031、89C51等的关系MCS51是指由美国INTEL公司生产的一系列单片机的总称,包括8031,8051,8751,8032,8052,8752等, 8051是最早最典型的产品,该系列其它单片机都是在其基础上进行功能增减、改变而来,所以习惯用805
3、1来称呼MCS51系列单片机。89C51由美国ATMEL公司开发生产。以下用89C51来完成实验。基本概念半导体存储器的分类 按功能分为只读存储器ROM(READ ONLY MEMORY)和随机存取存储器RAM(READ RANDOM MEMORY) PROM,可编程存储器EPROM,紫外线擦除的可编程只读存储器。擦除次数有限几百次吧。 FLASH,闪速存储器,和EPROM类似,电学方法可以擦除,寿命长(几万到几十万次不等)。这里写不是指在正常工作条件下。不管是PROM、EPROM还是FLASH ROM的写都有特殊条件,一般用编程器来做,工作位置不能改写。一、单片机的外部结构 89C51的芯片
4、连线。 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 ;()灯
5、亮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是被传递的数,传递者被省略了(大部份数据传递指令都会有传递者)。#说
6、明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指令是
7、双周期指令。计算刚才的延时就是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 ;
8、()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,但是如果单片机内部的开关是闭
9、合的,那么不管外部的开关是开是闭,单片机接受到的数据都是0。可见,要作为输入使用,要先让内部的开关断开,就是端口输出1。因为要先做这么一个准备工作,所以称之为“准双向I/O口”。 其它三个口:P0、P2、P3除作为输入输出口之外还有其它用途,结构稍复杂一些,但用于输入、输出的结构是相同的。第七課 單片機內部分析五 51单片机内部有一个CPU用来运算、控制,四个并行I/O口: P0、P1、P2、P3,有ROM存放程序,有RAM存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。 单片机中有一些独立存储单元是用来控制这些器件的,称为特殊功能寄存器(SFR)。 符号地
10、址功能介绍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
11、位) 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:用户标志位,由编程人员决定什么时候用
12、,什么时候不用。(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,那么第二、
13、三个就在28H、29H了。 单片机中能存放数据的区域有限,堆栈分配的权利给用户(编程者),所以51单片机中堆栈的位置是可变的。这种变化体现在SP中值的变化, 在51机中,开始指针所指的位置是数据存放的前一个位置,如一开始指针指向27H单元,那么第一个数据的位置是28H单元。第八課 寻址方式与指令系统一、概述1、指令的格式 机器码格式,也说是数字的形式。助记符格式,如MOV P1,#0FFH。 2、汇编手工汇编和机器汇编。 手工汇编就是查表。用计算机软件来替代手工查表,这就是机器汇编。 二、寻址 MOV一共有28条指令(单片机共111条指令)。把寻找操作数所在单元的地址称之为寻址。直接使用数所在
14、单元的地址称为直接寻址。从工作寄存器中寻找数据,则称之为寄存器寻址。例:如果选择工作寄存器组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中。
15、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
16、 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间可以直接进行数据的传递,而外部则不行.
17、在后两条指令中,地址被直接放在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的一个地址单元中找出数据
18、,将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中存放
19、的起始地址。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,#100
20、MOV 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中的值恢
21、复原值,那么这些指令就有意义了。 如果不用堆栈,比如在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。两者进行了数据交换。使用堆栈时,入栈的顺
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 原理 入门教程

限制150内