×
嵌入式 > 嵌入式开发 > 详情

重温51单片机

发布时间:2020-08-04 发布时间:
|
今天在图书馆看来一上午的书。。把51的一点知识顺便记了一下。。。感觉很好。。。尤其是汇编那里。。对学习STM32有帮助。。。

时钟

片内时钟模式;由XTAL1和XTAL2外接石英晶体和震荡电容

片外时钟模式;对于普通的8051,外部时钟由XTAL2直接送到单片机内部,XTAL1应直接接地,而且XTAL2引脚的逻辑电平不是TTL电平,应外接上拉电阻。对于CMOS型单片机,其时钟发生器的信号取自于反相放大器的输入端,因此,外部时钟信号应该从XTAL1引脚输入,而XTAL2需要悬空。

特殊功能寄存器区,如果某个特殊功能寄存器的地址可以被8整除,那么这个寄存器便可以进行位寻址。在位寻址指令中,可以用“寄存器名.位”“字节地址.位”“位地址”“位名称”

如“B.5”表示寄存器B的第五位。其中引脚p0,p1,p2,p3等都可以位寻址。

单片机的指令时序

拍;振荡脉冲的周期,为51系列的最小时序单元。时钟周期;时钟周期是单片机CPU中的最基本的时间单元在一个时间周期内,CPU仅完成一个最基本的动作,拍经过二分频,便可得到单片机的时钟信号,由于是二分频,因此一个时钟周期包含两个拍。

机器周期;一个机器周期由6个时钟周期构成,也就是12个拍组成。指令周期;指令周期执行一条指令所需要的时间,不同指令需要不同的指令周期。

掉电保护;

1当检测到电源下降时,触发外部中断2在中断服务子程序中将外部的RAM中的有用数据送到内部的RAM中保护,然后对电源控制寄存器PCON进行设置3切换备用电源,备用电源只为单片机内部RAM和专用寄存器提供维持电流,是这些重要数据不丢失,而整个外部电路因为电源的中断而停止工作,时钟电路停止震荡,CPU也停止工作。4当电源恢复时,备用电源也要继续工作10ms左右,以保证外部电路达到稳定状态。

专用寄存器

程序计数器PC

相当于一个搬运工,用来不断的将指令搬运过来执行,由16个触发器构成,是一个16位二进制的程序地址寄存器,程序计数器PC的编码范围是0000H~FFFFH,寻址范围为64KB.

累加器A8位二进制存储器

寄存器B8位二进制存储器一般和A一起使用,用于乘除法操作指令。

程序状态寄存器PSW8位存储器

数据指针DPTR用于数据存储器的操作,由8位寄存器DPH和DPL组合而成,是一个典型的16位寄存器。DPH为数据指针的高8位,DPL为数据指针的低8位。

汇编语言;

起始伪指令ORG格式:[标号:] ORG 16位地址

在这,16位地址便是汇编程序块或者数据块存放的起始地址,如果省略ORG伪指令,则单片机程序代码从默认的0000H单元块开始存放。

字节保存伪指令DB格式[标号:] DB8位字节数据表其中8位字节数据表可以是一个或者多个字节数据、字符串或者表达式。在数据表中各项用‘,’分隔,一个数据项占一个存储单元,所有的数据项从标号指定的地址单元开始,将数据表中的字节数据按顺序依次保存。数据项可以采用十进制、二进制、或者十六进制数据表示。例如

ORG1100H

DATA1:DB51H,67H,61,90H

DATA2:DB110B,‘B’

字节数据将从1100H地址进行保存字节数据。

内存单元

内容

内存单元

内容

1100H

51H

1103H

90H

1101H

67H

1104H

110B=06H

1102H

61=33H

1105H

‘B’=42H

字保存伪指令DW用于单片机内存中保存双字节数据表,只能对程序存储器进操作。

格式[标号:]DW16位字数据表

其中可以是一个或者多个字节数据、字符串或者表达式。在数据表中各项用‘,’分隔,一个数据项占一个存储单元,所有的数据项从标号指定的地址单元开始,将数据表中的字节数据按顺序依次保存。需要注意的是,16位数据要占用两个单元的存储器,高8位数据存储到低地址字节,低八位数据存入到高地址字节。例如;

ORG1000H

DATA1:DW27AEH, 5CH

字节数据从1000H地址开始保存字数据。

内存单元

内容

内存单元

内容

1000H

21H

1002H

00H

1001H

AEH

1003H

5CH

空间预留伪指令DS用于在单片机内存中划分出一定的存储空间用作备用区域,只能对程序存储器进行操作,[标号:]DS表达式这里,表达式表达了从标号指定的地址单元开始,保存存储器单元的个数。

ORG1100H

BUF:DS08H

即从地址1100H开始划分出8个内存单元,从1108H之后的单元才可以进行其他操作。

位变量伪指令BIT用于给位地址定义一个字符名称

字符名称BIT位地址

如;P1BITP2.4

P2BITP2.6

在这里,位地址P2.4和P2.6赋给P1和P2 ,此后,遇到P1,P2的地方,就相当于使用P2.4和P2.6。

单片机指令的寻址方式

立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址和位寻址

立即寻址相当于直接给出操作数,此时的操作数成为立即数。前面用“#”来标示

十六进制结尾用H十进制结尾用D八进制结尾用O二进制结尾用B

典型寻址

MOVA ,#37H//把立即数37H这个数本身送到累加器A中,指令操作码74H,操作数37H

MOVDPTR,#1122H//其中1122H为16位立即数,该指令将立即数的高8位11H送入到DPH中,将低8位22H送入到DPL中,操作码是90H,操作数是1122H。

直接寻址就是将操作数存放的地址告诉指令单片机中可以直接寻址的两类存储空间,1片内RAM的低128个字节单元其地址00H~7FH.2特殊功能寄存器,其直接地址也可以用特殊功能寄存器的符号名称表示,直接寻址是访问特殊功能寄存器的唯一方式。

例如

MOVA,2EH

这里,“2EH”就是直接寻址的地址,该指令的操作码是E5H,功能是把内部RAM地址为2EH中的内容传给累加器A。

寄存器寻址就是告诉指令操作数所存放的寄存器,此时寄存器的内容就是操作数。由于寄存器存位于CPU内部,所以寄存器寻址速度比其他几种方式快。

MOVA,R1//就是将寄存器R1的数据传送给累加器A

寄存器间接寻址相当于绕了一个大弯,此时数据存放到RAM中,而该RAM的地址放在寄存器中,这样通过访问寄存器来获得RAM中的操作数的寻址方式就是寄存器间接寻址。

单片机可以利用此方式寻址的空间:

1片内RAM的低128字节单元,此时需要R0,R1作为间接寻址的寄存器

2片外RA M,如果用R0,R1作为间接寻址的寄存器,可以寻址256个单元。如果采用16位的DPTR作为间接寻址的寄存器,可以寻完整个外部RAM 64KB地址空间。

在寻址指令中,寻址的寄存器钱需要加“@”标示符,这样就和寄存器寻址区分开。

变址寻址提供了16位地址的寻址能力,它采用基址寄存器加变址寄存器方式来寻址,其中基址寄存器为DPTR或者PC,变址寄存器为累加器A,用于存放地址偏移量。

变址寻址的两种形式;

MOVA,@A+DPTR//功能是将累加器A的内容和数据指针DPTR的内容相加形成操作数的地址,即程序存储器的16位地址。

MOVA,@A+PC//功能是将累加器A的内容和PC的内容相加形成操作数的地址,即程序存储器的16位地址。

相对寻址是根据指定地址的偏移量,然后从当前PC值跳转到偏移量所指向的地址的方式,这里的地址偏移量为带符号的8位二进制数,其取值范围是-128~+127,因此相对寻址可以寻址当前的PC的-128~+127之间的某段程序存储器。

例如SJMP33H//本指令占用两个字节,因此PC指针的当前值为PC+2.地址偏移量是33H,则程序跳转的地址为PC+2+33H.

位寻址是特别为位操作区域提供的寻址方式,在指令中给出位地址即可。

51单片机中,可以位寻址的区域;

1片内RAM的20H~2FH单元,共16*8=128位,可以直接使用位地址来表示,例如,20H单元的0~7位的位地址是00H~07H,也可以使用RAM地址加序位号表示,例如2AH.1表示2AH单元的D1位。

2可位寻址的特殊功能寄存器相应位,这些为均有特定的名称,因此可以直接采用位名称来表示,或者采用寄存器符号加位序号表示,例如PSW.3表示PSW寄存器中的D3位。

典型表示;

MOVC,2AH.5//把地址2AH中的第六位D5,即2AH.5的值(0或1)传送到位累加器CY中。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PLC控制步进电机方法