单片机里面的寄存器的字节地址是用来干什么的?怎么用?

单片机里面的寄存器的字节地址是用来干什么的?怎么用?,第1张

首先,地址的作用只有一个,就是用来寻址。\x0d\其次,51单片机的的片内寄存器都是可以字节寻址的。\x0d\字节地址就是用来寻址一个字节的内容,和位地址相对应,位地址就只能寻址一个位(bit)。在单片机指令中寻址任何一个字节都需要字节地址,寻址任何一个位都需要位地址。所谓的IP、IE不过是我们给这个寄存器取了另外一个名字而已。如:MOV IP,#00H 和 MOV B8H,#00H 这两条语句是一样的效果。另外,从这些寄存器的使用上来说,IP、IE等特殊功能寄存器既可以字节寻址也可以位寻址,是同样的效果。比如:SETB PX0;和 MOV IP,#01H;是一样的,都是将IP的第0位即PX0置1。不同的是,字节寻址的时候是8位一起 *** 作的,会对其它的位赋值,有时不想改变其它位的值,就用位寻址。\x0d\所以,字节地址是用来寻址字节的,位地址是用来寻址位的。就这样。另外,IP也好,IE也好,也都是寄存器,要访问它们也需要地址(访问字节用字节地址,访问位用位地址),不同的是它们用来对处理器进行配置,我们给它们取了一些特定的名字而已。

1寄存器的含义

寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,寄存器有累加器(ACC)。

寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU中的寄存器就是其中一种,作为软硬件的接口,为广泛的通用编程用户所熟知。

在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

寄存器是内存阶层中的最顶端,也是系统获得 *** 作资料的最快速途径。寄存器通常都是以他们可以保存的位元数量来估量,

举例来说,一个“8 位元寄存器”或“32位元寄存器”。寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。

寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。更适当的是称他们为“架构寄存器”。

例如,x86指令集定义八个32 位元寄存器的集合,但一个实际 x86 指令集的CPU可以包含比八个更多的寄存器。

2寄存器的作用

寄存器的功能十分重要,CPU对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与CPU之间通过“端口”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为“端口”,这种说法不太严格,但经常这样说。

外部寄存器虽然也用于存放数据,但是它保存的数据具有特殊的用途。某些寄存器中各个位的0、1状态反映了外部设备的工作状态或方式;还有一些寄存器中的各个位可对外部设备进行控制;也有一些端口作为CPU同外部设备交换数据的通路。所以说,端口是CPU和外设间的联系桥梁。CPU对端口的访问也是依据端口的“编号”(地址),这一点又和访问存储器一样。不过考虑到机器所联接的外设数量并不多,所以在设计机器的时候仅安排了1024个端口地址,端口地址范围为0--3FFH。

扩展资料:

寄存器的特点

寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。但同存储器相比,寄存器又有自己独有的特点:

①寄存器位于CPU内部,数量很少,仅十四个

②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据,对于386/486处理器中的一些寄存器则能存储32bit数据

③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。

参考资料:

百度百科-寄存器

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

寄存器:我想了解多一些有关寄存器的知识,汇编编程时用的,请给我推荐一些书籍好么汇编书里的太有限了,而且很多硬件的寄存器都没有提到

书也行,最好是书网站也可以我不常上网的因为

解析:

寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1可将寄存器内的数据执行算术及逻辑运算。2存于寄存器内的地址可用来指向内存的某个位置,即寻址。3可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。 所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于 ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志(

OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0
DF: 方向标志DF位用来决定在串 *** 作指令执行时有关指针寄存器发生调整的方向。

IF: 中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:

(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;

(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。

TF: 状态控制标志位是用来控制CPU *** 作的,它们要通过专门的指令才能使之发生改变

SF: 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。

ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

AF: 下列情况下,辅助进位标志AF的值被置为1,否则其值为0:

(1)、在字 *** 作时,发生低字节向高字节进位或借位时;

(2)、在字节 *** 作时,发生低4位向高4位进位或借位时。

PF: 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。

CF: 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。)

以上是8086寄存器的整体概况, 自80386开始,PC进入

32bit时代,其寻址方式,寄存器大小, 功能等都发生了变化, 要想学习这方面知识请参考相应资料

关于寄存器就写这么多了,学习汇编和学习别的语言一样

要多想,多练,多看, 这样才会有提高

下面是一些汇编书籍和网站, 对你学习会有帮助的

网站:
x86a / x86汇编小站
aogosoft/ Aogo汇编小站
2119022598:22366/ 罗云彬的编程乐园
codeof/articles/programming/ma /

里面有汇编学习资料

书籍:

1 IBM-PC 汇编语言程序设计(2th)

2 <<80x86 IBM PC及兼容计算机(卷I和II) — 汇编语言、设计与接口技术>>; 这本书很牛, 建议入手;

中文的汇编好书比较少,如果你英语不错的话,可以看看

下面这些(都很经典!!!):

01 <<Mastering Turbo Assembler>>

02 <<Using Assembly Language>>

04 <<Assembly Language Primer for the IBM PC/XT>>

05 <<Assembly Language from Square One>>

06 <<Assembly Language for the IBM PC>>

07 <<Assembly Language and Systems Programming for the IBM PC and Compatables>>

08 <<Assembler Inside & Out>>

09 <<The Zen of Assembly>>

10 <<IBM Microputers: A Programmer's Handbook>>

11 <<Programmer's Problem Solver for the IBM PC, XT, and AT>>

12 <<IBM PC ASSEMBLER LANGUAGE AND PROGRAMMING>>

13 <<80386: A Programming and Design Handbook>>, 2nd Ed

14 <<80486 Programming>>

15 <<Master Class Assembly Language>>

16 <<Programmer's Guide to PC & PS/2 Video Systems>>

17 <<Power Graphics Programming>>

18 <<Programmers Guide to the EGA and VGA cards>>, 3rd Ed

19 <<AdvancEd Programmers Guide to the EGA/VGA>>

20 <<UndocumentEd DOS>>

21 <<DOS Programmer's Reference>>

22 <<386SX Microprocessor Programmer's Reference Manual>>

23 <<i486 Microprocessor Programmer's Reference Manual>>

24 <<The Programmer's PC Sourcebook>>

25 <<System BIOS for IBM PCs, Compatables, and EISA Computers>>, 2nd Ed

26 <<PC Magazine Programmers Technical Reference: The Processor and Coprocessor>>

27 <<Mastering Serial Communications>>

28 <<DOS Programmer's Reference>>, 2nd Ed

29 <<MS-DOS Programmer's Reference>>

最后祝你学习愉快

这些代码段是用于单片机GPIO配置的。下面是每行代码的详细解释:

RCC->APB2ENR |= 1 << 6;:这行代码用于使能GPIOE时钟。RCC(复位和时钟控制)模块的APB2ENR寄存器负责管理高性能APB2外设的时钟。第6位(IOPEEN)控制GPIOE的时钟。将1左移6位,然后使用按位或 *** 作将该位设置为1,以启用GPIOE的时钟。

GPIOE->CRL &= 0xF00FFFFF;:这行代码用于清除GPIOE的CRL寄存器的位20至位23。CRL寄存器用于配置端口的低8位(即位0到位7)。位 *** 作的目的是将PE5和PE6的配置清零,以便重新配置它们。

GPIOE->CRL |= 0x03300000;:这行代码用于配置PE5和PE6为推挽输出。在位20至位23清零后,我们使用按位或 *** 作将这些位设置为"0011 0011"(即0x03300000)。这将PE5和PE6配置为推挽输出,50MHz速率。

GPIOE->ODR |= 1 << 5;:这行代码将GPIOE的输出数据寄存器(ODR)的第5位设置为1,使PE5输出高电平。

GPIOE->ODR |= 1 << 6;:与上一行代码类似,这行代码将GPIOE的输出数据寄存器(ODR)的第6位设置为1,使PE6输出高电平。

这些代码段用于配置单片机GPIOE端口的PE5和PE6引脚为50MHz推挽输出,并将它们初始化为高电平。在执行这些 *** 作之前,需要使能GPIOE时钟。

1、STM32 的每个 IO 端口都有 7 个寄存器来控制
(1)配置模式的 2 个 32 位的端口 配置寄存器 CRL 和 CRH
(2)2 个 32 位的数据寄存器 IDR 和 ODR
(3)1 个 32 位的置位/复位寄存器 BSRR
(4)一个 16 位的复位寄存器 BRR
(5)1 个 32 位的锁存寄存器 LCKR。
2、每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只有四个:CRH,CRL,IDR,ODR。
3、另外,STM32的每个端口使用前都要将其时钟使能,STM32的GPIO的时钟统一挂接在APB2上,具体的使能寄存器为RCC_APB2ENR,该寄存器的第2位到第8位分别控制GPIOx(x=A,B,C,D,E,F,G)端口的时钟使能,当外设时钟没有启用时,程序不能读出外设寄存器的数值

GPIOA->CRL原来是有初始值的 比如说0xffffffff
GPIOA->CRL&=0XFFFFFF0F则表示:
GPIOA->CRL=GPIOA->CRL&0XFFFFFF0F 即
GPIOA->CRL=0xffffffff&0XFFFFFF0F

方括号里的叫做位域,代表从第几位到第几位。
例如CNFx[1:0]就代表这两个位是CNFx的第1位和第0位。
以CNF7[1:0]为例,它映射在GPIOx_CRL寄存器的[31:30]。当你需要将端口7配置为浮空模式)(01)时,就需要将CNF7这个位域改为01,实际上也就是要将GPIOx_CRL寄存器的第31位、第30位分别改为0、1。

1、首先把上位机和PLC连接,寄存器的程序在电脑中显示。
2、其次选择在线—监视—软件元件进行登录。
3、最后在软件元件中点击列表处,登录需要监视的数据寄存器,就可以使用了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13204704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-20
下一篇 2023-06-20

发表评论

登录后才能评论

评论列表(0条)

保存