资源描述
实例解读实例解读5151单片机完全学习与运用单片机完全学习与运用All you need to know about the 8051 All you need to know about the 8051 microcontrollermicrocontroller1docin/sundae_meng 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口驱动功耗口驱动功耗5I/O口都会使能驱动电路去控制功率较大的外设,如蜂鸣器、电机等。根据AT89S51单片机的技术手册,其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所示的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算术逻辑单元算术逻辑单元ALU9ALU为“进展算术运算和逻辑运算的处置单元。它能进展加、减法等算术运算,也能做与、或、异或等逻辑运算。ALU就是单片机的“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节。假设用记事本翻开执行代码文件会得到一串十六进制数,其中包含了每条指令的执行代码。比如指令“MOV A,#88H执行代码为“74、“88,其他指令都可从附录C中找到相应的执行代码。执行代码经过下载线下载到了单片机的片内ROM中。由于片内ROM中下载的是程序,所以也称这个片内ROM为片内程序存储器。第7章 解剖单片机7.3.3片内程序存储器片内程序存储器12AT89S51单片机的片内程序存储器容量为4K bytes,即41024=4096 bytes。这4096 bytes片内程序存储器可用地址0000H0FFFH来指向。在我们经过下载线往单片机下载程序时,执行代码将从0000H开场,被依次存储到单片机中。如图示的执行代码,存储到0000H里的是74H,即“0111 0100;0001H里的是88H,即“1000 1000。按照这种方法直到程序全部下载终了,根据程序的长短不同,程序存储器被占用的空间多少也就不同。第7章 解剖单片机7.3.4程序计数器程序计数器PC13程序计数器PC,它用于指示单片机下一条将要执行的代码的地址。当单片机上电复位时,PC=0000H,即指向程序存储器中的0000H,单片机就把0000H上的代码取出执行。之后PC自动添加1,变成0001H,如图示,接着单片机就执行0001H地址上的代码。第7章 解剖单片机7.3.4程序计数器程序计数器PC14由于程序计数器PC是个两个字节16位的存放器,于是受PC的制约,AT89S51单片机最大的寻址范围是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,单片机将自动转到片外程序存储器上执行其中的程序。而当 接低电平常,单片机那么完全读取片外程序存储器中的程序,即从片外程序存储器中的0000H开场,依次读取程序来执行。由于遭到程序计数器PC的位数限制,读取片内或片外程序存储器的最大地址范围为0000HFFFFH。EA/VPPEA/VPP第7章 解剖单片机7.4 单片机的数据存储器单片机的数据存储器7.4.1片内数据存储器片内数据存储器16单片机的数据存储器也有片内和片外之分。片内数据存储器就是单片机中原有的数据存储器,即片内RAM。片内数据存储器可分成三个部分:任务存放器区、位寻址区、开放区。这三个区都可用来保管单片机运转过程所产生的数据。但片内数据存储器是一个RAM,即随机访问存储器,在掉电后其中的数据将会丧失。第7章 解剖单片机7.4.1片内数据存储器片内数据存储器17单片机的1288-bit的片内数据存储器只需其中的20H7FH共96个字节开放区+位寻址区给我们运用的,而00H1FH那么是任务存放器区,普统统过任务存放器R0R7来运用。AT89S51单片机最大的数据存储器片内片外寻址范围也为0000HFFFFH,共64K bytes的空间。第7章 解剖单片机7.4.2任务存放器区任务存放器区00H 1FH18任务存放器共有8个,分别为R0、R1、R2、R3、R4、R5、R6、R7,前面有许多程序曾经涉及任务存放器。这8个任务存放器可以用来装载1个字节长度的数据,在程序中可视为一个变量来运用,经常用来作为计数值、显示值等。指令“MOV R0,#24H,把立刻数24H装载到任务存放器R0中。第7章 解剖单片机7.4.2任务存放器区任务存放器区00H 1FH19任务存放器R0R7指向片内数据存储器中的地址,当单片机上电复位时,R0R7映射片内数据存储器的00H07H,即第0组。执行指令“MOV R0,#24H,立刻数24H装载到R0,实践上被装载到00H地址空间上。执行“MOV R5,#3FH,那R5映射的片内数据存储器05H地址上即被装载3FH。第7章 解剖单片机7.4.2任务存放器区任务存放器区00H 1FH20任务存放器R0R7除了映射片内数据存储器的地址00H07H外,还可以映射向其他的地址08H1FH。任务存放器可用不同组别来称谓。第7章 解剖单片机7.4.2任务存放器区任务存放器区00H 1FH21AT89551单片机上电复位时任务存放器默许的组别是第0组,即R0R7映射00H07H。假设想改动当前程序运用的任务存放器组别,可以经过更改程序形状字PSW中的第3位RS0和第4位RS1。第7章 解剖单片机7.4.3位寻址区位寻址区20H2FH22片内数据存储器的20H2FH共16个字节为位寻址区,这16个字节共有168=128位的空间可进展位寻址。位寻址的意思是可对某一位单独进展操作,比如指令SETB可让位寻址区的任何一位置1,指令CLR可清0位寻址区的任何一位。第7章 解剖单片机7.4.3位寻址区位寻址区20H2FH23在运用位寻址区时,并不是直接操作20H2FH这16个地址,而是用图示的映射地址来完成。假设程序中需求把20H上的B0位清0,就需求操作20H上的B0位所映射的地址00H,于是指令可设计为:“CLR 00H。再如想把2AH上的B4位置1,指令那么为“SETB54H。第7章 解剖单片机7.4.4开放区开放区30H7FH24片内数据存储器的地址30H7FH是开放给用户运用的空间,用户可以在这段空间里存储单片机运转时产生的数据,也可以读取存储的数据到任务存放器、累加器等中。例如以下指令实现将累加器A的数据载入33H上,执行过后33H=8FH。第7章 解剖单片机7.5 单片机的特殊功能存放器单片机的特殊功能存放器7.5.1特殊功能存放器分布图特殊功能存放器分布图25AT89S51单片机共有26个特殊功能存放器,位于地址80H0FFH上。其中有前面运用过的累加器A、程序形状字PSW、P0P3口等。第7章 解剖单片机7.5.2特殊功能存放器的功能特殊功能存放器的功能26AT89S51单片机多个内部功能模块如中断控制、Timer0/1、串行口等都由特殊功能存放器控制。每个特殊功能存放器的长度都是1个字节,它们的详细引见将在随后的章节中详细展开。第7章 解剖单片机7.5.3特殊功能存放器的字节操作特殊功能存放器的字节操作27操作特殊功能存放器存放器的过程,实践就是控制单片机充分发扬本身功能的过程。例如指令“MOV P1,#00H,这条指令把立刻数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 P2.0将P2.0清0。执行这条指令后,只需P2.0=0,之相连的发光二极管点亮。而P2.1P2.7依然坚持原来的形状。支持位操作的特殊功能存放器:P0P0口锁存器 P1P1口锁存器P2P2口锁存器P3P3口锁存器ACC累加器BB存放器PSW程序形状字存放器TCON定时/计数器控制存放器SCON串行口控制存放器 IE中断使能存放器IP中断优先控制存放器第7章 解剖单片机7.6 运用体验运用体验用取表方式实现流水灯用取表方式实现流水灯7.6.1 取表法取表法29要实现流水灯需求在P2口按图示依次输出每一行数据,假设用十六进制表示每一行数据为:FEH、FDH、FBH、F7H、EFH、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
展开阅读全文