有没有小可爱接编程?51单片机原理及应用实验编程小程序,有没有便宜接的,大概40r一个左右?

答:事实有小可爱接编程51单片机原理及应用实验编程小程序,一定有便宜接的应该大概40r一个左右。

你对这个回答的评价是

你对这个回答的评价是?

版权声明:本博客任何文章任何囚都可以转载、引用但原始文章版权归博主所有。 /wang2800/article/details/

通过前面4位计算机的结构、指令和程序我们对计算机这一事物有了比较深入的理解,但这个4位机结构简单、指令集不丰富、运算速度慢、不支持高级语言编程基本没有多少实际应用价值,仅能用来理解计算机工作原理

这一章我们将对Intel公司出品的8051架构单片微型计算机进行讲解,并在后续章节中陆续设计出基于805151单片机原理及应用的个人计算机并且为其開发一款简单的操作系统,最终此8051计算机可以运行SD上的应用程序可以在8051计算机上完成BASIC程序的编辑和运行。这台个人计算机将具备硬件、操作系统和应用软件的层次架构

下面我们从结构、指令和程序三个方面来理解805151单片机原理及应用。

805151单片机原理及应用仍然符合冯诺依曼計算机设计方案

l 二进制表示指令和数据;

l 存储程序,自动运行;

l 运算器、控制器、存储器、输入设备和输出设备

l 布尔量处理能力;

l 1个铨双工串行通信口;

805151单片机原理及应用的功能方框图如图5-1所示,805151单片机原理及应用也包括CPU(运算器和控制器)、数据存储器、程序存储器囷输入/输输出5大部分

前面我们自己设计的4位计算机,每一部分都能精确到用三极管怎样实现805151单片机原理及应用具体的硬件细节无从得知,除非Intel公司完全披露好在我们不是设计或实现805151单片机原理及应用,只是大体弄明白它的硬件结构和工作原理


805151单片机原理及应用常见嘚产品外观就是DIP40双列直插封装形式,示意图如图5-2所所示把整个单片微型计算机封装在一个芯片内,所以简称51单片机原理及应用P00~P07、P10~P17、P20~P27、P30~P37為四个8位并行的输入/输出口,其中P0、P2、P3为双功能口P0、P2口也可用于扩展外部程序和数据存储器使用,当用于外部扩展存储器使用时ALE、PSEN、EA、WR、RD为系统扩展的控制线。XTAL2和XTAL1为时钟输入线RESET为复位线。Vcc为电源、Vss为地

中央处理器包括运算器和控制器。运算器主要功能:

l 加、减、乘、除算数运算;

l 与、或、非等逻辑运算;

控制器主要作用是协调51单片机原理及应用各功能部件的动作包括取指令、指令译码、发出微操莋信号、控制存储器地址/数据传送等功能。

805151单片机原理及应用的程序计数器是16位的所以可访问的程序存储器最大为64KB,地址范围为0000H到FFFFH实際的8051芯片片内不一定有64KB ROM,可能只有4KB、8KB等如果需要更大的程序存储器,可以扩展片外程序存储器如图5-3所示,8051内部有4KB ROM外扩了60KB外部ROM。当引腳EA=1时8051先访问片内的4KB ROM,超出4KB地址范围则访问外部ROM芯片;当EA=0时直接忽略内部ROM,完全访问外部ROM

外部程序存储器的扩展方法如图5-4所示,当访問外部程序存储器时P0自动输出低8位的地址信息到锁存器,ALE引脚输出锁存信号低8位地址被锁存,P2口再输出高8位地址和锁存器的低8位地址共同构成外部ROM的地址,PSEN引脚输出读信号ROM数据通过P0口输入805151单片机原理及应用,完成外部程序存储器的读

5-4 8051扩展外部程序存储器

指令要對数据进行操作,指令给出参与运算数据的方式称为寻址方式805151单片机原理及应用支持的寻址方式有:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址和基址寄存器加变址寄存器间接寻址。

l MOV A,@R0  把R0寄存器里存的地址指向内存单元里的数据送入累加器A寄存器间接寻址;

l MOVC A,@A+DPTR  把DPTR寄存器里的值加上累加器A里的值作为新的地址,此地址指向的存储单元里的数据送入累加器基址寄存器加变址寄存器间接寻址。

8051数据存储器空间可分成4部分:外部64KB地址空间、内部低128字节数据存储区、内部高128字节特殊功能寄存器区、内部高128字节数据存储区数据存储区结构如圖5-5所示。

5-5 805151单片机原理及应用数据存储区结构

其中内部低128字节数据存储区可以直接地址访问内存高128字节数据存储区只能寄存器间接访问,内部高128字节特殊功能寄存器区可以直接地址访问外部64KB存储区使用寄存器间接访问。

8051内部有一个低128字节的直接地址访问的数据存储区和┅个高128字节直接地址访问的特殊功能寄存器区更详细的划分如图5-6所示。

5-6 8051内部直接地址访问存储区结构

内部数据存储区的00H~0FH区域为四组笁作寄存器区每组有8个寄存器,用R0~R7表示R0~R7具体位于哪一组工作寄存器区,通过PSW程序状态寄存器的第4位(RS1)和第3位(RS0)的组合指定洳果RS1RS0=“01”,则R0~R7位于第一组工作寄存器区即R0的地址是08H,R7的地址是0FH一旦设定好R0~R7位于的工作寄存器区的哪一组,那么剩下的其它地址单え就可以当普通RAM使用

内部数据存储区的20H~2FH共16字节的存储区,除了有字节地址外还有位地址,位地址的范围是00H~7FH805151单片机原理及应用可鉯用字节地址访问这段内存,也可以使用位地址访问这段内存

比如说学生宿舍楼,每个房间都有一个房间编号假设一个房间有8个床位,我们给床位再编一个床位号100房间床位号是00H~07H,101房间床位号就是07H~0FH其它房间以此类推。这样编完号后每个床位可以用两种方式表示,一种是房间号加上第几个床位另一种是直接的床位号,房间号好比字节地址床位号好比位地址,表示方式不同但访问的是同一个哋方。

805151单片机原理及应用在中断、子程序调用、传递参数等实际应用中通常会用到一种称之为“栈”的数据存储结构。“栈”其实就是數据存储器中的一段内存这段内存通过一个称为“栈指针”的特殊寄存器SP记录地址,当往“栈”里写入数据时先把SP加1,然后把数据写叺SP指向的内存单元当从“栈”里读出数据时,把SP指向的内存单元数据读出然后SP减1。805151单片机原理及应用复位时SP指向07H地址单元,用户可根据实际情况设置SP的指向

片内数据存储区的低128字节除了工作寄存器区和堆栈区外,其它区域都可以作为普通的内存使用

8051可以扩展64KB外部數据存储器或者I/O口,其中00H~FFH范围可以用R0、R1寄存器间接寻址0000H~FFFFH范围可以使用16 位DPTR寄存器访问。805151单片机原理及应用只管访问片外地址空间至於访问是数据存储器还是外扩的I/O设备,由用户自己设计的硬件电路决定

8051内部的CPU寄存器、I/O端口锁存器、串口寄存器、定时器寄存器、中断控制寄存器等特殊功能寄存器字节地址编号范围是80H~FFH,地址分配如表5-1所示

5-1 8051特殊功能寄存器表

累加器ACC用于存放算数逻辑运算操作中的输叺数和保存运算结果。

寄存器B在乘法和除法运算中作为辅助的寄存器使用因为两个8位数相乘结果可能是16位数,只有累加器A存不下所以使用B寄存器配合。

PSW程序状态寄存器主要用于存储加法/减法的进位/借位信息,指定R0~R7位于哪一组工作寄存器区存储溢出标志位和奇偶校驗位等。

SBUF和SCON是串口通信相关寄存器串口也在后面讲解。

TH1、TH0、TL1、TL0、TMOD和TCON是计数器寄存器计数器后面讲解。

DPH和DPL组合到一起就是16位的DPTR寄存器訪问片外程序存储器和片外数据存储器时,DPTR用于存储地址信息

SP是堆栈指针,用于指示栈顶的地址

P0、P1、P2、P3是通用I/O的寄存器,可以输出数據和读入数据

带星花的特殊功能寄存器除了可以字节寻址外,还可以位寻址也就是说它们还有一个位地址,位地址编号为80H~FFH与前面鈳位寻址的RAM共同构成00H~FFH的256个位寻址空间。

6. 外部数据存储器的扩展

当需要外部扩展数据存储器时接口可参考图5-7所示。P0输出低8位地址ALE输出鎖存信号,锁存器锁存低8位地址然后P2口输出的高地址和锁存器里的低8位地址组成外部RAM的地址,如果是写入RAM数据那么P0口输出待写入数据,WR引脚输出写信号数据写入RAM相应地址单元,如果是读出数据那么RD引脚输出读信号,RAM读出的数据通过P0口输入805151单片机原理及应用

5-7 外部數据存储器的扩展结构

CPU正在按顺序一条条执行指令的时候,有紧急事件发生了CPU被迫中断当前正在执行的程序,转而去处理紧急事件处悝完紧急事件后再返回中断处继续执行,这种机制就叫中断能够请求CPU中断的来源称为中断源,805151单片机原理及应用中断源及入口地址如表5-2所示

5-2 805151单片机原理及应用中断源和中断入口

以定时器0溢出产生中断为例,当定时器0记数达到最大值溢出后会产生一个中断标志,CPU硬件會在每一个机器周期(标准8051的机器周期是12个时钟周期)末尾检查是否有中断需要处理如果有中断到来,就把当前执行到的程序地址压入堆栈保存然后把定时器0对应的中断入口000BH输入到程序计数器PC,也就是CPU跳转到000BH处执行000BH处往往安排一条跳转指令,直接跳转到定时器0的中断處理子程序并执行在子程序末尾会安排一条中断返回指令,中断返回指令会把压入栈的地址弹出到程序计数器PC中也就是返回到中断前程序处继续执行。

805151单片机原理及应用一般都有并行输入/输出口、定时器和串行通信口等几种常见的外围设备一般外围设备都是由寄存器囷功能部件构成,寄存器都有地址往寄存器里写入/读出数据,寄存器再和功能部件产生电路上联系最终通过控制寄存器就行控制这种外围设备。

805151单片机原理及应用有P0、P1、P2和P3共32个通用输入/输出口输入输出口的功能,可以理解为:往P1特殊功能寄存器里写入数据数据会通過芯片P1口的8个引脚输出,读取P1特殊功能寄存器里的数据(MOV AP1),就相当于把P1口的8个引脚上的高低电平读入计算机P1、P2和P3都具有第二功能,仳如外扩程序和数据存储器时用到的地址和数据功能只有P1口是纯粹的输入输出口,P1口的结构如图5-8所示

由图5-8可见,当把数据写入特殊功能寄存器时实际上就是写入到了图中的D触发器中,如果写入1Q—输出0,再经过一个反相器后引脚上正好输出一个1。如果用MOV AP1指令,则呮是读取数据会读引脚数据;如用OR P1,#0FFH等指令则是读出-运算-写回,会读取寄存器里数据

另外需要注意,P0口是开漏输出做I/O口输出1时,實际输出的是高阻态必须接上拉电阻后才能有效输出1的功能;P1、P2、P3内部都有一个比较大的上拉电阻,也就意味着当输出1时实际是串联叻一个大电阻再输出的,所以驱动电流比较小如果要驱动较大功率的器件,可以使用“灌电流”的方式也就是引脚输出0,外部器件接高电平让电流流进引脚,形成灌电流;也可以在引脚外再用一个小电阻与片内的上拉电阻并联并联后再接外部器件,因为并联后总电阻小于外接的小电阻所以电流驱动能力也比较大。

    定时器配合定时器中断可以实现类似闹钟提醒的功能。定时器包括一个记数时钟和┅个计数器可以给计数器设置一个初始值,记数时钟频率也可选择这样在记数时钟驱动下,计数器从初始值开始累加当记数到最大徝后发生溢出,并会产生一个定时器中断定时器中断的间隔可以通过记数时钟频率和计数器初始值计算得出,有了定时器就可以实现定時处理事情了比如定时扫描键盘、输出设定占空比的脉冲信号等功能。

不同计算机之间往往需要传递信息或传输数据那么就需要通信,串口可以实现串行通信并口(前面提到的P口)可以实现并行通信。一般串行通信速率较慢但连线少,并行通信则相反

805151单片机原理忣应用最简单的串口通信只需一根地线,一根数据接收线一根数据发送线。通信双方设置好发送和接收数据的波特率发送方把待发送嘚字节数据写入发送寄存器SBUF,串口设备把SBUF里数据转换成8个脉冲信号并且添加上起始位和停止位发送出去,接收方再把收到的脉冲信号还原成字节并存入接收方的SBUF接收寄存器,接收51单片机原理及应用通过读取SBUF寄存器接收数据异步串行通信的一种帧格式如图5-8所示。

5-8 异步串行通信帧格式

从异步串行通信的帧格式可以看出一个数据帧通常包括1位起始位、8位二进制数据位、1位停止位。一秒钟能传输的二进制位的个数称为波特率波特率确定了两个二进制位之间的时间间隔,接收双方只有相同的波特率才能通信成功两个数据帧之间的时间间隔没有要求,一个数据帧除了数据位还包括起始位等无效数据所以最终的有效数据传输速率肯定小于波特率。

常用的波特率有9600、19200、38400、57600、115200等波特率可以通过设置805151单片机原理及应用的相关寄存器进行设定。

二进制的指令编码方便记忆所以设计了助记符与二进制编码对应,助记符也就是汇编语言805151单片机原理及应用总共有111条汇编指令。按指令编码字节数分类有49条单字节指令、45条双字节指令和17条3字节指令;按指令执行周期分类,有64条单周期指令、45条双周期指令和2条4周期指令;按照指令完成的功能分类有数据传送类、算术运算类、逻辑运算類、位操作类和控制转移类指令。

8051指令的16进制编码、助记符和功能解释如表5-3所示其中:

addr)表示addr地址指向的内存单元里的数据;

l ((R0))表示R0里存储的地址指向的内存单元里的数据;

(A)乘以(B),积的高字节送入A低字节送入B

左环移1位,第7位移入第0位

左环移1位第7位移入CY,(CY)移入第0位

右环迻1位第0位移入第7位

右环移1位,第0位移入CY(CY)移入第7位

如果(Rn)不等于0,

调用指令(LCALL)和转移(LJMP)指令都会带来程序的跳转但调用指令会把当湔地址压入堆栈保存,所以调用指令通过RET指令可以返回但转移指令则不行。

调用和中断都把当前地址压入堆栈保存都可以返回。调用昰软件行为而中断是硬件行为,并且中断还要清除中断标志、设置中断优先级状态寄存器等操作调用用RET返回,中断用RETI返回RETI指令除了紦保存的地址弹出到PC外,还要清除中断响应时所置位的中断优先级状态寄存器

4. 时钟周期、机器周期、指令周期

时钟周期就是最基本的晶振周期;805151单片机原理及应用的1个机器周期包括12个时钟周期,完成指令的取指、译码、读操作数、执行、写结果等流程;指令周期就是一条指令的执行需要几个机器周期比如乘除法需要4个机器周期,其它指令都是1到2个机器周期完成

在讲解简单的4位计算机时,汇编代码是通過手工翻译成机器码的耗时费力且容易出错,8051这里将用汇编器完成汇编语言的翻译工作8051汇编器除了能翻译汇编指令为机器码外,还定義了很多伪指令伪指令是用户想要传给汇编器的信息,通常不对应专门的机器码伪指令主要有:

l ORG addr:指出后面的代码从程序存储器的addr地址处开始放置;

l LABEL:一段汇编程序的标号,汇编器会计算出来LABEL后第一条指令的地址代码中就可以使用LABEL,如LJMP LABEL;

l END:汇编代码结束后面即使还囿程序也不会再处理;

注释:一行汇编指令后面用“;”注释,汇编器不处理分号后内容

通过串口终端发送命令控制两个LED的亮灭,Proteus仿真原悝图如图5-9所示

5-9 命令控制LED灯仿真原理图

无论是写汇编程序,还是高级语言程序基本思路都是化繁为简。在主函数中把复杂问题化为较簡单的若干模块在子函数中实现每个模块,如果模块仍然复杂那么就进一步简化,总之就是简化、简化一直简化到能实现为止。

    比洳我们这个汇编小程序可以在主函数中分成串口初始化和接收命令,在子函数中实现命令处理直接处理命令不好解决,那么再写一个芓符串比较子函数一步步细化到好实现为止。

主程序流程图命令处理子程序流程图、字符串比较子程序流程图如图所示。。。

;接收命令并回显,保存命令至RAM 70~7F

CJNE A,#0DH,WAIT1 ;如果没有接收到回车符那么继续接收下一个字符

LCALL PCMD ;如果接收到回车符,认为收到了一条完整的命令处理命囹

RET ;返回,继续接收新命令

RET ;返回重新接收新命令

;70H和60H开始挨个做差差存入R3,遇到回车返回

;差不为0也返回,R3=0为相等,否则不等

JZ LOOP ;字符相等则比較下一个字符

RET ;只要遇到不相等,则比较完成

新建proteus工程并绘制如图所示原理图;

在新建工程目录下创建code目录,code目录里创建led.asm文件文件把汇編源代码录入led.asm;

仿真原理图中双击80c5151单片机原理及应用,并选择程序led.hex执行仿真;

通过终端输入led开关的命令,查看程序执行的情况;

l 可以任意时刻暂停仿真51单片机原理及应用上右键,选择查看特殊功能寄存器、内存单元里的内容也可以调试汇编代码。

我要回帖

更多关于 51单片机原理及应用 的文章

 

随机推荐