精华内容
下载资源
问答
  • CNC and PLC Interface-ZH-CN.chm 新代SYNTEC CNC 和PLC 接口资料。主要讲解了I O C S A R 寄存器的定义及如何相互交互。
  • 威纶通触摸屏系统寄存器功能使用详解及地址列表一览
  • 寄存器PLC地址寄存器modbus协议地址

    万次阅读 多人点赞 2017-10-24 22:25:28
    寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本... 寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数...

           寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。第一位数字和寄存器类型的对应关系如表1所示。PLC地址例如40001、30002等。
           寄存器modbus协议地址指通信时使用的寄存器地址,在实际编程中,由于寄存器PLC地址前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002。在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。
           支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应 当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种 “功能”读写而来。 功能码是 Modbus 地址的底层。 如果 Modbus 通 信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此 功能号与 Modbus 地址间的对应关系。

           使用 modbus 地址时应注意下述问题:

     1)40001~4xxxx 是美国 modicon 公司和 ge 公司 plc 使用的 modbus 地址,它是基于1的地址,即同类元件的首地址为1。西门子 plc 的 modbus 地址是基于0的地址。 

    2)美国的 modbus 地址左起第2位用来表示元件的类型,例如 i0.0的 modbus 地址为010001。 因为数据类型已经包含在功

    展开全文
  • STM32寄存器的简介、地址查找,与直接操作寄存器

    万次阅读 多人点赞 2019-01-11 11:15:15
    寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。  简单说,寄存器就是存放东西的东西。从名字看,跟火车站寄存行李的地方好像是有关系的。只不过火车站行李寄存处,存放的行李;寄存器...

    什么是寄存器

    提到单片机,就不得不提到寄存器。根据百度百科介绍,寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址
    举个例子
      简单来说,寄存器就是存放东西的东西。从名字来看,跟火车站寄存行李的地方好像是有关系的。只不过火车站行李寄存处,存放的行李;寄存器可能存放的是指令、数据或地址。
      存放数据的寄存器是最好理解的,如果你需要读取一个数据,直接到这个寄存器所在的地方来问问他,数据是多少就行了。问寄存器这个动作,叫做访问寄存器。不同的数据会存放在不同的寄存器,例如引脚PA2与PB8的高低电平数据(1或0)肯定放在不同的寄存器里,那么怎么区分不同的寄存器呢?通过地址,不同的寄存器有不同的地址,就像老张行李寄存处在101号店铺,老王行李寄存处在258号店铺。
      指令、地址寄存器与数据寄存器类似,里边存放的都是0和1,毕竟单片机也只认识机器码,机器码都是0或1,只是特别的规定下,数据寄存器里面存放的0和1表示数据,指令寄存器里存放的表示指令。
      个人理解:给CPU存储东西的地方。等CPU转到寄存器这个地方的时候,就拿出寄存器里存放的东西,或是根据寄存器里的命令做一些事情。比如厨房就是个寄存器,负责做饭。仓库也是个寄存器,负责存东西。需要某些功能的时候,就要操作某个寄存器。可以把寄存器类比为,有特殊功能的地方,既然是个地方当然就有地址了,所以,可以把寄存器想象为特殊的地址。

    怎么找到某个寄存器的地址?查看数据手册。

    手册中没有直接给出所有的寄存器的地址,需要读者稍加计算。STM32给不同的寄存器分配了不同的地址,有点像划分了片区。在《STM32中文参考手册_V10》的第28页,有不同寄存器的地址范围。
      现在,假如我们想读取PB3引脚的电平,该怎么找到相关的寄存器?
    第一步,找到GPIOB的基地址
      也就是找到GPIOB的小区。结论是,所有GPIOB相关的寄存器,都住在0x4001 0C00到0x4001 0FFF范围内。
    GPIOB的地址
    第二步,找到端口输入寄存器的地址偏移
      找到存储数据的那个屋子,结论是0x4001 0C00+8 = 0x4001 0C08
    GPIOB_IDR的地址偏移
    第三步,找到知道数据的那个人
      PB3的数据位于从右往左数第4个。
    引脚PB3的数据
      而这个寄存器的位数是32位(虽然高16位没有用到),这就是32位的单片机的意思。每个寄存器都占据4字节,32位。而CPU的总线一次可以操作32位,所以比8位单片机厉害一点。
      经过这三步查找,我们可以做出以下结论:
    PB3的输入数据位于0x4001 0C08这个地址上,这个地址上存放数据的右起第4个位就是PB3引脚对应的高低电平。
      我们可以简单粗暴地直接访问这个地址:

     unsigned int *pGPIOB_IDR = (unsigned int *)0x40010C08;
     unsigned char PB3 = *pGPIOB_IDR & 0x8;//取出从右往左数的第4位
    

    直接访问的操作并不好用,每操作一个寄存器就必须去查看数据手册,然后找找这个寄存器的地址。
      意法半导体公司为了方便大家使用,就把这些寄存器都起了一目了然的名字,把寄存器与地址映射关系放在他们提供的头文件里。这个文件就是stm32f10x.h。

    直接操作寄存器来点亮LED。

    我的板子对应的LED是PB8。

    • 首先要配置时钟使能。

    为什么配置时钟?为了省电,默认的时钟都是关闭的。配置STM32的任何资源前,都必须首先使能时钟。
      配置哪个时钟?
    时钟的信息在参考手册里边,参考手册十分巨大,不用通读,就像一个字典,需要什么查什么。
      参考手册,搜索"时钟",在表1里可以看到。
    时钟控制名字叫做RCC,属于AHB总线。GPIOB属于APB2。
    在这里插入图片描述
      下图系统结构可以看到时钟的从属关系,此图位于手册P25页,十分重要。可以看出AHB总线包含RCC时钟控制,GPIO是属于APB2的。
    在这里插入图片描述
      我们已经知道,GPIO端口B的地址从0x4001 0C00开始。接下来只寻找时钟使能寄存器的地址:
      复位和时钟控制RCC的地址从0x4002 1000开始;
      可以在6.3.7小节找到APB2外设时钟使能寄存器(RCC_APB2ENR),偏移地址是0x18,所以APB2的地址就是0x4002 1018。
      看手册RCC_APB2ENR,位3是IOPBEN,名字是IO端口B时钟使能,就是我们想要的。把RCC_APB2ENR的位3赋值为1,就是开启GPIOB时钟。
    在这里插入图片描述

    • 配置为通用输出

    既然叫做IO,那么肯定就是可以输入,可以输出,到底是输入还是输出呢?
      控制LED需要输出高电平或是低电平,所以需要配置为输出。
      由于STM32的每个IO都需要4个位来配置,所以一个32位的寄存器最大只能配置8个IO(32位的单片机的寄存器就是32位的)。STM32中,用端口配置低寄存器(GPIOx_CRL)来配置引脚Px0-Px7, 用端口配置高寄存器(GPIOx_CRH)来配置引脚Px8-Px15。
      配置引脚PB8,使用的寄存器是GPIOB_CRH。下面我们来寻找这个寄存器的地址。
    在这里插入图片描述
      关于此寄存器的说明位于8.2.2小节。先看标题GPIOx,表示不管是PA,PB还是PE,都能用。
      偏移地址是0x04,意思是在基地址的基础上再加0x04,所以,对于GPIOB来说就是0x4001 0c04。如果配置PB0-PB7,那么需要的寄存器是低位的寄存器GPIOB_CRL,它的地址是0x4001 0c00。我们需要配置的寄存器是GPIOB_CRH。
      找到需要操作的寄存器后,把它配置为通用输出。
      复位值是0x4444 4444,并不是0x0000 0000。所谓的复位值,就是指如果没有操作这个寄存器时,寄存器存放的默认值。复位值按位拆分0x4 = 0b0100,0x表示16进制,0b表示二进制,也就是默认CNF 01,MODE 00,是浮空输入。
      我们需要的是输出高低电平,所以要设置为输出。输出模式又有好几种输出:
    在这里插入图片描述
      推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。
      开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。
      开漏是需要外接上拉电阻才可以输出高电平的,这里并不适合。所以需要设置为推挽输出。
      功能是否是复用呢?复用的意思是有别的功能在这个脚上,比如USB,CAN,串口等,所以这些个脚就可能有多个功能。暂时讲多了反而会迷惑,等用到了这些功能再讲解,我直接告诉大家,PB8没有复用。
      所以配置为输出模式,通用推挽输出。速度暂时不关注,随便填写一个50MHz吧,其它速度当然也可以。所以设置GPIOB_CRH的MODE8与CNF8为0b0011,即0x3。此寄存器中其它的位暂时不做修改,使用默认值,也就是GPIOB_CRH设置为:0x4444 4443。

    • 点亮LED需要输出低电平

    在单片机的编程中,要想做某件事,必须寻找相应的寄存器。在8.2.4小节,可以找到端口输出数据寄存器,就是我们需要的。我们需要输出0。但是中文手册有一个小小的BUG,0x0C写成了0Ch,可以参考英文原版。得知地址的偏移是0x0C,所以这个数据寄存器的地址就是0x4001 0C0C,把第8位写为0就行。默认就是0,但是也得学一下怎么写,万一是高电平点亮呢。
    在这里插入图片描述
    在这里插入图片描述

    • 使用直接赋值的方式写寄存器的地址

    在搞清楚我们要用的几个寄存器的地址,以及寄存器中需要装填的数值以后,现在用一个简单粗暴的方法来操作这些寄存器——直接操作。(注意,这段代码不是实用的代码,只是为了写出一个最简单的LED,有些部分是不可取的。)将main函数修改为:

        int main(void)
        {
            unsigned int *pRCC_APB2ENR = (unsigned int *)0x40021018;
            unsigned int *pGPIOB_CRH = (unsigned int *)0x40010c04;
            unsigned int *pGPIOB_ODR = (unsigned int *)0x40010c0c;
            *pRCC_APB2ENR = 0x00000008;
            *pGPIOB_CRH = 0x44444443;
            *pGPIOB_ODR = 0x00000000;
             return 0;             
        }
    

    C语言总是从main函数开始执行。
      定义几个指针,指向刚刚看到的地址。对于编译器来说,它并不知道0x40021018代表的是数据还是指针,所以用(unsigned int *)作强制的类型转换,告诉编译器0x40021018是个指针。指针可以理解为地址。操作指针,把这些地址存放的值修改。
      最后的return,代表main函数结束。

    总结

    我们写了一段另类的代码,直接操作寄存器的地址,就是想得到这么一个结论:不论代码怎么写,不论是寄存器,库函数,还是其他的操作系统,要在STM32F103这个单片机点亮LED灯,肯定需要把时钟和GPIO这几个相关的特殊地址,进行赋值或修改数值的操作。有点像打篮球,不论进攻时有怎样花哨的运球与传切配合,最后都要完成把球放入篮筐的动作,才能得分。
    在这里插入图片描述

    展开全文
  • 控制寄存器和系统地址寄存器 ppt
  • 寄存器的配置、地址对应等: 一、每组GPIO的数目 二、每组GPIO的起始号码 三、以单组的起始号
  • MPU6050寄存器地址(较完全版)

    千次阅读 2019-10-25 19:35:29
    #define MPU6050_PWR 0x6b //电源 #define MPU6050_SMPLRT_DIV 0x19 //取样时钟 #define MPU6050_CONFIG 0x1a //低通滤波 #define MPU6050_GYRO_CONFIG 0x1b //陀螺仪量程...
    #define MPU6050_PWR                 0x6b    //电源
    #define MPU6050_SMPLRT_DIV          0x19    //取样时钟
    #define MPU6050_CONFIG              0x1a    //低通滤波
    #define MPU6050_GYRO_CONFIG				  0x1b    //陀螺仪量程(bit3,4)(0-250,1-500,2-1000,3-2000)
    #define MPU6050_ACCEL_CONFIG        0x1c    //加速度计量程(bit3,4)(0-2g,1-4g,2-8g,3-16g)
    
    #define MPU6050_RA_ACCEL_XOUT_H     0x3B    //加速度
    #define MPU6050_RA_ACCEL_XOUT_L     0x3C
    #define MPU6050_RA_ACCEL_YOUT_H     0x3D
    #define MPU6050_RA_ACCEL_YOUT_L     0x3E
    #define MPU6050_RA_ACCEL_ZOUT_H     0x3F
    #define MPU6050_RA_ACCEL_ZOUT_L     0x40
    
    #define MPU6050_RA_TEMP_OUT_H       0x41    //温度
    #define MPU6050_RA_TEMP_OUT_L       0x42
    
    #define MPU6050_RA_GYRO_XOUT_H      0x43    //转速陀螺仪
    #define MPU6050_RA_GYRO_XOUT_L      0x44
    #define MPU6050_RA_GYRO_YOUT_H      0x45
    #define MPU6050_RA_GYRO_YOUT_L      0x46
    #define MPU6050_RA_GYRO_ZOUT_H      0x47
    #define MPU6050_RA_GYRO_ZOUT_L      0x48

     

    展开全文
  • Modbus寄存器地址规则

    万次阅读 2019-08-09 00:32:31
    Modbus协议定义的寄存器地址是5位十进制地址,即: 线圈(DO)地址:00000~09999 触点(DI)地址:10000~19999 输入寄存器(AI)地址:30000~39999 输出寄存器(AO)地址:40000~49999 由于上述各类地址是...

    Modbus协议定义的寄存器地址是5位十进制地址,即:

    线圈(DO)地址:00001~09999

    触点(DI)地址:10001~19999

    输入寄存器(AI)地址:30001~39999

    输出寄存器(AO)地址:40001~49999

     

    由于上述各类地址是唯一对应的,因此有些资料就以其第一个数字区分各类地址,即:0x代表线圈(DO)类地址,1x代表触点(DI)类地址、 3x代表输入寄存器(AI)类地址、4x代表输出寄存器(AO)类地址。

     

    在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。

    展开全文
  • 【STM32】MDK中寄存器地址名称映射分析

    万次阅读 多人点赞 2018-04-04 18:11:07
    51单片机访问地址 51单片机经常会引用一个reg51.h的头文件。下面看看它是怎么把名字和寄存器联系在一起的: sfr p0=0x80; p0=0x00; sfr是一种扩充数据类型,点用一个内存单位,值域为0-255....
  • 为什么第一个寄存器地址是40001? 功能码对照表如下:(H为16进制) 由上面对照表可以看出,线圈和离散输入均为按“位”,即BIT进行操作读写;而寄存器则统一按照“字”,即WORD进行读写。 这是要注意的地方! 在...
  • 寄存器地址并转换为16位地址类型

    千次阅读 2020-01-07 20:11:57
    寄存器 地址 FPROTSL 地址 &FTFx_FPROTSL_REG -> 为32位, 所以在将地址转为数据时应转换为32位数据 ->(uint32_t)&FTFx_FPROTSL_REG 然后再将其32位数据转为16位的地址 -> (volatile uint16_t *)(uint32_t)&...
  • 我们在做开发的时候,经常需要涉及到ARM中具体的寄存器地址,翻阅DATASHEET.这份资料是对S3C2440各寄存器地址的罗列,作者应该花了不少功夫,方便我们在需要某个寄存器地址的时候,比较快速的知道.
  • 寄存器

    千次阅读 2016-09-04 22:24:52
    8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器和(4)段寄存器等4类。 通用寄存器 有8个, 又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及...
  • STM32从地址寄存器

    千次阅读 多人点赞 2019-01-11 11:44:32
    本文希望在上一节的基础上,把指针操作过渡到寄存器的使用,帮助读者深入理解寄存器。 引入头文件 主函数里出现了强制转换与指针的操作,程序不那么容易理解。我们把寄存器地址进行宏定义,可以增强可读性。 #...
  • 寄存器地址rs485设备地址的区别

    千次阅读 2019-08-09 15:49:31
    rs485设备地址是可以更改的,...寄存器地址:寄存器在内存上面,暂时存储数据 地址 指令的;寄存器本身有地址也称之为内存地址;寄存器的地址是不能改变的,他时控制系统内核潜制进去的,用户只用使用权,不可更改 ...
  • 地址寄存器、偏移地址寄存器

    千次阅读 2020-11-15 12:43:19
    1. 数据寄存器:AX,BX,CX,DX 2. 地址寄存器,看图找规律
  • modbus的寄存器地址

    千次阅读 2020-06-11 15:08:22
    modbus的地址,其实modbus的规范里面写的很明确了,但是最近还有人问我,其实这个很简单的。00001至09999是离散输出(线圈)-----Coil status10001至19999是离散输入(触点)-----Input status30001至39999是输入寄存器...
  • 【汇编语言】寄存器地址

    千次阅读 多人点赞 2021-03-04 18:40:57
    寄存器地址 主要内容: 一、寄存器 (1)透明寄存器 (2)可编程寄存器 1.通用寄存器 2.专用寄存器 二、地址 (1)存储模型 (2)存储空间分段管理 (3)物理地址与逻辑地址 (4)操作数寻址过程
  • 一、寄存器地址映射 二、寄存器各位定义 三、中断号定义 关于一,怎么说呢,可以参考一下《STM32F4开发指南——库函数版本》里边的4.6小节“MDK中寄存器地址名称映射分析”,这篇文章介绍的比较清楚,其中需要...
  • 功能码01(读线圈状态)对应的地址是线圈的地址(即位地址),若要求其所在的寄存器地址,计算如下: 线圈的位地址/16=整数商(即寄存器地址)+余数(即位偏移地址) 追问 除以几是不是应该看是几位的cpu啊?如果是...
  • 获取寄存器地址的方法

    千次阅读 2017-11-16 11:21:30
    在这里,外设地址应该是USART1的DR寄存器地址。可是如何获取该寄存器地址呢? 现在实测了3种方式,都可以实现。 方法1: 直接查询手册中寄存器映像(map),USART1的DR地址为0x40013804 方法2: 手册...
  • 地址不是单纯的16进制数值,它表达的是内存空间。
  • 计算机组成原理实验——寄存器堆实现

    千次阅读 多人点赞 2019-05-31 11:11:03
    这次要做的是用Verilog代码写一个寄存器堆,此寄存器堆共有32个寄存器,每个寄存器可存储32个二进制位。要求有一个写端口,两个读端口,本次实验设计为异步读同步写的寄存器堆,即读寄存器不需要时钟控制,但写...
  • 寄存器地址和寄存器位之间的关系? 答:在汇编语言中,分为位地址和字地址,8位为一个字地址,题中32位即4个字地址,10个寄存器为40个地址。
  • STM32外设寄存器地址定义

    千次阅读 2016-08-18 10:54:02
    一直都是用STM32做项目中的主控芯片,在编程的时候,之前一直忽视了一个问题,那就是寄存器的位置是如何定义的,为什么用一个USART1->CR操作就能够给这个CR寄存器赋值?其实这是一个比较底层的问题,不懂这方面的...
  • 组态王寄存器

    2015-08-06 16:02:45
    组态王寄存器
  • 就是容量和地址寄存器。MAR的位数以及数据寄存器MDR的位数的关系。 总的容量等于2的mar位数的n次方乘以mdr的位数 因为地址寄存器n位二进制代码。可以表示的地址单元的个数是二的n次方。这里就是我...
  • 单片机外设(ram、寄存器)地址详解

    千次阅读 2020-01-05 13:01:13
    在学习汇编语言时,我们会接触到一些寄存器,比如R0、R1、还有栈指针寄存器SP、下一条指令寄存器PC 等等。这些寄存器是存在于内核(如CPU)之内的,这些寄存器是我们无法通过c语言访问到的,而只能用汇编语言操作。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 308,518
精华内容 123,407
关键字:

寄存器的地址是怎么来的