《【大学课件】实例解读51单片机学习与应用 解剖单片机.ppt》由会员分享,可在线阅读,更多相关《【大学课件】实例解读51单片机学习与应用 解剖单片机.ppt(36页珍藏版)》请在三一办公上搜索。
1、实例解读51单片机完全学习与应用All you need to know about the 8051 microcontroller,1,第7章 解剖单片机,2,第7章 解剖单片机,AT89S51单片机的内部结构,3,第7章 解剖单片机,7.1 单片机的功耗7.1.1 运行功耗,4,在时钟频率较高时,如表中的4.0MHz,单片机运算速度较快,相应的1.25mA工作电流比在时钟频率为1.0MHz时的550A工作电流要高。12MHz下的运行功耗达25mA。,第7章 解剖单片机,7.1.2 I/O口驱动功耗,5,I/O口都会使能驱动电路去控制功率较大的外设,如蜂鸣器、电机等。根据AT89S51单片
2、机的技术手册,其I/O口的输出电流不能超过15mA。所以在谈I/O口驱动功耗时,我们更多关注的是外设通过驱动电路所消耗的功率。,第7章 解剖单片机,7.2 单片机内部结构7.2.1从I/O口到内部结构,6,比较一下图(a)和(b),前者显示出4根数据线:读锁存器、内部总线、写锁存器、读管脚。这4根数据线与单片机内部结构中的总线相连。而后者则用一个双向箭头()来表示这4根数据线,说明锁存器与总线之间的关系。,第7章 解剖单片机,7.2.1从I/O口到内部结构,7,可把整个P1口都抽象出一个结构框图,如图示,其中把8位I/O口的独立结构抽象到了P1口锁存器和P1口驱动两个方框中,这与图7-1所示的
3、P0、P1、P2、P3口结构是一致的。由于I/O口都是双向的,所有的数据线都使用双向箭头。,第7章 解剖单片机,7.2.2数据在内部交换,8,举例:RAM是单片机的随机访问存储器,用于存储运行过程中的数据。假设RAM中地址30H上存储了数据“3CH”,现在单片机执行指令“MOV A,30H”,之后,RAM中地址30H上的数据3CH“跑”到总线上,而累加器A根据指令要求,从总线上接收这个数据,执行完毕后,A=3CH。,第7章 解剖单片机,7.2.3算术逻辑单元(ALU),9,ALU为“进行算术运算和逻辑运算的处理单元”。它能进行加、减法等算术运算,也能做与、或、异或等逻辑运算。ALU就是单片机的
4、“CPU”,ALU的输入端A和B,它们的数据都来自总线,经过ALU运算后,结果通过R又输出到总线上。在运算过程中,ALU通过输出D向程序状态字PSW输出状态,PSW会随着ALU的运算发生相应的变化。如执行加法指令ADD时,当最高位有进位时,PSW的进位标志C就被置1,这都归功于ALU通过D向PSW的C位输出高电平。,第7章 解剖单片机,7.3 单片机的程序存储器7.3.1整体结构,10,第7章 解剖单片机,7.3.2程序下载到哪里?,11,以.HEX为后缀的执行代码文件可通过下载线下载到单片机中(4.4节)。如果用记事本打开执行代码文件会得到一串十六进制数,其中包含了每条指令的执行代码。比如指
5、令“MOV A,#88H”执行代码为“74”、“88”,其他指令都可从附录C中找到相应的执行代码。执行代码通过下载线下载到了单片机的片内ROM中。因为片内ROM中下载的是程序,所以也称这个片内ROM为片内程序存储器。,第7章 解剖单片机,7.3.3片内程序存储器,12,AT89S51单片机的片内程序存储器容量为4K bytes,即41024=4096 bytes。这4096 bytes片内程序存储器可用地址0000H0FFFH来指向。在我们通过下载线往单片机下载程序时,执行代码将从0000H开始,被依次存储到单片机中。如图示的执行代码,存储到0000H里的是74H,即“0111 0100”;0
6、001H里的是88H,即“1000 1000”。按照这种方法直到程序全部下载完毕,根据程序的长短不同,程序存储器被占用的空间多少也就不同。,第7章 解剖单片机,7.3.4程序计数器PC,13,程序计数器PC,它用于指示单片机下一条将要执行的代码的地址。当单片机上电复位时,PC=0000H,即指向程序存储器中的0000H,单片机就把0000H上的代码取出执行。之后PC自动增加1,变成0001H,如图示,接着单片机就执行0001H地址上的代码。,第7章 解剖单片机,7.3.4程序计数器PC,14,由于程序计数器PC是个两个字节(16位)的寄存器,于是受PC的制约,AT89S51单片机最大的寻址范围
7、是0000HFFFFH,共64K bytes。也就是说,除了AT89S51单片机片内的4K bytes程序存储器(地址0000H0FFFH)外,单片机能寻址的外部扩展的程序存储器空间最大为64 K bytes-4 K bytes=60K bytes,即地址1000HFFFFH。,第7章 解剖单片机,7.3.5是片内还是片外程序存储器?,15,当 接高电平时,单片机复位时读取片内程序存储器中的程序,即从PC=0000H开始,依次读取0000H0FFFH上的程序。当PC增加到0FFFH时,PC再增加1等于1000H,单片机将自动转到片外程序存储器上执行其中的程序。而当 接低电平时,单片机则完全读取
8、片外程序存储器中的程序,即从片外程序存储器中的0000H开始,依次读取程序来执行。由于受到程序计数器PC的位数限制,读取片内或片外程序存储器的最大地址范围为0000HFFFFH。,第7章 解剖单片机,7.4 单片机的数据存储器7.4.1片内数据存储器,16,单片机的数据存储器也有片内和片外之分。片内数据存储器就是单片机中原有的数据存储器,即片内RAM。片内数据存储器可分成三个部分:工作寄存器区、位寻址区、开放区。这三个区都可用来保存单片机运行过程所产生的数据。但片内数据存储器是一个RAM,即随机访问存储器,在掉电后其中的数据将会丢失。,第7章 解剖单片机,7.4.1片内数据存储器,17,单片机
9、的1288-bit的片内数据存储器只有其中的20H7FH共96个字节(开放区+位寻址区)给我们使用的,而00H1FH则是工作寄存器区,一般通过工作寄存器R0R7来使用。AT89S51单片机最大的数据存储器(片内片外)寻址范围也为0000HFFFFH,共64K bytes的空间。,第7章 解剖单片机,7.4.2工作寄存器区(00H 1FH),18,工作寄存器共有8个,分别为R0、R1、R2、R3、R4、R5、R6、R7,前面有许多程序已经涉及工作寄存器。这8个工作寄存器可以用来装载1个字节长度的数据,在程序中可视为一个变量来使用,常常用来作为计数值、显示值等。指令“MOV R0,#24H”,把立
10、即数24H装载到工作寄存器R0中。,第7章 解剖单片机,7.4.2工作寄存器区(00H 1FH),19,工作寄存器R0R7指向片内数据存储器中的地址,当单片机上电复位时,R0R7映射片内数据存储器的00H07H,即第0组。执行指令“MOV R0,#24H”,立即数24H装载到R0,实际上被装载到00H地址空间上。执行“MOV R5,#3FH”,那R5映射的片内数据存储器05H地址上即被装载3FH。,第7章 解剖单片机,7.4.2工作寄存器区(00H 1FH),20,工作寄存器R0R7除了映射片内数据存储器的地址00H07H外,还可以映射向其余的地址08H1FH。工作寄存器可用不同组别来称呼。,
11、第7章 解剖单片机,7.4.2工作寄存器区(00H 1FH),21,AT89551单片机上电复位时工作寄存器默认的组别是第0组,即R0R7映射00H07H。如果想改变当前程序使用的工作寄存器组别,可以通过更改程序状态字PSW中的第3位(RS0)和第4位(RS1)。,第7章 解剖单片机,7.4.3位寻址区(20H2FH),22,片内数据存储器的20H2FH(共16个字节)为位寻址区,这16个字节共有168=128位的空间可进行位寻址。位寻址的意思是可对某一位单独进行操作,比如指令SETB可让位寻址区的任何一位置1,指令CLR可清0位寻址区的任何一位。,第7章 解剖单片机,7.4.3位寻址区(20
12、H2FH),23,在使用位寻址区时,并不是直接操作20H2FH这16个地址,而是用图示的映射地址来完成。假如程序中需要把20H上的B0位清0,就需要操作20H上的B0位所映射的地址00H,于是指令可设计为:“CLR 00H”。再如想把2AH上的B4位置1,指令则为“SETB54H”。,第7章 解剖单片机,7.4.4开放区(30H7FH),24,片内数据存储器的地址30H7FH是开放给用户使用的空间,用户可以在这段空间里存储单片机运行时产生的数据,也可以读取存储的数据到工作寄存器、累加器等中。例如以下指令实现将累加器A的数据载入33H上,执行过后(33H)=8FH。,第7章 解剖单片机,7.5
13、单片机的特殊功能寄存器7.5.1特殊功能寄存器分布图,25,AT89S51单片机共有26个特殊功能寄存器,位于地址80H0FFH上。其中有前面使用过的累加器A、程序状态字PSW、P0P3口等。,第7章 解剖单片机,7.5.2特殊功能寄存器的功能,26,AT89S51单片机多个内部功能模块如中断控制、Timer0/1、串行口等都由特殊功能寄存器控制。每个特殊功能寄存器的长度都是1个字节,它们的详细介绍将在随后的章节中详细展开。,第7章 解剖单片机,7.5.3特殊功能寄存器的字节操作,27,操作特殊功能寄存器寄存器的过程,实际就是控制单片机充分发挥自身功能的过程。例如指令“MOV P1,#00H”
14、,这条指令把立即数00H从P1口送出去。P1也是特殊功能寄存器的一份子,它的地址为90H。所以指令“MOV P1,#00H”就是对特殊功能寄存器的操作,会让特殊功能寄存器区的(90H)=00H。以上这种操作我们称为字节操作,因为在执行“MOV P1,#00H”时,P1就像一个符号,实际上立即数是送到P1对应的特殊功能寄存器地址空间上,也就是90H。所以,这和我们往片内数据存储器的开放区某一个地址装载1个字节的数据的过程是一样的。,第7章 解剖单片机,7.5.4特殊功能寄存器的位操作,28,某些特殊功能寄存器还支持位操作,比较常用的是置1指令“SETB”和清0指令“CLR”。例如指令“CLR P
15、2.0”将P2.0清0。执行这条指令后,只有P2.0=0,之相连的发光二极管点亮。而P2.1P2.7仍然保持原来的状态。,支持位操作的特殊功能寄存器:P0(P0口锁存器)P1(P1口锁存器)P2(P2口锁存器)P3(P3口锁存器)ACC(累加器)B(B寄存器)PSW(程序状态字寄存器)TCON(定时/计数器控制寄存器)SCON(串行口控制寄存器)IE(中断使能寄存器)IP(中断优先控制寄存器),第7章 解剖单片机,7.6 应用体验用取表方式实现流水灯7.6.1 取表法,29,要实现流水灯需要在P2口按图示依次输出每一行数据,如果用十六进制表示每一行数据为:FEH、FDH、FBH、F7H、EFH
16、、DFH、BFH、7FH。取表法的思路就是把这些数据预先放在一个数据表中,作为程序的一部分。单片机执行时每次取一个数据从P2口送出,延时后再取下一个数据送出,这样就可以从发光二极管上看到流水灯的效果了。,第7章 解剖单片机,7.6.1 取表法,30,第7章 解剖单片机,7.6.1 取表法,31,第7章 解剖单片机,7.6.3 体验流水灯,32,见本书光盘中的视频演示,第7章 解剖单片机,7.7 实例解读直接驱动七段数码管7.7.1 需求分析7.7.2 电路设计,33,单片机直接驱动七段数码管以200ms为间隔,依次显示0、1、2、3、4、5、6、7、8、9这10个数字。,第7章 解剖单片机,7.7.3 软件设计,34,根据表的亮段组合与显示数字的关系,可得到对应I/O口状态与显示数字的关系,比如要显示“5”,显示数据为12H。,第7章 解剖单片机,7.7.3 软件设计,35,第7章 解剖单片机,7.7.3 软件设计,36,