L3G4200D中文寄存器功能详解

合集下载

推荐-L3G42D亲译手册2 精品

推荐-L3G42D亲译手册2 精品

3启动顺序一旦设备上电,它就会自动把内部闪存的标准配置装载到内部寄存器。

当引导程序结束,也就是上电5毫秒之后,设备自动进入省电模式。

要开启设备并且采集角速率数据,就要通过CTRL_REG1选择运行模式,并且使能至少一个轴。

下面顺序可以用于配置设备:1. Write CTRL_REG22. Write CTRL_REG33. Write CTRL_REG44. Write CTRL_REG65. Write Reference6. Write INT1_THS7. Write INT1_DUR8. Write INT1_CFG9. Write CTRL_REG510. Write CTRL_REG13.1读取角速率数据设备包含一个状态寄存器STATUS_REG,应该检测当新的一组数据有效产生。

读取顺序应该:1. Read STATUS_REG2. If STATUS_REG(3) = 0 then go to 13. If STATUS_REG(7) = 1 then some data have been overwritten4. Read OUT_X_L5. Read OUT_X_H6. Read OUT_Y_L7. Read OUT_Y_H8. Read OUT_Z_L9. Read OUT_Z_H10. Data processing11. Go to 1第3步执行的检测用于判断数据读取的速度是否适合数据产生的速度,STATUS_REG的ZYXOR 位应该被设置为1,以防止由于过慢的读取速度导致一个或者多个角速率数据被新的数据覆盖。

当设备中所有的现有数据已经被读取并且期间新的数据还没有产生,那么超限的位被自动清除。

3.1.2 使用数据就绪(DRY)信号设备应该被配置有一个HW信号以确定一组新的测量数据可以读取。

这个信号由STATUS_REG的XYZDA位表示。

这个信号可以由DRY/INT2引脚检测(通过设置CTRL_REG3的I2_DRDY位为1,并且通过设置CTRL_REG3的H_Lactive位决定高电平有效或者低电平有效(详见5.1章节))当一组新的角速率数据产生并且准备好可读取时Data_ready信号上升为1。

L3G4200D 51单片机IIC 测试程序

L3G4200D  51单片机IIC 测试程序

//这是L3G4200D 51单片机IIC 测试程序//这是1602 头文件保存为1602.h#define DataPort P0 //LCD1602数据端口sbit LCD_RS=P2^4; //LCD1602命令端口sbit LCD_RW=P2^5; //LCD1602命令端口sbit LCD_EN=P2^6; //LCD1602命令端口#include <INTRINS.H>#define uchar unsigned charvoid WaitForEnable(void){DataPort=0xff;LCD_RS=0;LCD_RW=1;_nop_();LCD_EN=1;_nop_();_nop_();while(DataPort&0x80);LCD_EN=0;}void WriteCommandLCD(uchar CMD,uchar Attribc) {if(Attribc)WaitForEnable();LCD_RS=0;LCD_RW=0;_nop_();DataPort=CMD;_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;}void WriteDataLCD(uchar dataW){WaitForEnable();LCD_RS=1;LCD_RW=0;_nop_();DataPort=dataW;_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;}void InitLcd(){WriteCommandLCD(0x38,1);WriteCommandLCD(0x08,1);WriteCommandLCD(0x01,1);WriteCommandLCD(0x06,1);WriteCommandLCD(0x0c,1);}void DisplayOneChar(uchar X,uchar Y,uchar DData) {Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCD(X,0);WriteDataLCD(DData);}//下面是主程序部分//*************************************** // L3G4200D三轴陀螺仪IIC测试程序// 使用单片机STC89C51// 晶振:11.0592M// 显示:LCD1602// 编译环境Keil uVision2// 参考宏晶网站24c04通信程序// 时间:2011年3月1日//**************************************** #include <reg52.h>#include "1602.h"#include <math.h>#include <stdio.h>#include <INTRINS.H>#define uchar unsigned char#define uint unsigned intsbit SCL=P1^0 ; //IIC时钟引脚定义sbit SDA=P1^1 ; //IIC数据引脚定义//********************#define WHO_AM_I 0x0F#define CTRL_REG1 0x20 // 0010 0000#define CTRL_REG2 0x21#define CTRL_REG3 0x22#define CTRL_REG4 0x23#define CTRL_REG5 0x24#define OUT_X_L 0x28#define OUT_X_H 0x29#define OUT_Y_L 0x2A#define OUT_Y_H 0x2B#define OUT_Z_L 0x2C#define OUT_Z_H 0x2D#define SlaveAddress 0xD2 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改typedef unsigned char BYTE;typedef unsigned short WORD;BYTE BUF[8]; //接收数据缓存区long temp;uchar ge,shi,bai,qian,wan; //显示变量int dis_data;//变量//int temp;void delay(unsigned int k);void InitL3G4200D(uchar ); //初始化L3G4200Dvoid conversion(uint temp_data);void Single_WriteL3G4200D(uchar REG_Address,uchar REG_data); //单个写入数据uchar Single_ReadL3G4200D(uchar REG_Address); //单个读取内部寄存器数据void Delay5ms();//void Multiple_readL3G4200D(void);//------------------------------------void Delay5us();void L3G4200D_Start();void L3G4200D_Stop();void L3G4200D_SendACK(bit ack);void L3G4200D_RecvACK();void L3G4200D_SendByte(BYTE dat);BYTE L3G4200D_RecvByte();void display_x();void display_y();void display_z();//-----------------------------------//********************************************************* void conversion(uint temp_data){temp_data*=0.875;wan=temp_data/10000+0x30 ;temp_data=temp_data%10000; //取余运算qian=temp_data/1000+0x30 ;temp_data=temp_data%1000; //取余运算bai=temp_data/100+0x30 ;temp_data=temp_data%100; //取余运算shi=temp_data/10+0x30 ;temp_data=temp_data%10; //取余运算ge=temp_data+0x30;}/*******************************/void delay(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}/*****************************************************************延时5微秒(STC90C52RC@12M)不同的工作环境,需要调整此函数,注意时钟过快时需要修改当改用1T的MCU时,请调整此延时函数**************************************/void Delay5us(){_nop_();_nop_();_nop_();_nop_();}/**************************************延时5毫秒(STC90C52RC@12M)不同的工作环境,需要调整此函数当改用1T的MCU时,请调整此延时函数**************************************//*void Delay5ms(){WORD n = 560;while (n--);}*//**************************************起始信号**************************************/ void L3G4200D_Start(){SDA = 1; //拉高数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 0; //产生下降沿Delay5us(); //延时SCL = 0; //拉低时钟线}/**************************************停止信号**************************************/ void L3G4200D_Stop(){SDA = 0; //拉低数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 1; //产生上升沿Delay5us(); //延时}/**************************************发送应答信号入口参数:ack (0:ACK 1:NAK)**************************************/void L3G4200D_SendACK(bit ack){SDA = ack; //写应答信号SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}/**************************************接收应答信号**************************************/void L3G4200D_RecvACK(){SCL = 1; //拉高时钟线Delay5us(); //延时while(SDA==1);SCL = 0; //拉低时钟线Delay5us(); //延时}/**************************************向IIC总线发送一个字节数据**************************************/void L3G4200D_SendByte(BYTE dat){BYTE i;for (i=0; i<8; i++) //8位计数器{SDA = dat&0x80; //送数据口dat=dat<<1;SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}L3G4200D_RecvACK();}/**************************************从IIC总线接收一个字节数据**************************************/BYTE L3G4200D_RecvByte(){BYTE i;BYTE dat = 0;SDA = 1; //使能内部上拉,准备读取数据,for (i=0; i<8; i++) //8位计数器{dat <<= 1; //这里的1是00000001SCL = 1; //拉高时钟线Delay5us(); //延时dat |= SDA; //读数据SDA 00000000 or 00000001SCL = 0; //拉低时钟线Delay5us(); //延时}return dat;}//单字节写入*******************************************void Single_WriteL3G4200D(uchar REG_Address,uchar REG_data){L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress); //发送设备地址+写信号L3G4200D_SendByte(REG_Address); //内部寄存器地址,请参考中文pdf22页L3G4200D_SendByte(REG_data); //内部寄存器数据,请参考中文pdf22页L3G4200D_Stop(); //发送停止信号}//单字节读取*****************************************uchar Single_ReadL3G4200D(uchar REG_Address){ uchar REG_data;L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress); //发送设备地址+写信号L3G4200D_SendByte(REG_Address); //发送存储单元地址,从0开始L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress+1); //发送设备地址+读信号REG_data=L3G4200D_RecvByte(); //读出寄存器数据L3G4200D_SendACK(1);L3G4200D_Stop(); //停止信号return REG_data;}//*************************************************/*void Multiple_readL3G4200D(void){ uchar i;L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress); //发送设备地址+写信号L3G4200D_SendByte(0x28); //发送存储单元地址L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress+1); //发送设备地址+读信号for (i=0; i<6; i++) //连续读取6个地址数据,存储中BUF{BUF[i] = L3G4200D_RecvByte()&0xFF; //BUF存储数据if (i == 5){L3G4200D_SendACK(1); //最后一个数据需要回NOACK}else{L3G4200D_SendACK(0); //回应ACK}}L3G4200D_Stop(); //停止信号Delay5ms();}*///*****************************************************************//初始化L3G4200D,根据需要请参考pdf,第27页,进行修改************************void InitL3G4200D(){Single_WriteL3G4200D(CTRL_REG1, 0x4f); // 0x0f=00001111 200hz普通模式X Y Z 启用。

L3G4200D中文数据手册

L3G4200D中文数据手册

3.2
焊接信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4
数字主要块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.1 框图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
L3G4200D
MEMS运动传感器: 三轴数字输出陀螺仪
特点
■ 三种可选全尺度
(±250/500/2000 dps)
■ I2 C / SPI数字输出接口 ■ 16比特率值的数据输出 ■ 两个数字输出线(中断和
LGA-16 (4x4x1 mm)
dataready)
■ 集成低和高通滤波器的用户
可选带宽
■ Embedded自检 ■ 宽电源电压,2.4 V到3.6 V ■ 低压兼容IOs, 1.8 V ■ 嵌入省电和睡眠模式 ■ 高冲击生存能力 ■ 扩展的工作温度范围
1.1 管脚描述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2
机械和电气规范. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1 2.2 2.3 机械特性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 电气特性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 通讯接口特性. . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

MD204L使用手册j简体中文版EW02CN02-081215

MD204L使用手册j简体中文版EW02CN02-081215
1.1 功能 .................................................................................................................................................. 3 1.2 一般规格 .......................................................................................................................................... 3 1.3 各部分名称 ...................................................................................................................................... 4 1.4 外型尺寸及安装方法 ...................................................................................................................... 6
eviewmd204l用户手册第一章产品概述11功能12一般规格13各部分名称14外形尺寸及安装方法第二章编辑软件tp20021tp200概述211关于工程和画面212画面内容213tp200使用流程22编辑用户画面221创建工程222制作基本画面223md204l系统参数10224文本11225动态文本12226功能键画面跳转13227数据显示17228数据设定20229指示灯212210功能键开关量控制252211272212报警列表282213报警列表2923保存工程3024下载画面31第三章md204l操作方法31联机通讯3232切换画面3233系统口令3334修改数据3335开关量控制eviewmd204l用户手册第四章与plc的连接方法41三菱fx系列3742西门子s7200系列3843欧姆龙c系列3944光洋s系列4045施耐德neza系列4146台达dvp系列4247松下fp系列4348lgmasterk系列4449facon永宏系列eviewmd204l用户手册第一章产品概述11功能md204l是可编程序控制器的小型人机界面以文字或指示灯等形式监视修改plc内部寄存器或继电器的数值及状态

详解ARM处理器中的37个寄存器

详解ARM处理器中的37个寄存器

详解ARM处理器中的37个寄存器作者:雪狼发布时间:March 22, 2010 分类:程序编程ARM处理器共有37个寄存器。

其中包括:31个通用寄存器,包括程序计数器(PC)在内。

这些寄存器都是32位寄存器。

6个状态寄存器。

这些寄存器都是32位寄存器。

ARM处理器共有7种不同的处理器模式,每一种模式中都有一组相应的寄存器组。

在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。

在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。

通用寄存器:通用寄存器分为以下三类:备份寄存器、未备份寄存器、程序计数器PC未备份寄存器:未备份寄存器包括R0-R7。

对于每一个未备份寄存器来说,所有处理器模式下都是使用同一个物理寄存器。

未备份寄存器没有被系统用于特别的用途,任何可采用通用寄存器的场合都可以使用未备份寄存器。

备份寄存器:对于R8-R12备份寄存器来说,每个寄存器对应两个不同的物理寄存器。

系统为将备份寄存器用于任何的特殊用途,但是当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理非常迅速。

对于R13,R14备份寄存器来说,每个寄存器对应六个不同的物理寄存器,其中的一个是系统模式和用户模式共用的;另外的五个对应于其他的五种处理器模式。

采用下面的记号来区分各个物理寄存器:R13_其中MODE可以是下面几种模式之一:usr,svc,abt,und,irq,fiq程序计数器PC可以作为一般的通用寄存器使用,但有一些指令在使用R15时有一些限制。

由于ARM采用了流水线处理器机制,当正确读取了PC的值时,该值为当前指令地址值加上8个字节。

也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。

由于ARM指令是字对齐的,PC值的第0位和第一位总为0。

[整理]寄存器详细讲解

[整理]寄存器详细讲解

[整理]寄存器详细讲解-------------寄存器32位CPU的寄存器结构寄存器是中央处理器内的组成部分。

寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。

在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。

在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

目录编辑本段寄存器英文名称:Register寄存器寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。

寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个“8 位元寄存器”或“32 位元寄存器”。

寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。

寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。

更适当的是称他们为“架构寄存器”。

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

寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

编辑本段分类数据寄存器- 用来储存整数数字(参考以下的浮点寄存器)。

在某些简单/旧的CPU,特别的数据寄存寄存器器是累加器,作为数学计算之用。

地址寄存器- 持有存储器地址,以及用来访问存储器。

在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。

通用目的寄存器(GPRs)- 可以保存数据或地址两者,也就是说他们是结合数据/地址寄存器的功用。

浮点寄存器(FPRs) - 用来储存浮点数字。

常数寄存器- 用来持有只读的数值(例如0、1、圆周率等等)。

向量寄存器- 用来储存由向量处理器运行SIMD(Single Instruction, Multiple Data)指令所得到的数据。

特殊目的寄存器- 储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。

采用传感器集线器提高应用的性能和功耗

采用传感器集线器提高应用的性能和功耗

采用传感器集线器提高应用的性能和功耗传感器已成为许多系统中的常规功能。

它们与许多其他外围设备一起存在,以增加可以纳入系统正在完成的工作的环境输入范围。

但是,在某些系统中,传感器的数量可能会压倒其他更传统的外围设备,并且可能比其他外围设备更能影响性能。

与智能手机相比,这不是一个问题。

从一个或两个具有专用功能的传感器,移动平台大大增加了传感器的数量,并向那些梦想有新事物的有进取心的开发人员开放了传感器数据。

建筑师在整合传感器时可能从未设想过这些应用。

因此,当直接连接到应用处理器(AP)时,传感器(包括用于屏幕的触摸传感器)变得更加沉重。

借助用于环境光,接近度,加速度,旋转甚至磁场,压力,湿度,辐射和化学传感的传感器,可以有效地从AP卸载传感器的管理。

如果AP需要每一块传感器数据,那么除了用这些数据充斥AP之外别无选择。

然而,传感器,如果他们正在工作,只需报告他们看到的内容。

从最基本的角度来看,它们并不意味着对数据的意义- 这就是处理器的作用。

传感器在过去几年变得更加智能化,但传感器的决策范围仍然有限。

之后,某些处理器必须决定与数据有关的内容(如果有的话)。

虽然AP最终可能会使用相关数据,但只是为了跟踪数据并确定相关内容,这可能是一项相当大的工作。

正如专用电路处理无线电,视频,图形和其他密集功能一样,传感器集线器可以通过屏蔽AP免受可能被忽略的传感器事件来释放处理器带宽。

通过允许AP进入睡眠状态,即使传感器仍处于活动状态,传感器集线器也可以延长电池寿命。

传感器接口传感器具有多种接口,用于与系统的其余部分进行数据通信。

大多数人使用SPI或I²C等外设总线方案来传输数据,但这就是大部分共性的结束。

我们将看几个例子,这些例子可以说明为什么可以保证传感器集线器。

一个例子是来自Kionix的加速度计KXTIK-1004,它展示了基本和更复杂的相互作用。

它碰巧有一个I²C接口,虽然有SPI变种。

两轮平衡小车说明书

两轮平衡小车说明书

电气电子工程学院自主创新作品两轮平衡小车摘要两轮自平衡小车具有体积小、结构简单、运动灵活的特点,适用于狭小和危险的工作空间,在安防和军事上有广泛的应用前景。

两轮自平衡小车是一种两轮左右平衡布置的,像传统倒立摆一样,本身是一种自然不稳定体,其动力学方程具有多变量、非线性、强耦合、时变、参数不确定性等特性,需要施加强有力的控制手段才能使其保持平衡。

本作品采用STM32单片机作为主控制器,用一个陀螺仪传感器来检测车的状态,通过dvr8800控制小车两个电机,来使小车保持平衡状态,通过2.4G模块无线通讯进行遥控来控制小车运行状态。

关键词:智能小车;单片机;陀螺仪。

目录一.前言 (4)一.两轮平衡车的平衡原理 (4)2.1 平衡车的机械结构..........................................................................错误!未定义书签。

2.2 两轮车倾倒原因的受力分析 (4)2.3 平衡的方法 (5)三.系统方案分析与选择论证 (5)3.1 系统方案设计 (5)3.1.1 主控芯片方案 (5)3.1.2 姿态检测传感器方案 (6)3.1.3 电机选择方案 (6)3.2 系统最终方案 (7)四.主要芯片介绍和系统模块硬件设计 (7)4.1.STM32单片机简介(stm32rbt6) (7)4.2.陀螺仪传感器 (8)4.3.TB6612 (8)4.4.编码器 (9)4.5. 主控电路 (9)4.6 电机驱动电路 (10)五.系统软件设计 (11)5.1 PID概述 (11)5.2 数字PID算法 (12)5.3 PID控制器设计 (13)六.硬件电路 (14)七.制作困难 (15)八.结论 (16)九.参考文献 (16)一.前言应用意义。

自平衡车巧妙地利用地心引力使其自身保持平衡,并使得重力本身成为运动动能的提供者,载重越大,行驶动能也就越大,具有环保的特点(胡春亮等,2007)。

L3G4200D 51单片机IIC 测试程序

L3G4200D  51单片机IIC 测试程序

//这是L3G4200D 51单片机IIC 测试程序//这是1602 头文件保存为1602.h#define DataPort P0 //LCD1602数据端口sbit LCD_RS=P2^4; //LCD1602命令端口sbit LCD_RW=P2^5; //LCD1602命令端口sbit LCD_EN=P2^6; //LCD1602命令端口#include <INTRINS.H>#define uchar unsigned charvoid WaitForEnable(void){DataPort=0xff;LCD_RS=0;LCD_RW=1;_nop_();LCD_EN=1;_nop_();_nop_();while(DataPort&0x80);LCD_EN=0;}void WriteCommandLCD(uchar CMD,uchar Attribc) {if(Attribc)WaitForEnable();LCD_RS=0;LCD_RW=0;_nop_();DataPort=CMD;_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;}void WriteDataLCD(uchar dataW){WaitForEnable();LCD_RS=1;LCD_RW=0;_nop_();DataPort=dataW;_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;}void InitLcd(){WriteCommandLCD(0x38,1);WriteCommandLCD(0x08,1);WriteCommandLCD(0x01,1);WriteCommandLCD(0x06,1);WriteCommandLCD(0x0c,1);}void DisplayOneChar(uchar X,uchar Y,uchar DData) {Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCD(X,0);WriteDataLCD(DData);}//下面是主程序部分//*************************************** // L3G4200D三轴陀螺仪IIC测试程序// 使用单片机STC89C51// 晶振:11.0592M// 显示:LCD1602// 编译环境Keil uVision2// 参考宏晶网站24c04通信程序// 时间:2011年3月1日//**************************************** #include <reg52.h>#include "1602.h"#include <math.h>#include <stdio.h>#include <INTRINS.H>#define uchar unsigned char#define uint unsigned intsbit SCL=P1^0 ; //IIC时钟引脚定义sbit SDA=P1^1 ; //IIC数据引脚定义//********************#define WHO_AM_I 0x0F#define CTRL_REG1 0x20 // 0010 0000#define CTRL_REG2 0x21#define CTRL_REG3 0x22#define CTRL_REG4 0x23#define CTRL_REG5 0x24#define OUT_X_L 0x28#define OUT_X_H 0x29#define OUT_Y_L 0x2A#define OUT_Y_H 0x2B#define OUT_Z_L 0x2C#define OUT_Z_H 0x2D#define SlaveAddress 0xD2 //定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改typedef unsigned char BYTE;typedef unsigned short WORD;BYTE BUF[8]; //接收数据缓存区long temp;uchar ge,shi,bai,qian,wan; //显示变量int dis_data;//变量//int temp;void delay(unsigned int k);void InitL3G4200D(uchar ); //初始化L3G4200Dvoid conversion(uint temp_data);void Single_WriteL3G4200D(uchar REG_Address,uchar REG_data); //单个写入数据uchar Single_ReadL3G4200D(uchar REG_Address); //单个读取内部寄存器数据void Delay5ms();//void Multiple_readL3G4200D(void);//------------------------------------void Delay5us();void L3G4200D_Start();void L3G4200D_Stop();void L3G4200D_SendACK(bit ack);void L3G4200D_RecvACK();void L3G4200D_SendByte(BYTE dat);BYTE L3G4200D_RecvByte();void display_x();void display_y();void display_z();//-----------------------------------//********************************************************* void conversion(uint temp_data){temp_data*=0.875;wan=temp_data/10000+0x30 ;temp_data=temp_data%10000; //取余运算qian=temp_data/1000+0x30 ;temp_data=temp_data%1000; //取余运算bai=temp_data/100+0x30 ;temp_data=temp_data%100; //取余运算shi=temp_data/10+0x30 ;temp_data=temp_data%10; //取余运算ge=temp_data+0x30;}/*******************************/void delay(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}/*****************************************************************延时5微秒(STC90C52RC@12M)不同的工作环境,需要调整此函数,注意时钟过快时需要修改当改用1T的MCU时,请调整此延时函数**************************************/void Delay5us(){_nop_();_nop_();_nop_();_nop_();}/**************************************延时5毫秒(STC90C52RC@12M)不同的工作环境,需要调整此函数当改用1T的MCU时,请调整此延时函数**************************************//*void Delay5ms(){WORD n = 560;while (n--);}*//**************************************起始信号**************************************/ void L3G4200D_Start(){SDA = 1; //拉高数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 0; //产生下降沿Delay5us(); //延时SCL = 0; //拉低时钟线}/**************************************停止信号**************************************/ void L3G4200D_Stop(){SDA = 0; //拉低数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 1; //产生上升沿Delay5us(); //延时}/**************************************发送应答信号入口参数:ack (0:ACK 1:NAK)**************************************/void L3G4200D_SendACK(bit ack){SDA = ack; //写应答信号SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}/**************************************接收应答信号**************************************/void L3G4200D_RecvACK(){SCL = 1; //拉高时钟线Delay5us(); //延时while(SDA==1);SCL = 0; //拉低时钟线Delay5us(); //延时}/**************************************向IIC总线发送一个字节数据**************************************/void L3G4200D_SendByte(BYTE dat){BYTE i;for (i=0; i<8; i++) //8位计数器{SDA = dat&0x80; //送数据口dat=dat<<1;SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}L3G4200D_RecvACK();}/**************************************从IIC总线接收一个字节数据**************************************/BYTE L3G4200D_RecvByte(){BYTE i;BYTE dat = 0;SDA = 1; //使能内部上拉,准备读取数据,for (i=0; i<8; i++) //8位计数器{dat <<= 1; //这里的1是00000001SCL = 1; //拉高时钟线Delay5us(); //延时dat |= SDA; //读数据SDA 00000000 or 00000001SCL = 0; //拉低时钟线Delay5us(); //延时}return dat;}//单字节写入*******************************************void Single_WriteL3G4200D(uchar REG_Address,uchar REG_data){L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress); //发送设备地址+写信号L3G4200D_SendByte(REG_Address); //内部寄存器地址,请参考中文pdf22页L3G4200D_SendByte(REG_data); //内部寄存器数据,请参考中文pdf22页L3G4200D_Stop(); //发送停止信号}//单字节读取*****************************************uchar Single_ReadL3G4200D(uchar REG_Address){ uchar REG_data;L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress); //发送设备地址+写信号L3G4200D_SendByte(REG_Address); //发送存储单元地址,从0开始L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress+1); //发送设备地址+读信号REG_data=L3G4200D_RecvByte(); //读出寄存器数据L3G4200D_SendACK(1);L3G4200D_Stop(); //停止信号return REG_data;}//*************************************************/*void Multiple_readL3G4200D(void){ uchar i;L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress); //发送设备地址+写信号L3G4200D_SendByte(0x28); //发送存储单元地址L3G4200D_Start(); //起始信号L3G4200D_SendByte(SlaveAddress+1); //发送设备地址+读信号for (i=0; i<6; i++) //连续读取6个地址数据,存储中BUF{BUF[i] = L3G4200D_RecvByte()&0xFF; //BUF存储数据if (i == 5){L3G4200D_SendACK(1); //最后一个数据需要回NOACK}else{L3G4200D_SendACK(0); //回应ACK}}L3G4200D_Stop(); //停止信号Delay5ms();}*///*****************************************************************//初始化L3G4200D,根据需要请参考pdf,第27页,进行修改************************void InitL3G4200D(){Single_WriteL3G4200D(CTRL_REG1, 0x4f); // 0x0f=00001111 200hz普通模式X Y Z 启用。

汇编-32位寄存器的功能及其使用

汇编-32位寄存器的功能及其使用

汇编-32位寄存器的功能及其使用2011-06-10 12:16汇编-32位寄存器的功能及其使用总体上来讲32位寄存器可以分为一下几种:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)首先介绍一下易失性一些寄存器在函数中常常是变化的,而另外一些却是不变的。

这是编译器所决定的。

因为寄存器是不会自动保存的(虽然有些汇编语言会自动保存,但是x86 是不会的),所以编码时要自己保存。

这句话的意思是:当一个函数被调用,是不保证在函数返回时,易失寄存器上的值不变的;但是函数必须负责保存非易失寄存器中的值。

微软编译器的寄存器使用习惯如下:1) 易失寄存器: ecx, edx2) 非易失寄存器 : ebx, esi, edi, ebp3) 其他特殊寄存器 : eax, esp (discussed later)eaxEax 是一个32 为通用寄存器,一般的用途有两个:保存函数的返回值或者作为计算用的专用寄存器。

在技术上来说,eax 是一个易失寄存器,因为他的值是不能保存的,eax 的值会在函数返回前设置为函数的返回值。

除了ESP 寄存器,EAX 的这个功能(即保存返回值)可能是最重要的值得被记住的。

eax 还会在数据计算时要用,比如乘法和除法。

这种用法我们会在指令使用一文讲解。

下面是C 语言中函数返回的例子:return 3; // 返回3对应的汇编语言:mov eax, 3 ; 置EAX=3ret ; 返回ebxEbx 是一个非易失通用寄存器。

它没有特定的用途,但是常被置为一个函数中常用的值(如0 ),以此来加快计算速度。

ecxEcx 是一个易失通用寄存器。

常被用作函数的参数或者是循环的计数器。

__fastcall 的函数会将第一和第二个参数放置在ecx 和edx 寄存器中。

MODBUS读写器功能及寄存器说明

MODBUS读写器功能及寄存器说明

MODBUS读写器功能及寄存器说明一、MODBUS读写器适用S50、S70射频卡。

二、MODBUS读写器能通过MODBUS-RTU方式与PLC通信,MODBUS读写器为从站、PLC为主站,波特率为19200,N,8,1。

需要实现即时刷卡功能,可用PLC设备每隔0.2秒读卡一次。

三、寄存器说明:40001:存放读卡器的站号(机号),可读可写,写可以更改站号,只能用06功能码,可用03寄存器来读或连读。

40002:在读写型的MODBUS读写器为无效寄存器。

40003:驱动读卡器响声,只能用06功能码,可用03寄存器来读或连读。

40004至40007寄存器保留,暂不使用40008寄存器为读写卡控制寄存器:只能用06功能码写,可用03寄存器来读或连读。

40009至40010共2个寄存器存放IC卡卡号(4个字节)。

40011至40034共24个寄存器对应于IC卡的扇区内48字节内容。

四、数据报文格式在数据报文层面,寄存器起始地址都是从0开始。

数据报文格式:设备地址+功能码+起始地址+寄存器个数+校验码。

其中起始地址是从0开始的。

如:从站号2读卡器读取40009开始的两个寄存器数据的报文发送:设备地址功能码起始地址寄存器个数校验码(CRC16)02 03 00 08 00 02 45 FA成功返回:设备地址功能码数据长度数据信息校验码(CRC16)02 03 04 28 5B 90 BB 9D 33其中:285B 90BB 为卡的内码数据,寄存器内高字节在前。

所以:正码为:5B28BB90,转换成十进制为:;反码为:90BB285B, 转换成十进制为:;IC卡应用于MODBUS读写器操作步骤:五、使用密码卡更新MODBUS读写器的校验密码,密码卡制作方法如下:在PC端运行IC卡发卡软件;➢选取1-14扇区的任意一个区号(MODBUS读写器只使用一个扇区),自己设定IC卡的A、B密码,将设定的扇区跟密码信息保存起来,方便调试;➢连接USB发卡器,发卡器需装驱动,用供应商提供的驱动完成安装;➢将IC卡放在USB发卡器感应区,点击制作密码卡按键,制作成功按照提示,将密码卡拿到MODBUS读写器感应区刷卡更新校验密码;其他IC卡必须要初始化(密码卡除外),方法如下:➢选填好之前制作密码卡时设定的区号跟卡的A/B密码;➢连接USB发卡器,发卡器需装驱动,用供应商提供的驱动完成安装;➢将IC卡放在USB发卡器感应区,点击初始化IC卡按键,初始化成功的IC卡即可拿到刷过对应密码卡的MODBUS读写器上进行读写操作;Modbus读写器操作初始化成功的IC卡六、读、写卡说明➢写卡操作:第一步,用06或10(十六进制)指令更新40011至40034寄存器内容(顺序对应卡内48字节内容),如果只用到40011到40034中的几个寄存器,其他寄存器可以不理会(不需要更新)。

三菱plc常用的指令剖析

三菱plc常用的指令剖析

以下是三菱plc常用的指令,还有不懂的可以问我一程序流程控制指令—FNC00~0900 CJ 条件转移01 CALL 子程序调用02 SRET 子程序返回03 IRET 中断返回04 EI 开中断05 DI 关中断06 FEND 主程序结束07 WDT 监控定时器刷新08 FOR 循环开始09 NEXT 循环结束二传送、比较指令—FNC10~19 BIN----二进制BCD----十进制10 CMP 比较11 ZCP 区间比较12 MOV 传送13 SMOV BCD码移位传送14 CML 取反传送15 BMOV 数据块传送(n点→n点)16 FMOV 多点传送(1点→n点)17 XCH 数据交换,(D0)←→(D2)18 BCD BCD变换,BIN→BCD19 BIN BIN变换,BCD→BIN三算术、逻辑运算指令—FNC20~29 BIN----二进制BCD----十进制20 ADD BIN加法21 SUB BIN减法22 MUL BIN乘法23 DIV BIN除法24 INC BIN加一25 DEC BIN减一26 W AND 字与27 WOR 字或28 WXOR 字异或29 NEG 求BIN补码四循环、移位指令—FNC30~3930 ROR 循环右移31 ROL 循环左移32 RCR 带进位循环右移33 RCL 带进位循环左移34 SFTR 位右移35 SFTL 位左移36 WSFR 字右移37 WSFL 字左移38 SFWR FIFO写入39 SFRD FIFO读出五数据处理指令—FNC40~4940 ZRST 区间复位41 DECO 解码42 ENCO 编码43 SUM 求置ON位总数44 BON ON位判别45 MEAN 求平均值46 ANS 信号报警器标志置位47 ANR 信号报警器标志复位48 SQR BIN平方根49 FLT BIN整数→BIN浮点数六高速处理指令—FNC50~5950 REF 输入输出刷新51 REFF 输入滤波时间常数调整52 MTR 矩阵输入53 HSCS 高速记数器比较置位54 HSCR 高速记数器比较复位55 HSZ 高速记数器区间比较56 SPD 速度检测57 PLSY 脉冲输出58 PWM 脉冲宽度调制59 PLSR 带加减速功能的脉冲输出七方便指令—FNC60~6960 IST 状态初始化61 SER 数据搜索62 ABSD 绝对值凸轮顺控63 INCD 增量凸轮顺控64 TTMR 示教定时器65 STMR 专用定时器—可定义66 ALT 交替输出67 RAMP 斜坡输出68 ROTC 旋转工作台控制69 SORT 数据排序八外部I/O设备指令—FNC70~7970 TKY 10键输入71 HKY 16键输入72 DSW 拨码开关输入73 SEGD 七段译码74 SEGL 带锁存的七段码显示75 ARWS 方向开关76 ASC ASCII码转换77 PR 打印输出78 FROM 读特殊功能模块79 TO 写特殊功能模块九外围设备指令—FNC80~8980 RS RS-232C串行通讯81 PRUN 并行运行82 ASCI 十六进制→ASCII83 HEX ASCII→十六进制84 CCD 校验码85 VRRD 电位器读入86 VRSC 电位器设定88 PID PID控制十F2外部模块指令—FNC90~9990 MNET F-16N, Mini网91 ANRD F2-6A, 模拟量输入92 ANW* *2-6*, 模拟量输出93 RMST F2-32RM, 启动RM94 RMWR F2-32RM, 写RM95 RMRD F2-32RM, 读RM96 RMMN F2-32RM, 监控RM97 BLK F2-30GM, 指定块98 MCDE F2-30GM, 机器码十一浮点数运算指令—FNC110~132110 ECMP BIN浮点数比较111 EZCP BIN浮点数区间比较118 EBCD BIN浮点数→BCD浮点数119 EBIN BCD浮点数→BIN浮点数120 EADD BIN浮点数加法121 ESUB BIN浮点数减法122 EMUL BIN浮点数乘法123 EDIV BIN浮点数除法127 ESQR BIN浮点数开方129 INT BIN浮点数→BIN整数130 SIN BIN浮点数正弦函数(SIN)131 COS BIN浮点数余弦函数(COS)132 TAN BIN浮点数正切函数(TAN)十二交换指令—FNC147147 SW AP 高低字节交换十三定位指令—FNC155~159155 ABS 读当前绝对值位置156 ZRN 返回原点157 PLSY 变速脉冲输出158 DRVI 增量式单速位置控制159 DRV A 绝对式单速位置控制十四时钟运算指令—FNC160~169160 TCMP 时钟数据比较161 TZCP 时钟数据区间比较162 TADD 时钟数据加法163 TSUB 时钟数据减法166 TRD 时钟数据读出167 TWR 时钟数据写入169 HOUR 小时定时器十五变换指令—FNC170~177170 GRY 二进制数→格雷码171 GBIN 格雷码→二进制数176 RD3A 读FXon-3A模拟量模块177 WR3A 写FXon-3A模拟量模块十六触点比较指令—FNC224~246224 LD= (S1)=(S2)时运算开始之触点接通225 LD> (S1)>(S2)时运算开始之触点接通226 LD< (S1)<(S2)时运算开始之触点接通228 LD<> (S1)≠(S2)时运算开始之触点接通229 LD≤ (S1)≤(S2)时运算开始之触点接通230 LD≥ (S1)≥(S2)时运算开始之触点接通232 AND= (S1)=(S2)时串联触点接通233 AND> (S1)>(S2)时串联触点接通234 AND< (S1)<(S2)时串联触点接通236 AND<> (S1)≠(S2)时串联触点接通237 AND≤ (S1)≤(S2)时串联触点接通238 AND≥ (S1)≥(S2)时串联触点接通240 OR= (S1)=(S2)时并联触点接通241 OR> (S1)>(S2)时并联触点接通242 OR< (S1)<(S2)时并联触点接通244 OR<> (S1)≠(S2)时并联触点接通245 OR≤ (S1)≤(S2)时并联触点接通246 OR≥ (S1)≥(S2)时并联触点接通提问人的追问2011-04-13 14:16楼主三菱PLC 编程手册目录第一章FX1N PLC编程简介1.1 FX1N PLC 简介 (1)1.1.1 FX1N PLC 的提出 (1)1.1.2 FX1N PLC 的特点 (1)1.1.3 FX1N PLC 产品举例 (1)1.1.4 关于本手册 (1)1.2 编程简介 (1)1.2.1 指令集简介 (2)1.2.2 资源集简介 (7)1.2.3 编程及应用简介 (9)第二章基本逻辑指令说明及应用2.1 基本逻辑指令一览表 (10)2.1 [LD],[LDI],[LDP],[LDF],[OUT]指令 (10)2.2.1 指令解说 (10)2.2.2 编程示例 (10)2.3[AND],[ANI],[ANDP],[NDF]指令 (11)2.3.1 指令解说 (11)2.3.2 编程示例 (12)2.4 [OR],[ORI],[ORP],[ORF]指令 (13)2.4.1 指令解说 (13)2.4.2 编程示例 (13)2.5 [ANB],[ORB]指令 (14)2.5.1 指令解说 (14)2.5.2 编程示例 (14)2.6 [INV]指令 (15)2.6.1 指令解说 (15)2.6.2 编程示例 (15)2.7 [PLS],[PLF]指令 (16)2.7.1 指令解说 (16)2.7.2 编程示例 (17)2.8 [SET],[RST]指令 (17)2.8.1 指令解说 (17)2.8.2 编程示例 (18)2.9 [NOP],[END]指令 (18)2.9.1 指令解说 (18)2.9.2 编程示例 (18)2.10 [MPS],[MRD],[MPP] 指令 (18)2.10.1 指令解说 (18)2.10.2 编程示例 (19)2.11[MC],[MCR]指令 (21)2.11.1指令解说 (21)2.11.2 编程示例 (21)第三章步进顺控指令说明及应用3.1步进顺控指令说明 (22)3.1.1 指令解 (22)3.1.2 编程示例 (25)3.2 步进顺控指令应用 (25)3.2.1 单一流程示例 (25)3.2.2 选择性分支与汇合示例 (26)3.2.3 并行分支与汇合示例 (27)3.2.4 循环和跳转示例 (29)第四章功能指令说明及应用4.1 功能指令一览表 (31)4.2 程序流程 (33)4.2.1 条件跳转[CJ] (33)4.2.2 子程序调用[CALL] (35)4.2.3 子程序返回[SRET] (35)4.2.4 主程序结束[FEND] (36)4.2.5 循环范围开始[FOR] (37)4.2.6 循环范围结束「NEXT] (37)4.3 传送与比较 (38)4.3.1 比较指令[CMP] (39)4.3.2 区域比较[ZCP] (40)4.3.3 传送指令[MOV] (41)4.3.4 反向传送[CML] (43)4.3.5 BCD 转换[BCD] (44)4.3.6 BIN 转换[BIN] (45)4.4 四则逻辑运算 (46)4.4.1 BIN 加法运算[ADD] (46)4.4.2 BIN 减法运算[SUB] (47)4.4.3 BIN 乘法运算[MUL] (48)4.4.4 BIN 除法运算[DIV] (49)4.4.5 BIN 1 [INC]................................... .. (50)4.4.6 BIN 减1 [DEC] (50)4.4.7 逻辑与[WAND] (51)4.4.8 逻辑或[WOR] (51)4.4.9 逻辑异或[WXOR] (52)4.4.10 求补[NEG] (53)4.4.11 BIN 开方运算[SQR] (53)4.5 循环与移位 (54)4.5.1 循环右移[ROR] (54)4.5.2 循环左移[ROL] (55)4.5.3带进位循环右移[RCR] .............................................. (56)4.5.4 带进位循环左移[RCL] (58)4.6 浮点数运算 (59)4.6.1 二进制浮点数比较「DECMP] (59)4.6.2二进制浮点数区域比较[DEZCP] (60)4.6.3 二进制浮点数转十进制浮点数[DEBCD] (61)4.6.3 十进制浮点数转二进制浮点数[DEBIN] (62)4.6.5 二进制浮点数加法[DEADD] (62)4.6.6 二进制浮点数减法[DESUB] (63)4.6.7 二进制浮点数乘法「DEMUL] (64)4.6.8 二进制浮点数除法「DEDIV] (65)4.6.9 二进制浮点数开方「DESQR] (66)4.6.10 二进制浮点数转BIN 整数变换「INT] (67)4.6.11 BIN 整数转二进制浮点数「FLT] (68)4.7 触点比较指令 (69)4.7.1 接点比较指令「LD※] (69)4.7.2 接点比较指令「AND※] (70)4.7.3接点比较指令「OR※] (72)4.8 功能指令的基本规则 (73)4.8.1 .功能指令的表示与执行形式................................ . (73)4.8.2 功能指令内的数值处理 (75)4.8.3 利用变址寄存器的操作数修改 (77)第五章资源说明及应用5.1 变址寄存器V 、Z 说明及应用 (80)5.1.1 变址寄存器V 、Z 说明 (80)5.1.2 变址寄存器在梯形图中的应用 (80)5.1.3 使用变址功能的注意事项 (81)5.2 输入输出继电器X 、Y 说明及应用 (82)5.2.1 输入输出继电器X 、Y 说明 (82)5.2.2输入输出继电器应用 (83)5.3 辅助中间继电器M 说明及应用 (85)5.3.1 辅助中间继电器M 说明 (85)5.3.2 辅助中间继电器M 应用 (85)5.4 状杰继申器S 说明及应用 (87)5.4.1 状态继电器S 说明 (87)5.4.2 状态继电器S 应用 (88)5.5 定时器T 说明及应用 (88)5.5.1 定时器T 说明 (88)5.5.2 定时器T 应用 (90)5.6计数器C 说明及应用 (92)5.6.1 16 bit 计数器C 说明 (92)5.6.2 32 bit 计数器C 说明 (93)5.6.3 16 bit 计数器C 应用 (95)5.6.4 32 bit 计数器应用 (96)5.7数据寄存器D 说明及应用 (97)5.7.1 数据寄存器D 说明 (97)5.7.2 数据寄存器D 应用 (99)5.8程序位置指针P 说明及应用 (100)5.8.1 程序位置指针P 说明 (100)5.8.2 程序位置指针P 应用 (100)5.9常数标记K 、H 详细说明 (102)5.9.1 常数标记K (102)5.9.2 常数标记H (103)5.10 特殊软元件说明 (103)第六章PID指令说明及应用6.1 PID 运算 (104)6.1.1 (104)6.1.2 应用示例 (110)第一章FX1N PLC 编程简介1.1 FX1N PLC 简介1.1.1 FX1N PLC 的提出基于以下观点,提出FX1N PLC 的概念:①、软件和硬件独立设计。

三轴数字陀螺仪篇

三轴数字陀螺仪篇
2
还是刚才的那个行人,可是这回的情况不同了,这次他最后摔倒了。这个行人,他起初是在正常行走,一不留神,脚踩到一个西瓜皮,这个人挣扎了几下却无济于事,结果就摔到了。这种现象归类为自动跳位系统现象,如下面的流程图3-2所示。
图3-2 自纠正跳位系统图
当稳定的系统受到外界干扰的时候,系统就面临着失稳的风险。如果系统的自纠正能力在某一方面不是很强,那么它就会被另外的稳定态所代替。在这个例子里,正常行走的行人就是稳定态(A)。突然踩到一个西瓜皮代表一个很强的外界干扰因素随机性地进入系统,行人马上会四肢翻腾,这个翻腾的过程就是过度态。行人在拼命保持自己的重心,但是最后他还是摔倒了。摔倒后,坐在了地上就是稳定态(B)。我们把踩到西瓜皮的瞬间归类为跳出段,把四肢翻腾但是仍然倒下的过程归类为跳位段。
机器人衡态调整
三轴数字陀螺仪篇
北京森汉科技有限公司

一.硬件介绍
1
如下图1-1所示,三轴数字陀螺仪L3G4200D芯片X、Y、Z三轴互相正交分布。
图1-1 坐标方向及背面图
图1-1中明确标出了L3G4200D芯片X、Y、Z轴的坐标方向及背面图。本陀螺仪芯片可供用户选择其尺度量程,量程范围从 ±250 dps ~ ±2000 dps,低量程数值用于高精度慢速运动测量,而高量程则用于测量超快速的手势和运动。这款器件提供一个16位数据输出,以及可配置的低通和高通滤波器等嵌入式数字功能。就算时间推移或温度变化,这款器件仍然保持连续稳定的输出。
图3-3 陀螺仪应用系统图
1
在机器人行走过程中,当处在双腿着地某一姿态时,循环启动陀螺仪周期性地采集三轴数字陀螺仪的三轴数字值,紧接着存储在数组L3G4200D_dis_data[3]变量当中,并比较数组L3G4200D_dis_data[3]与对应设定角速度幅限值,依据是否超幅限值改变相应从0到11号舵机的值,调整机器人姿势使其保持当前姿态稳定。当机器人保持在其当前姿态时,就退出循环,继续行走,同样也依旧进入下一个姿态当中去。若在某一姿态的平衡状态被迫改变,就会同样进入循环当中,及时修正机器人的姿势。本调整程序工作逻辑方式是,快速反馈,快速回程。

L3G4200D中文寄存器功能详解

L3G4200D中文寄存器功能详解

一、寄存器
1.控制寄存器
CTRL_REG1(地址:20H):选择输出数据速率,带宽,X、Y、Z轴使能
DR1-DR0 输出速率选择,BW1-BW0带宽选择见表
ODR 为数据输出频率,
Cut_off为滤除的频率
CTRL_REG2(地址:21H):选择高通滤波模式和高通截止频率
CTRL_REG3(地址:22H):中断使能
CTRL_REG3
CTRL_REG4(地址:23H):选择量程
CTRL_REG5(地址:24H):FIFO使能,高通滤波使能
STATUS_REG(地址:27H):状态寄存器,ZYXDA=1时,数据已准备好,可读。

FIFO_CTRL_REG(地址:2EH):FIFO模式选择
2.数据寄存器(共6个,每个轴的角速度由两个字节组成,分成高位和低位,
数据以二进制补码形式存储)
OUT_X_L(地址:28H):X轴角速度低位
OUT_X_H(地址:29H):X轴角速度高位
OUT_Y_L(地址:2AH):Y轴角速度低位
OUT_Y_H(地址:2BH):Y轴角速度高位
OUT_Z_L(地址:2CH):Z轴角速度低位
OUT_Z_H(地址:2DH):Z轴角速度高位
二、程序思路
初始化:选择量程、高通滤波模式,设置中断使能等,对相应的控制寄存器进行写操作。

读数:首先读状态寄存器(STATUS_REG),若ZYXDA=1,则可以读数,否则等待。

为减小误差,程序连续读数20次,然后取平均值。

读写时序几乎和加速度传感器一致,参看陀螺仪的PDF文档。

寄存器

寄存器
AX(AH、AL):累加器。有些指令约定以AX(或AL)为源或目的寄存器。输入/输出指令必须通过AX或AL实现, 例如:端口为43H的内容读入CPU的指令为INAL,43H或INAX,43H。目的操作数只能是AL/AX,而不能是其他的寄 存器。
BX(BH、BL):基址寄存器。BX可用作间接寻址的寄存器和基寄存器,BH、BL可用作8位通用数据寄存器。
通用寄存器组包括AX、BX、CX、DX4个16位寄存器,用以存放16位数据或。也可用作8位寄存器。用作8位寄 存器时分别记为AH、AL、BH、BL、CH、CL、DH、DL。只能存放8位数据,不能存放。它们分别是AX、BX、CX、DX 的高八位和低八位。若AX=1234H,则AH=12H,AL=34H。通用寄存器通用性强,对任何指令,它们具有相同的功 能。为了缩短指令代码的长度,在8086中,某些通用寄存器用作专门用途。例如,串指令中必须用CX寄存器作为 计数寄存器,存放串的长度,这样在串操作指令中不必给定CX的寄存器号,缩短了串操作指令代码的长度。下面 一一介绍:
由电平触发的动作特点可知,在CLK高电平期间,Q端的状态跟随D端状态的改变而改变;CLK变成低电平以后, Q端将保持CLK变为低电平时刻D端的状态。
74HC175则是用CMOS边沿触发器组成的4位寄存器,根据边沿触发的动作特点可知,触发器输出端的状态仅仅 取决于CLK上升沿到达时刻D端的状态。可见,虽然74LS75和74HC175都是4位寄存器,但由于采用了不同结构类 型的触发器,所以动作特点是不同的。
按照功能的不同,可将寄存器分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能 并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出, 也可以串行输入、串行输出,还可以并行输入、串行输出,或串行输入、并行输出,十分灵活,用途也很广。

陀螺仪芯片手册L3G4200D亲手译

陀螺仪芯片手册L3G4200D亲手译
wjpccp亲译
L3G4200D MEMS 运动传感器: 超稳定的三轴数字输出陀螺仪
特点
■三种可选的全尺度(250/500/2000DPS) ■I2C/SPI 数字输出接口 ■16 比特率值的数据输出 ■8 位温度数据输出 ■两个数字输出线(中断和数据就绪) ■集成的低和高通滤波器与用户可选择带宽 ■超稳定的温度和时间 ■宽电源电压:2.4 V 至 3.6 V ■低电压兼容的 IOS(1.8 伏) ■嵌入省电和睡眠模式 ■嵌入式温度传感器 ■嵌入式 FIFO(先入现出堆栈) ■高冲击的生存能力 ■扩展的工作温度范围(-40℃至+85℃) ■ECOPACK® RoHS 和“绿色”兼容
5.2.2 SPI 写………………………………25 5.2.3 SPI 读三线模式…………………………26 6 输出寄存器映射…………………………27 7 寄存器的描述…………………………29 7.1 WHO_AM_I(0FH)……………………………… … 29 7.2 CTRL_REG1(20H)……………………………… 29 7.3 CTRL_REG2(21H)……………………………… 30 7.4 CTRL_REG3(22H)……………………………… 31 7.5 CTRL_REG4(23H)……………………………… 32 7.6 CTRL_REG5(24 小时)……………………………… 32 7.7 参考/ DATACAPTURE(25H)……………………34 7.8 OUT_TEMP(26H)……………………………… 34
应用
■游戏和虚拟现实输入设备 ■运动控制与人机界面(人机接口) ■全球定位导航系统 ■家电和机器人技术
说明
L3G4200D 是一种低功耗三轴角 速率传感器能够提供前所未有的 安然的零利率水平和灵敏度超过 温度和时间…它包括一个传感 元素,并能够提供一个 IC 接口 外部世界的测角速率 通过数字接口(I2C/SPI)…

寄存器中文注释

寄存器中文注释

MSP430寄存器中文注释---P1/2口(带中断功能)/************************************************************* DIGITAL I/O Port1/2 寄存器定义有中断功能************************************************************/#define P1IN_ 0x0020 /* P1 输入寄存器 */const sfrb P1IN = P1IN_;#define P1OUT_ 0x0021 /* P1 输出寄存器 */sfrb P1OUT = P1OUT_;#define P1DIR_ 0x0022 /* P1 方向选择寄存器 */sfrb P1DIR = P1DIR_;#define P1IFG_ 0x0023 /* P1 中断标志寄存器*/sfrb P1IFG = P1IFG_;#define P1IES_ 0x0024 /* P1 中断边沿选择寄存器*/ sfrb P1IES = P1IES_;#define P1IE_ 0x0025 /* P1 中断使能寄存器 */ sfrb P1IE = P1IE_;#define P1SEL_ 0x0026 /* P1 功能选择寄存器*/sfrb P1SEL = P1SEL_;#define P2IN_ 0x0028 /* P2 输入寄存器 */const sfrb P2IN = P2IN_;#define P2OUT_ 0x0029 /* P2 输出寄存器 */sfrb P2OUT = P2OUT_;#define P2DIR_ 0x002A /* P2 方向选择寄存器 */ sfrb P2DIR = P2DIR_;#define P2IFG_ 0x002B /* P2 中断标志寄存器 */sfrb P2IFG = P2IFG_;#define P2IES_ 0x002C /* P2 中断边沿选择寄存器 */ sfrb P2IES = P2IES_;#define P2IE_ 0x002D /* P2 中断使能寄存器 */ sfrb P2IE = P2IE_;#define P2SEL_ 0x002E /* P2 功能选择寄存器 */ sfrb P2SEL = P2SEL_;MSP430寄存器中文注释---P3/4口(无中断功能)/************************************************************* DIGITAL I/O Port3/4寄存器定义无中断功能************************************************************/#define P3IN_ 0x0018 /* P3 输入寄存器 */ const sfrb P3IN = P3IN_;#define P3OUT_ 0x0019 /* P3 输出寄存器 */sfrb P3OUT = P3OUT_;#define P3DIR_ 0x001A /* P3 方向选择寄存器 */ sfrb P3DIR = P3DIR_;#define P3SEL_ 0x001B /* P3 功能选择寄存器*/ sfrb P3SEL = P3SEL_;#define P4IN_ 0x001C /* P4 输入寄存器 */ const sfrb P4IN = P4IN_;#define P4OUT_ 0x001D /* P4 输出寄存器 */sfrb P4OUT = P4OUT_;#define P4DIR_ 0x001E /* P4 方向选择寄存器 */ sfrb P4DIR = P4DIR_;#define P4SEL_ 0x001F /* P4 功能选择寄存器 */ sfrb P4SEL = P4SEL_;/************************************************************* DIGITAL I/O Port5/6 I/O口寄存器定义PORT5和6 无中断功能************************************************************/#define P5IN_ 0x0030 /* P5 输入寄存器 */ const sfrb P5IN = P5IN_;#define P5OUT_ 0x0031 /* P5 输出寄存器*/sfrb P5OUT = P5OUT_;#define P5DIR_ 0x0032 /* P5 方向选择寄存器*/ sfrb P5DIR = P5DIR_;#define P5SEL_ 0x0033 /* P5 功能选择寄存器*/ sfrb P5SEL = P5SEL_;#define P6IN_ 0x0034 /* P6 输入寄存器 */ const sfrb P6IN = P6IN_;#define P6OUT_ 0x0035 /* P6 输出寄存器*/sfrb P6OUT = P6OUT_;#define P6DIR_ 0x0036 /* P6 方向选择寄存器*/ sfrb P6DIR = P6DIR_;#define P6SEL_ 0x0037 /* P6 功能选择寄存器*/ sfrb P6SEL = P6SEL_;MSP430寄存器中文注释--- 硬件乘法器/************************************************************硬件乘法器的寄存器定义************************************************************/#define MPY_ 0x0130 /* 无符号乘法 */ sfrw MPY = MPY_;#define MPYS_ 0x0132 /* 有符号乘法*/sfrw MPYS = MPYS_;#define MAC_ 0x0134 /* 无符号乘加 */ sfrw MAC = MAC_;#define MACS_ 0x0136 /* 有符号乘加 */sfrw MACS = MACS_;#define OP2_ 0x0138 /* 第二乘数 */sfrw OP2 = OP2_;#define RESLO_ 0x013A /* 低6位结果寄存器 */sfrw RESLO = RESLO_;#define RESHI_ 0x013C /* 高6位结果寄存器 */sfrw RESHI = RESHI_;#define SUMEXT_ 0x013E /*结果扩展寄存器 */const sfrw SUMEXT = SUMEXT_;MSP430寄存器中文注释---看门狗和定时器/************************************************************* 看门狗定时器的寄存器定义************************************************************/#define WDTCTL_ 0x0120sfrw WDTCTL = WDTCTL_;#define WDTIS0 0x0001 /*选择WDTCNT的四个输出端之一*/#define WDTIS1 0x0002 /*选择WDTCNT的四个输出端之一*/#define WDTSSEL 0x0004 /*选择WDTCNT的时钟源*/#define WDTCNTCL 0x0008 /*清除WDTCNT端: 为1时从0开始计数*/#define WDTTMSEL 0x0010 /*选择模式 0: 看门狗模式; 1: 定时器模式*/#define WDTNMI 0x0020 /*选择NMI/RST 引脚功能 0:为 RST; 1:为NMI*/#define WDTNMIES 0x0040 /*WDTNMI=1时.选择触发延 0:为上升延 1:为下降延*/#define WDTHOLD 0x0080 /*停止看门狗定时器工作 0:启动;1:停止*/#define WDTPW 0x5A00 /* 写密码:高八位*//* SMCLK= 1MHz定时器模式 */#define WDT_MDLY_32 WDTPW+WDTTMSEL+WDTCNTCL /* TSMCLK*2POWER15=32ms 复位状态 */#define WDT_MDLY_8 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0 /* TSMCLK*2POWER13=8.192ms " */#define WDT_MDLY_0_5 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1 /* TSMCLK*2POWER9=0.512ms " */#define WDT_MDLY_0_064 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0 / * TSMCLK*2POWER6=0.512ms " *//* ACLK=32.768KHz 定时器模式*/#define WDT_ADLY_1000 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL /* TACLK*2POWER15=1000ms " */#define WDT_ADLY_250 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0/* TACLK*2POWER13=250ms " */#define WDT_ADLY_16 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1 /* TACLK*2POWER9=16ms " */#define WDT_ADLY_1_9 WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0 /* TACL K*2POWER6=1.9ms " *//* SMCLK=1MHz看门狗模式 */#define WDT_MRST_32 WDTPW+WDTCNTCL /* TSMCLK*2POWER15=32ms 复位状态 */#define WDT_MRST_8 WDTPW+WDTCNTCL+WDTIS0 /* TSMCLK*2POWER13=8.192ms " */ #define WDT_MRST_0_5 WDTPW+WDTCNTCL+WDTIS1 /* TSMCLK*2POWER9=0.512ms " */#define WDT_MRST_0_064 WDTPW+WDTCNTCL+WDTIS1+WDTIS0 /* TSMCLK*2POWER6=0.512ms " *//* ACLK=32KHz看门狗模式 */#define WDT_ARST_1000 WDTPW+WDTCNTCL+WDTSSEL /* TACLK*2POWER15=1000ms " */#define WDT_ARST_250 WDTPW+WDTCNTCL+WDTSSEL+WDTIS0 /* TACLK*2POWER13=250ms " */#define WDT_ARST_16 WDTPW+WDTCNTCL+WDTSSEL+WDTIS1 /* TACLK*2POWER9=16ms " */#define WDT_ARST_1_9 WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0 /* TACLK*2POWER6=1.9ms " */MSP430寄存器中文注释---A/D采样寄存器定义/************************************************************* ADC12 A/D采样寄存器定义************************************************************//*ADC12转换控制类寄存器*/#define ADC12CTL0_ 0x0;' /* ADC12 Control 0 */sfrw ADC12CTL0 = ADC12CTL0_;#define ADC12CTL1_ 0x01A2 /* ADC12 Control 1 */sfrw ADC12CTL1 = ADC12CTL1_;/*ADC12中断控制类寄存器*/#define ADC12IFG_ 0x01A4 /* ADC12 Interrupt Flag */sfrw ADC12IFG = ADC12IFG_;#define ADC12IE_ 0x01A6 /* ADC12 Interrupt Enable */sfrw ADC12IE = ADC12IE_;#define ADC12IV_ 0x01A8 /* ADC12 Interrupt Vector Word */sfrw ADC12IV = ADC12IV_;/*ADC12存贮器类寄存器*/#define ADC12MEM_ 0x0140 /* ADC12 Conversion Memory */#ifndef __IAR_SYSTEMS_ICC#define ADC12MEM ADC12MEM_ /* ADC12 Conversion Memory (for assembler) */#else#define ADC12MEM ((int*) ADC12MEM_) /* ADC12 Conversion Memory (for C) */#endif#define ADC12MEM0_ ADC12MEM_ /* ADC12 Conversion Memory 0 */sfrw ADC12MEM0 = ADC12MEM0_;#define ADC12MEM1_ 0x0142 /* ADC12 Conversion Memory 1 */sfrw ADC12MEM1 = ADC12MEM1_;#define ADC12MEM2_ 0x0144 /* ADC12 Conversion Memory 2 */sfrw ADC12MEM2 = ADC12MEM2_;#define ADC12MEM3_ 0x0146 /* ADC12 Conversion Memory 3 */sfrw ADC12MEM3 = ADC12MEM3_;#define ADC12MEM4_ 0x0148 /* ADC12 Conversion Memory 4 */sfrw ADC12MEM4 = ADC12MEM4_;#define ADC12MEM5_ 0x014A /* ADC12 Conversion Memory 5 */sfrw ADC12MEM5 = ADC12MEM5_;#define ADC12MEM6_ 0x014C /* ADC12 Conversion Memory 6 */sfrw ADC12MEM6 = ADC12MEM6_;#define ADC12MEM7_ 0x014E /* ADC12 Conversion Memory 7 */sfrw ADC12MEM7 = ADC12MEM7_;#define ADC12MEM8_ 0x0150 /* ADC12 Conversion Memory 8 */sfrw ADC12MEM8 = ADC12MEM8_;#define ADC12MEM9_ 0x0152 /* ADC12 Conversion Memory 9 */sfrw ADC12MEM9 = ADC12MEM9_;#define ADC12MEM10_ 0x0154 /* ADC12 Conversion Memory 10 */sfrw ADC12MEM10 = ADC12MEM10_;#define ADC12MEM11_ 0x0156 /* ADC12 Conversion Memory 11 */sfrw ADC12MEM11 = ADC12MEM11_;#define ADC12MEM12_ 0x0158 /* ADC12 Conversion Memory 12 */sfrw ADC12MEM12 = ADC12MEM12_;#define ADC12MEM13_ 0x015A /* ADC12 Conversion Memory 13 */sfrw ADC12MEM13 = ADC12MEM13_;#define ADC12MEM14_ 0x015C /* ADC12 Conversion Memory 14 */sfrw ADC12MEM14 = ADC12MEM14_;#define ADC12MEM15_ 0x015E /* ADC12 Conversion Memory 15 */sfrw ADC12MEM15 = ADC12MEM15_;/*ADC12存贮控制类寄存器*/#define ADC12MCTL_ 0x0080 /* ADC12 Memory Control */#ifndef __IAR_SYSTEMS_ICC#define ADC12MCTL ADC12MCTL_ /* ADC12 Memory Control (for assembler) */ #else#define ADC12MCTL ((char*) ADC12MCTL_) /* ADC12 Memory Control (for C) * /#endif#define ADC12MCTL0_ ADC12MCTL_ /* ADC12 Memory Control 0 */sfrb ADC12MCTL0 = ADC12MCTL0_;#define ADC12MCTL1_ 0x0081 /* ADC12 Memory Control 1 */sfrb ADC12MCTL1 = ADC12MCTL1_;#define ADC12MCTL2_ 0x0082 /* ADC12 Memory Control 2 */sfrb ADC12MCTL2 = ADC12MCTL2_;#define ADC12MCTL3_ 0x0083 /* ADC12 Memory Control 3 */sfrb ADC12MCTL3 = ADC12MCTL3_;#define ADC12MCTL4_ 0x0084 /* ADC12 Memory Control 4 */sfrb ADC12MCTL4 = ADC12MCTL4_;#define ADC12MCTL5_ 0x0085 /* ADC12 Memory Control 5 */sfrb ADC12MCTL5 = ADC12MCTL5_;#define ADC12MCTL6_ 0x0086 /* ADC12 Memory Control 6 */sfrb ADC12MCTL6 = ADC12MCTL6_;#define ADC12MCTL7_ 0x0087 /* ADC12 Memory Control 7 */sfrb ADC12MCTL7 = ADC12MCTL7_;#define ADC12MCTL8_ 0x0088 /* ADC12 Memory Control 8 */sfrb ADC12MCTL8 = ADC12MCTL8_;#define ADC12MCTL9_ 0x0089 /* ADC12 Memory Control 9 */sfrb ADC12MCTL9 = ADC12MCTL9_;#define ADC12MCTL10_ 0x008A /* ADC12 Memory Control 10 */sfrb ADC12MCTL10 = ADC12MCTL10_;#define ADC12MCTL11_ 0x008B /* ADC12 Memory Control 11 */sfrb ADC12MCTL11 = ADC12MCTL11_;#define ADC12MCTL12_ 0x008C /* ADC12 Memory Control 12 */sfrb ADC12MCTL12 = ADC12MCTL12_;#define ADC12MCTL13_ 0x008D /* ADC12 Memory Control 13 */sfrb ADC12MCTL13 = ADC12MCTL13_;#define ADC12MCTL14_ 0x008E /* ADC12 Memory Control 14 */sfrb ADC12MCTL14 = ADC12MCTL14_;#define ADC12MCTL15_ 0x008F /* ADC12 Memory Control 15 */sfrb ADC12MCTL15 = ADC12MCTL15_;/* ADC12CTL0 内8位控制寄存器位*/#define ADC12SC 0x001 /*采样/转换控制位*/#define ENC 0x002 /* 转换允许位*/#define ADC12TOVIE 0x004 /*转换时间溢出中断允许位*/#define ADC12OVIE 0x008 /*溢出中断允许位*/#define ADC12ON 0x010 /*ADC12内核控制位*/#define REFON 0x020 /*参考电压控制位*/#define REF2_5V 0x040 /*内部参考电压的电压值选择位 ' 0'为1.5V; '1'为2.5V*/#define MSH 0x080 /*多次采样/转换位*/#define MSC 0x080 /*多次采样/转换位*//*SHT0 采样保持定时器0 控制ADC12的结果存贮器MEM0~MEM7的采样周期*/#define SHT0_0 0*0x100 /*采样周期=TADC12CLK*4 */#define SHT0_1 1*0x100 /*采样周期=TADC12CLK*8 */#define SHT0_2 2*0x100 /*采样周期=TADC12CLK*16 */ #define SHT0_3 3*0x100 /*采样周期=TADC12CLK*32 */ #define SHT0_4 4*0x100 /*采样周期=TADC12CLK*64 */ #define SHT0_5 5*0x100 /*采样周期=TADC12CLK*96 */ #define SHT0_6 6*0x100 /*采样周期=TADC12CLK*128 */ #define SHT0_7 7*0x100 /*采样周期=TADC12CLK*192 */ #define SHT0_8 8*0x100 /*采样周期=TADC12CLK*256 */ #define SHT0_9 9*0x100 /*采样周期=TADC12CLK*384 */ #define SHT0_10 10*0x100 /*采样周期=TADC12CLK*512 */#define SHT0_11 11*0x100 /*采样周期=TADC12CLK*768 */#define SHT0_12 12*0x100 /*采样周期=TADC12CLK*1024 */ #define SHT0_13 13*0x100 /*采样周期=TADC12CLK*1024 */ #define SHT0_14 14*0x100 /*采样周期=TADC12CLK*1024 */ #define SHT0_15 15*0x100 /*采样周期=TADC12CLK*1024 */ /*SHT1 采样保持定时器1 控制ADC12的结果存贮器MEM8~MEM15的采样周期*/#define SHT1_0 0*0x100 /*采样周期=TADC12CLK*4 */#define SHT1_1 1*0x100 /*采样周期=TADC12CLK*8 */#define SHT1_2 2*0x100 /*采样周期=TADC12CLK*16 */ #define SHT1_3 3*0x100 /*采样周期=TADC12CLK*32 */ #define SHT1_4 4*0x100 /*采样周期=TADC12CLK*64 */#define SHT1_5 5*0x100 /*采样周期=TADC12CLK*96 */ #define SHT1_6 6*0x100 /*采样周期=TADC12CLK*128 */ #define SHT1_7 7*0x100 /*采样周期=TADC12CLK*192 */ #define SHT1_8 8*0x100 /*采样周期=TADC12CLK*256 */ #define SHT1_9 9*0x100 /*采样周期=TADC12CLK*384 */ #define SHT1_10 10*0x100 /*采样周期=TADC12CLK*512 */ #define SHT1_11 11*0x100 /*采样周期=TADC12CLK*768 */ #define SHT1_12 12*0x100 /*采样周期=TADC12CLK*1024 */ #define SHT1_13 13*0x100 /*采样周期=TADC12CLK*1024 */ #define SHT1_14 14*0x100 /*采样周期=TADC12CLK*1024 */ #define SHT1_15 15*0x100 /*采样周期=TADC12CLK*1024 *//* ADC12CTL1 内8位控制寄存器位*/#define ADC12BUSY 0x0001 /*ADC12忙标志位*/#define CONSEQ_0 0*2 /*单通道单次转换*/#define CONSEQ_1 1*2 /*序列通道单次转换*/#define CONSEQ_2 2*2 /*单通道多次转换*/#define CONSEQ_3 3*2 /*序列通道多次转换*/#define ADC12SSEL_0 0*8 /*ADC12内部时钟源*/#define ADC12SSEL_1 1*8 /*ACLK*/#define ADC12SSEL_2 2*8 /*MCLK*/#define ADC12SSEL_3 3*8 /*SCLK*/#define ADC12DIV_0 0*0x20 /*1分频*/#define ADC12DIV_1 1*0x20 /*2分频*/#define ADC12DIV_2 2*0x20 /*3分频*/#define ADC12DIV_3 3*0x20 /*4分频*/#define ADC12DIV_4 4*0x20 /*5分频*/#define ADC12DIV_5 5*0x20 /*6分频*/#define ADC12DIV_6 6*0x20 /*7分频*/#define ADC12DIV_7 7*0x20 /*8分频*/#define ISSH 0x0100 /*采样输入信号反向与否控制位*/#define SHP 0x0200 /*采样信号(SAMPCON)选择控制位*/#define SHS_0 0*0x400 /*采样信号输入源选择控制位 A DC12SC*/#define SHS_1 1*0x400 /*采样信号输入源选择控制位 T IMER_A.OUT1*/#define SHS_2 2*0x400 /*采样信号输入源选择控制位 T IMER_B.OUT0*/#define SHS_3 3*0x400 /*采样信号输入源选择控制位 T IMER_B.OUT1*//*转换存贮器地址定义位*/#define CSTARTADD_0 0*0x1000 /*选择MEM0首地址*/#define CSTARTADD_1 1*0x1000 /*选择MEM1首地址*/#define CSTARTADD_2 2*0x1000 /*选择MEM2首地址*/#define CSTARTADD_3 3*0x1000 /*选择MEM3首地址*/#define CSTARTADD_4 4*0x1000 /*选择MEM4首地址*/#define CSTARTADD_5 5*0x1000 /*选择MEM5首地址*/#define CSTARTADD_6 6*0x1000 /*选择MEM6首地址*/#define CSTARTADD_7 7*0x1000 /*选择MEM7首地址*/#define CSTARTADD_8 8*0x1000 /*选择MEM8首地址*/#define CSTARTADD_9 9*0x1000 /*选择MEM9首地址*/#define CSTARTADD_10 10*0x1000 /*选择MEM10首地址*/#define CSTARTADD_11 11*0x1000 /*选择MEM11首地址*/#define CSTARTADD_12 12*0x1000 /*选择MEM12首地址*/#define CSTARTADD_13 13*0x1000 /*选择MEM13首地址*/#define CSTARTADD_14 14*0x1000 /*选择MEM14首地址*/#define CSTARTADD_15 15*0x1000 /*选择MEM15首地址*//* ADC12MCTLx */#define INCH_0 0 /*选择模拟量通道0 A0 */#define INCH_1 1 /*选择模拟量通道0 A1*/#define INCH_2 2 /*选择模拟量通道0 A2*/#define INCH_3 3 /*选择模拟量通道0 A3*/#define INCH_4 4 /*选择模拟量通道0 A4*/#define INCH_5 5 /*选择模拟量通道0 A5*/#define INCH_6 6 /*选择模拟量通道0 A6*/#define INCH_7 7 /*选择模拟量通道0 A7*/#define INCH_8 8 /*VEREF+*/#define INCH_9 9 /*VEREF-*/#define INCH_10 10 /*片内温度传感器的输出*/#define INCH_11 11 /*(AVCC-AVSS)/2*/ #define INCH_12 12 /*(AVCC-AVSS)/2*/ #define INCH_13 13 /*(AVCC-AVSS)/2*/ #define INCH_14 14 /*(AVCC-AVSS)/2*/ #define INCH_15 15 /*(AVCC-AVSS)/2*/ /*参考电压源选择位*/#define SREF_0 0*0x10 /*VR+ = AVCC; VR- = AVSS*/#define SREF_1 1*0x10 /*VR+ = VREF+; VR- = AVSS*/#define SREF_2 2*0x10 /*VR+ = VEREF+; VR- = AVSS*/#define SREF_3 3*0x10 /*VR+ = VEREF+; VR- = AVSS*/#define SREF_4 4*0x10 /*VR+ = AVCC; VR- = VREF-*/#define SREF_5 5*0x10 /*VR+ = VREF+; VR- = VREF-*/#define SREF_6 6*0x10 /*VR+ = VEREF+; VR- = VREF-*/#define SREF_7 7*0x10 /*VR+ = VEREF+; VR- = VREF-*/#define EOS 0x80 /*序列结束选择位*/MSP430寄存器中文注释----串口寄存器/************************************************************* USART 串口寄存器"UCTL","UTCTL","URCTL"定义的各个位可串口1 串口2公用************************************************************//* UCTL 串口控制寄存器*/#define PENA 0x80 /*校验允许位*/#define PEV 0x40 /*偶校验为0时为奇校验*/ #define SPB 0x20 /*停止位为2 为0时停止位为1* /#define CHAR 0x10 /*数据位为8位为0时数据位为7位*/#define LISTEN 0x08 /*自环模式(发数据同时在把发的数据接收回来)*/#define SYNC 0x04 /*同步模式为0异步模式*/#define MM 0x02 /*为1时地址位多机协议(异步)主机模式(同步);为0时线路空闲多机协议(异步) 从机模式(同步)*/#define SWRST 0x01 /*控制位*//* UTCTL 串口发送控制寄存器*/#define CKPH 0x80 /*时钟相位控制位(只同步方式用)为1时时钟UCLK延时半个周期*/#define CKPL 0x40 /*时钟极性控制位为1时异步与U CLK相反;同步下降延有效*/#define SSEL1 0x20 /*时钟源选择位:与SSEL0组合为0, 1,2,3四种方式*/#define SSEL0 0x10 /*"0"选择外部时钟,"1"选择辅助时钟,"2","3"选择系统子时钟 */#define URXSE 0x08 /*接收触发延控制位(只在异步方式下用)*/#define TXWAKE 0x04 /*多处理器通信传送控制位(只在异步方式下用)*/#define STC 0x02 /*外部引脚STE选择位为0时为4线模式为1时为3线模式*/#define TXEPT 0x01 /*发送器空标志*//* URCTL 串口接收控制寄存器同步模式下只用两位:FE和OE*/#define FE 0x80 /*帧错标志*/#define PE 0x40 /*校验错标志位*/#define OE 0x20 /*溢出标志位*/#define BRK 0x10 /*打断检测位*/#define URXEIE 0x08 /*接收出错中断允许位*/#define URXWIE 0x04 /*接收唤醒中断允许位*/ #define RXWAKE 0x02 /*接收唤醒检测位*/#define RXERR 0x01 /*接收错误标志位*//************************************************************* USART 0 串口0寄存器定义************************************************************/#define U0CTL_ 0x0070 /* UART 0 Control */sfrb U0CTL = U0CTL_;#define U0TCTL_ 0x0071 /* UART 0 Transmit Control */sfrb U0TCTL = U0TCTL_;#define U0RCTL_ 0x0072 /* UART 0 Receive Control */sfrb U0RCTL = U0RCTL_;#define U0MCTL_ 0x0073 /* UART 0 Modulation Control */sfrb U0MCTL = U0MCTL_;#define U0BR0_ 0x0074 /* UART 0 Baud Rate 0 */sfrb U0BR0 = U0BR0_;#define U0BR1_ 0x0075 /* UART 0 Baud Rate 1 */sfrb U0BR1 = U0BR1_;#define U0RXBUF_ 0x0076 /* UART 0 Receive Buffer */const sfrb U0RXBUF = U0RXBUF_;#define U0TXBUF_ 0x0077 /* UART 0 Transmit Buffer */sfrb U0TXBUF = U0TXBUF_;/* Alternate register names */#define UCTL0_ 0x0070 /* UART 0 Control */sfrb UCTL0 = UCTL0_;#define UTCTL0_ 0x0071 /* UART 0 Transmit Control */sfrb UTCTL0 = UTCTL0_;#define URCTL0_ 0x0072 /* UART 0 Receive Control */ sfrb URCTL0 = URCTL0_;#define UMCTL0_ 0x0073 /* UART 0 Modulation Control */ sfrb UMCTL0 = UMCTL0_;#define UBR00_ 0x0074 /* UART 0 Baud Rate 0 */sfrb UBR00 = UBR00_;#define UBR10_ 0x0075 /* UART 0 Baud Rate 1 */sfrb UBR10 = UBR10_;#define RXBUF0_ 0x0076 /* UART 0 Receive Buffer */ const sfrb RXBUF0 = RXBUF0_;#define TXBUF0_ 0x0077 /* UART 0 Transmit Buffer */ sfrb TXBUF0 = TXBUF0_;#define UCTL_0_ 0x0070 /* UART 0 Control */sfrb UCTL_0 = UCTL_0_;#define UTCTL_0_ 0x0071 /* UART 0 Transmit Control */ sfrb UTCTL_0 = UTCTL_0_;#define URCTL_0_ 0x0072 /* UART 0 Receive Control */sfrb URCTL_0 = URCTL_0_;#define UMCTL_0_ 0x0073 /* UART 0 Modulation Control */ sfrb UMCTL_0 = UMCTL_0_;#define UBR0_0_ 0x0074 /* UART 0 Baud Rate 0 */sfrb UBR0_0 = UBR0_0_;#define UBR1_0_ 0x0075 /* UART 0 Baud Rate 1 */sfrb UBR1_0 = UBR1_0_;#define RXBUF_0_ 0x0076 /* UART 0 Receive Buffer */ const sfrb RXBUF_0 = RXBUF_0_;#define TXBUF_0_ 0x0077 /* UART 0 Transmit Buffer */sfrb TXBUF_0 = TXBUF_0_;/************************************************************* USART 1 串口1寄存器定义************************************************************/#define U1CTL_ 0x0078 /* UART 1 Control */sfrb U1CTL = U1CTL_;#define U1TCTL_ 0x0079 /* UART 1 Transmit Control */ sfrb U1TCTL = U1TCTL_;#define U1RCTL_ 0x007A /* UART 1 Receive Control */ sfrb U1RCTL = U1RCTL_;#define U1MCTL_ 0x007B /* UART 1 Modulation Control */ sfrb U1MCTL = U1MCTL_;#define U1BR0_ 0x007C /* UART 1 Baud Rate 0 */sfrb U1BR0 = U1BR0_;#define U1BR1_ 0x007D /* UART 1 Baud Rate 1 */sfrb U1BR1 = U1BR1_;#define U1RXBUF_ 0x007E /* UART 1 Receive Buffer */ const sfrb U1RXBUF = U1RXBUF_;#define U1TXBUF_ 0x007F /* UART 1 Transmit Buffer */sfrb U1TXBUF = U1TXBUF_;#define UCTL1_ 0x0078 /* UART 1 Control */sfrb UCTL1 = UCTL1_;#define UTCTL1_ 0x0079 /* UART 1 Transmit Control */ sfrb UTCTL1 = UTCTL1_;#define URCTL1_ 0x007A /* UART 1 Receive Control */ sfrb URCTL1 = URCTL1_;#define UMCTL1_ 0x007B /* UART 1 Modulation Control */ sfrb UMCTL1 = UMCTL1_;#define UBR01_ 0x007C /* UART 1 Baud Rate 0 */sfrb UBR01 = UBR01_;#define UBR11_ 0x007D /* UART 1 Baud Rate 1 */sfrb UBR11 = UBR11_;#define RXBUF1_ 0x007E /* UART 1 Receive Buffer */ const sfrb RXBUF1 = RXBUF1_;#define TXBUF1_ 0x007F /* UART 1 Transmit Buffer */ sfrb TXBUF1 = TXBUF1_;#define UCTL_1_ 0x0078 /* UART 1 Control */sfrb UCTL_1 = UCTL_1_;#define UTCTL_1_ 0x0079 /* UART 1 Transmit Control */ sfrb UTCTL_1 = UTCTL_1_;#define URCTL_1_ 0x007A /* UART 1 Receive Control */ sfrb URCTL_1 = URCTL_1_;#define UMCTL_1_ 0x007B /* UART 1 Modulation Control */ sfrb UMCTL_1 = UMCTL_1_;#define UBR0_1_ 0x007C /* UART 1 Baud Rate 0 */sfrb UBR0_1 = UBR0_1_;#define UBR1_1_ 0x007D /* UART 1 Baud Rate 1 */sfrb UBR1_1 = UBR1_1_;#define RXBUF_1_ 0x007E /* UART 1 Receive Buffer */ const sfrb RXBUF_1 = RXBUF_1_;#define TXBUF_1_ 0x007F /* UART 1 Transmit Buffer */ sfrb TXBUF_1 = TXBUF_1_;。

基于STM32的六足机器人控制系统设计

基于STM32的六足机器人控制系统设计

基于STM32的六足机器人控制系统设计伍立春;王茂森;黄顺斌【摘要】基于仿生原理,以STM32F103VET6为核心的控制芯片构建硬件控制系统。

利用无线遥控器使芯片的通用定时器产生18路PWM波控制机器人各个关节的运动,同时通过串口能在上位机实时显示GPS、超声波测距传感器、加速度计、陀螺仪的输出数据,该机器人能严格按三角步态行走,实现诸如直线、转弯、躲避障碍物等行走功能。

实验结果表明,六足机器人的18个关节运动平稳,对复杂运动步态的控制精确,实现了在地面的稳定运动。

%this paper describes the fabrication of a hexapod bionic robot which is control ed bySTM32F103VET6 microprocessor and walks based on bionic principle. In its control system based on wireless remoter, 18-channel PWM wave generated by the timers STM32F103VE76, is used to control robot’ s legs, and the USART of STM32F103VET6 is used to display the output data of GPS, ul-trasonic sensor, accelerometer, gyroscope.This robot is provided with some abilities, such as linear walking, turning, avoiding barri-ers walking etc. The experiments show that free motion control of 18 joints is smooth, the smarter and smal er control system can be used to control complex walking movement precisely and its ground walking objective is atlained..【期刊名称】《机械制造与自动化》【年(卷),期】2014(000)005【总页数】5页(P150-153,161)【关键词】STM32F103VET6;六足机器人;无线遥控;控制系统【作者】伍立春;王茂森;黄顺斌【作者单位】南京理工大学机械工程学院,江苏南京210016;南京理工大学机械工程学院,江苏南京210016;南京理工大学机械工程学院,江苏南京210016【正文语种】中文【中图分类】TP2420 引言移动机器人的发展是一个重要的科研领域,移动机器人可分为车轮式移动机器人、履带式机器人及其仿生技术的运动机器人[1]。

AVR寄存器说明精品文档12页

AVR寄存器说明精品文档12页

SREG | I | T | H | S | V | N | Z | C |//状态寄存器SREGI : 全局中断使能T : 位复制存储位H : 半进位标志位表示算术运算发生了半进位S : 符号位S为负数标志N与2的补码溢出标志V的异或V : 2的补码溢出标志位N : 负数标志位Z : 零标志位C : 进位标志位OSCCAL |CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 |//振荡器标定寄存器OSCCAL OSCAL数值最小频率,标称频率的百分比(%)最大频率,标称频率的百分比(%)0x00 50 1000x7F 75 1500xFF 100 200MCUCR | SM2 | SE | SM1 | SM0 | ISC11 | ISC10 | ISC01 | ISC00 | //MCU控制寄存器MCUCR SM2:0 休眠模式000 空闲模式(停止CPU_clk 和FLASH_clk)001 ADC噪声抑制模式(停止IO_clk CPU_clk 和FLASH_clk)010 掉电模式(停止所有时钟,只有异步模块可以继续工作)011 省电模式100 --101 --110 Standby 模式(仅在使用外部晶振货谐振器时,Standby模式才可用)111 扩展Stabdby模式SE 休眠使能ISCx1:0 说明00 INTx为低电平产生中断请求01 INTx上的任意跳变产生中断请求10 INTx上的下降沿产生中断请求11 INTx上的上升沿产生中断请求MCUCSR | JTD | ISC2 | -- | JTRF | WDRF | BORF | EXTRF | PORF |//MCU控制和状态寄存器MCUCSR JTD 禁止JTAG 接口ISC2 中断2触发方式控制位(0-下降沿中断1-上升沿中断)JTRF JTAG 复位标志WDRF 看门狗复位标志BORF 掉电检测复位标志EXTRF 外部复位标志PORF 上电复位标志GICR | INT1 | INT0 | INT2 | -- | -- | -- | IVSEL | IVCE |//通用中断控制寄存器INT1 使能外部中断请求1INT0 使能外部中断请求0INT2 使能外部中断请求2IVSEL 中断向量选择IVCE中断向量修改使能GIFR | INTF1 | INTF0 | INTF2 | -- | -- | -- | -- | -- | //通用中断标志寄存器INTF1 外部中断标志1INTF0 外部中断标志0INTF2 外部中断标志2SPMCR | SPMIE | RWWSB | -- | RWWSRE | BLBSET | PGWRT | PGERS | SPMEN |//保存程序存储器控制寄存器SPMIE SPM 中断使能RWWSB RWW 区忙标志RWWSRE RWW 区读使能BLBSET Boot 锁定位设置PGWRT 页写入PWERS 页擦除SPMEN 存贮程序存储器使能OCDR | MSB/IDRD | | | | | | | LSB | //片上调试寄存器SFIOR | ADTS2 | ADTS1 | ADTS0 | -- | ACME | PUD | PSR2 | PSR10 | //特殊功能I/O寄存器ADTS[2:0] ADC自动触发源位000 连续转换模式001 模拟比较器010 外部中断请求0011 定时器/计数器0比较匹配100 定时器/ 计数器1溢出101 定时器/计数器比较匹配B110 定时器/计数器1溢出111 定时器/计数器1捕捉事件ACME 模拟比较器多路复用器使能0 AIN1 连接到比较器的负极输入端1 ADC 多路复用器为模拟比较器选择负极输入PUD 禁用上拉电阻PSR2 预分频复位T/C2PSR10 T/C1 与T/C0 预分频器复位//***********************// PORT端口相关寄存器//******************************// PORTA | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | // 数据寄存器DDRA | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | // 数据方向寄存器PINA | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | // 端口输入引脚PORTB | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |DDRB | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |PINB | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |PORTC | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |DDRC | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |PINC | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |PORTD | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |DDRD | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |PIND | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |//***********************// USART串口相关寄存器//**************************//UDR | RXB7 | RXB6 | RXB5 | RXB4 | RXB3 | RXB2 | RXB1 | RXB0 |// 接收数据缓冲寄存器| TXB7 | TXB6 | TXB5 | TXB4 | TXB3 | TXB2 | TXB1 | TXB0 |// 发送数据缓冲寄存器UCSRA| RXC | TXC | UDRE | FE | DOR | PE | U2X | MPCM | // USART 控制和状态寄存器A RXC USART 接收结束标志TXC USART 发送结束标志UDRE USART 数据寄存器空标志FE 帧错误标志DOR 数据溢出标志PE 奇偶校验错误标志U2X 倍速发送MPCM 多处理器通信模式UCSRB | RXCIE | TXCIE | UDRIE | RXEN | TXEN | UCSZ2 | RXB8 | TXB8 |//USART 控制和状态寄存器B RXCIE 接收结束中断使能TXCIE 发送结束中断使能UDRIE USART 数据寄存器空中断使能RXEN 接收使能TXEN 发送使能UCSZ2 字符长度[2]RXB8 接收数据位8TXB8 发送数据位8UCSRC | URSEL | UMSEL | UPM1 | UPM0 | USBS | UCSZ1 | UCSZ0 | UCPOL |//USART控制和状态寄存器C URSEL 寄存器选择0 UBRRH1 UCSRCUMSEL USART 模式选择0 异步模式1 同步模式UPM1 UPM00 0 禁止0 1 保留1 0 偶校验1 1 奇校验USBS 停止位选择0 停止位数为11 停止位数为2UCSZ2 UCSZ1 UCSZ0 字符长度0 0 0 50 0 1 60 1 0 70 1 1 81 0 0 保留1 0 1 保留1 1 0 保留1 1 1 9UCPOL 时钟极性UCPOL 发送数据的改变(TxD 引脚的输出) 接收数据的采样(RxD 引脚的输入)0 XCK上升沿XCK下降沿1 XCK下降沿XCK上升沿UBBRH | URSEL | ————| ————| ————| Bit11 | Bit10 | Bit9 | Bit8 | //波特率寄存器高4位UBBRL | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //波特率寄存器第8位使用模式波特率计算公式UBBR值计算公式异步正常模式(U2X=0)Baud = F(osc)/16(UBBR+1) UBBR = F(osc)/16Baud - 1异步倍速模式(U2X=1)Baud = F(osc)/8(UBBR+1) UBBR = F(osc)/8Baud - 1同步主机模式Baud = F(osc)/2(UBBR+1) UBBR = F(osc)/2Baud - 1//***********************// SPI相关寄存器 //******************************//SPCR | SPIE | SPE | DORD | MSTR | CPOL | CPHA | SPR1 | SPR0 | //SPI控制寄存器SPIE 使能SPI中断位SPE 使能SPI位DORD 数据次序0 数据的MSB首先发送1 数据的LSB首先发送MSTR 主从选择0 从机模式1 主机模式CPOL 时钟极性CPOL 起始沿结束沿空闲时的SCK0 上升沿下降沿低电平1 下降沿上升沿高电平CPHA 时钟相位CPHA 起始沿结束沿0 采样设置1 设置采样SPR[1:0] SPI时钟速率选择位SPR2x SPR1 SPR0 SCK频率0 0 0 focs/40 0 1 fosc/160 1 0 fosc/640 1 1 fosc/1281 0 0 fosc/21 0 1 fosc/81 1 0 fosc/321 1 1 fosc/64SPSR | SPIF | WCOL | -- | -- | -- | -- | -- | SPI2X | //SPI状态寄存器SPIF SPI中断标志WCOL 写碰撞标志SPI2X SPI倍速位(若为主机SCK可达fosc/2 若为从机则只能保证fosc/4)SPDR | MSB | -- | -- | -- | -- | -- | -- | LSB | //SPI数据寄存器写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓存器//***********************// ADC串口相关寄存器//**************************// ADMUX | REFS1 | REFS0 | ADLAR | MUX4 | MUX3 | MUX2 | MUX1 | MUX0 | //ADC 多工选择寄存器REFS1 REFS0 参考电压选择0 0 AREF 、内部Vref关闭0 1 A Vcc AREF 引脚外加滤波电容1 0 保留1 1 2.56V 片内基准电压源,AREF引脚外加滤波电容ADLAR ADC转换结果左对齐0 转换结果右对齐1 转换结果左对齐MUX[4:0] 单端输入正差分输入负差分输入增益00000 ADC000001 ADC100010 ADC200011 ADC300100 ADC400101 ADC500110 ADC600111 ADC701000 ADC0 ADC0 10x01001 ADC1 ADC0 10x01010 ADC0 ADC0 200x01011 ADC1 ADC0 200x01100 ADC2 ADC2 10x01101 ADC3 ADC2 10x01110 ADC2 ADC2 200x01111 ADC3 ADC2 200x10000 ADC0 ADC1 1x10001 ADC1 ADC1 1x10010 ADC2 ADC1 1x10011 ADC3 ADC1 1x10100 ADC4 ADC1 1x10101 ADC5 ADC1 1x10110 ADC6 ADC1 1x10111 ADC7 ADC1 1x11000 ADC0 ADC2 1x11001 ADC1 ADC2 1x11010 ADC2 ADC2 1x11011 ADC3 ADC2 1x11100 ADC4 ADC2 1x11101 ADC5 ADC2 1x11110 1.22V(VBG)11111 0V(GND)ADCSRA | ADEN | ADSC | ADATE | ADIF | ADIE | ADPS2 | ADPS1 | ADPS0 | //ADC控制和状态寄存器AADEN ADC使能位ADSC ADC开始转换位ADATE ADC自动触发使能位ADIF ADC中断标志位ADIE ADC中断使能位ADPS[2:0] ADC预分频选择位ADPS[2:0] 分频因子000 2001 2010 4011 8100 16101 32110 64111 128ADCH | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //ADC数据寄存器高位ADCL | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //ADC数据寄存器低位SFIOR | ADTS2 | ADTS1 | ADTS0 | -- | ACME | PUD | PSR2 | PSR10 | //特殊功能I/O寄存器ADTS[2:0] ADC自动触发源位ADTS[2:0] 触发源000 连续转换模式001 模拟比较器010 外部中断请求0011 定时器/计数器0比较匹配100 定时器/ 计数器1溢出101 定时器/计数器比较匹配B110 定时器/计数器1溢出111 定时器/计数器1捕捉事件//***********************// 模拟比较器相关寄存器//**********************// SFIOR | ADTS2 | ADTS1 | ADTS0 | -- | ACME | PUD | PSR2 | PSR10 | //特殊功能I/O寄存器ACME 模拟比较器多路复用器使能0 AIN1 连接到比较器的负极输入端1 ADC 多路复用器为模拟比较器选择负极输入ACSR | ACD | ACBG | ACO | ACI | ACIE | ACIC | ACIS1 | ACIS0 | //模拟比较器控制和状态寄存器ACD 模拟比较器禁用ACD 置位时,模拟比较器的电源被切断ACBG 选择模拟比较器的能隙基准源ACBG 置位后,模拟比较器的正极输入由能隙基准源所取代ACO 模拟比较器输出ACI 模拟比较器中断标志ACIE模拟比较器中断使能ACIC 模拟比较器输入捕捉使能ACIS[1:0] 模拟比较器中断模式选择ACIS1 ACIS0 中断模式0 0 比较器输出变化即可触发中断0 1 保留1 0 比较器输出的下降沿产生中断1 1 比较器输出的上升沿产生中断模拟比较器复用输入ACME ADEN MUX[2:0] 模拟比较器负极输入0 x xxx AIN11 1 xxx AIN11 0 000 ADC01 0 001 ADC11 0 010 ADC21 0 011 ADC31 0 100 ADC41 0 101 ADC51 0 110 ADC61 0 111 ADC7//***********************// 外部中断相关寄存器//**************************// MCUCR | SM2 | SE | SM1 | SM0 | ISC11 | ISC10 | ISC01 | ISC00 | //MCU控制寄存器ISx1 ISx0 说明0 0 INTx为低电平产生中断请求0 1 INTx上的任意跳变产生中断请求1 0 INTx上的下降沿产生中断请求1 1 INTx上的上升沿产生中断请求MCUCSR | JTD | ISC2 | -- | JTRF | WDRF | BORF | EXTRF | PORF | //MCU控制和状态寄存器ISC2 中断2触发方式控制位0 下降沿触发中断1 上升沿触发中断GICR | INT1 | INT0 | INT2 | -- | -- | -- | IVSEL | IVCE | //通用中断控制寄存器INT1 使能外部中断请求1INT0 使能外部中断请求0INT2 使能外部中断请求2GIFR | INTF1 | INTF0 | INTF2 | -- | -- | -- | -- | -- | //通用中断标志寄存器INTF1 外部中断标志1INTF0 外部中断标志0INTF2 外部中断标志2//***********************// Timer0相关寄存器//**************************// TCCR0 | FOC0 | WGM00 | COM01 | COM00 | WGM01 | CS02 | CS01 | CS00 | //T/C0 控制寄存器FOC0 强制输出比较WGM01:0 波形产生模式WGM01:0 T/C的工作模式TOP OCR0更新时间TOV0的置位时刻00 普通0xFF 立即更新MAX01 PWM,相位修正0xFF TOP BOTTOM10 CTC OCR0 立即更新MAX11 快速PWM 0xFF TOP MAXCOM01:0 比较匹配输出模式COM1:0 比较输出模式,非PWM 模式比较输出模式,快速PWM 模式比较输出模式,相位修正PWM 模式00 ----------------- 正常的端口操作,不与OC0 相连接--------------------------01 比较匹配发生时OC0 取反保留10 比较匹配发生时OC0 清零比较匹配OC0清零,计到TOP时OC0置位升序计数匹配清零OC0;降序计数匹配置位OC011 比较匹配发生时OC0 置位比较匹配OC0置位,计到TOP时OC0清零升序计数匹配置位OC0;降序计数匹配清零OC0CS02:0 时钟选择CS2:0 时钟选择000 无时钟,T/C 不工作001 clk/1 ( 没有预分频)010 clk/8011 clk/64100 clk/256101 clk/1024110 时钟由T0 引脚输入,下降沿触发111 时钟由T0 引脚输入,上升沿触发TCNT0 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //T/C0寄存器OCR0 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //输出比较寄存器TIMSK | OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | OCIE0 | TOIE0 | //T/C中断屏蔽寄存器OCIE0 T/C0 输出比较匹配中断使能TOIE0 T/C0 溢出中断使能TIFR | OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | OCF0 | TOV0 | //T/C中断标志寄存器OCF0 输出比较标志0TOV0 T/C0 溢出标志SFIOR | ADTS2 | ADTS1 | ADTS0 | -- | ACME | PUD | PSR2 | PSR10 | //特殊功能I/O寄存器PSR10 T/C1 与T/C0 预分频器复位//***********************// Timer1相关寄存器//**************************//TCCR1A| COM1A1 | COM1A0 | COM1B1 | COM1B0 | FOC1A | FOC1B | WGM11 | WGM10 | //T/C1控制寄存器ACOM1A1:0 通道A 的比较输出模式COM1B1:0 通道B 的比较输出模式比较输出模式,非PWMCOM1A1:0/COM1B1:0 说明00 普通端口操作,非OC1A/OC1B 功能01 比较匹配时OC1A/OC1B 电平取反10 比较匹配时清零OC1A/OC1B( 输出低电平)11 比较匹配时置位OC1A/OC1B ( 输出高电平)比较输出模式,快速PWMCOM1A(B)1:0 说明00 普通端口操作,非OC1A/OC1B 功能01 WGM13:0=15:匹配时OC1A 取反,OC1B不占用物理引脚.WGM13:0为其它值时为普通端口操作,非OC1A/OC1B功能10 比较匹配时清零OC1A/OC1B,OC1A/OC1B在TOP 时置位11 比较匹配时置位OC1A/OC1B,OC1A/OC1B在TOP 时清零比较输出模式,相位修正及相频修正PWM 模式COMA(B)1:0 说明00 普通端口操作,非OC1A/OC1B 功能01 WGM13:0=9或14: 比较匹配OC1A取反,OC1B不占用物理引脚.WGM13:0为其它值时为普通端口操作,非OC1A/OC1B功能10 升序记数比较匹配清零OC1A/OC1B,降序记数比较匹配置位OC1A/OC1B11 升序记数比较匹配置位OC1A/OC1B,降序记数比较匹配清零OC1A/OC1BFOC1A 通道A 强制输出比较FOC1B 通道B 强制输出比较FOC1A/FOC1B只有当WGM13:0指定为非PWM模式时被激活WGM11:0 波形发生模式模式 WGM1[3:0] 定时器/ 计数器工作模式计数上限值TOP OCR1x 更新时刻TOV1 置位时刻0 0000 普通模式0xFFFF 立即更新MAX1 0001 8位相位修正PWM 0x00FF TOP BOTTOM2 0010 9位相位修正PWM 0x01FF TOP BOTTOM3 0011 10位相位修正PWM 0x03FF TOP BOTTOM4 0100 CTC OCR1A 立即更新MAX5 0101 8位快速PWM 0x00FF TOP TOP6 0110 9位快速PWM 0x01FF TOP TOP7 0111 10位快速PWM 0x03FF TOP TOP8 1000 相位与频率修正PWM ICR1 BOTTOM BOTTOM9 1001 相位与频率修正PWM OCR1A BOTTOM BOTTOM10 1010 相位修正PWM ICR1 TOP BOTTOM11 1011 相位修正PWM OCR1A TOP BOTTOM12 1100 CTC ICR1 立即更新MAX13 1101 保留–––14 1110 快速PWM ICR1 TOP TOP15 1111 快速PWM OCR1A TOP TOPTCCR1B | ICNC1 | ICES1 | –| WGM13 | WGM12 | CS12 | CS11 | CS10 | //T/C1 控制寄存器B ICNC1 输入捕捉噪声抑制器ICES1 输入捕捉触发沿选择0 下降沿触发1 上升沿触发WGM13:2 波形发生模式见TCCR1A 寄存器中的描述CS12:0 时钟选择000 无时钟源(T/C停止工作)001 clk(无预分频)010 clk/8011 clk/64100 clk/256101 clk/1024110 外部T1 引脚,下降沿驱动111 外部T1 引脚,上升沿驱动TCNT1H | Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | //T/C1 技术寄存器TCNT1L | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |OCR1AH | Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | //输出比较寄存器1AOCR1AL | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |OCR1BH | Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | //输出比较寄存器1BOCR1BL | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |ICR1H | Bit15 | Bit14 | Bit13 | Bit12 | Bit11 | Bit10 | Bit9 | Bit8 | //输入捕捉寄存器1ICR1L | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |TIMSK | OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | OCIE0 | TOIE0 | //T/C中断屏蔽寄存器TICIE1 T/C1 输入捕捉中断使能OCIE1A 输出比较A 匹配中断使能OCIE1B T/C1 输出比较B 匹配中断使能TOIE1 T/C1 溢出中断使能TIFR | OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | OCF0 | TOV0 | //T/C中断标志寄存器ICF1 T/C1 输入捕捉标志位OCF1A T/C1 输出比较A 匹配标志位OCF1B T/C1 输出比较B 匹配标志位TOV1 T/C1 溢出标志SFIOR | ADTS2 | ADTS1 | ADTS0 | -- | ACME | PUD | PSR2 | PSR10 | //特殊功能I/O寄存器PSR10 T/C1 与T/C0 预分频器复位//***********************// Timer2相关寄存器//**************************// TCCR2 | FOC2 | WGM20 | COM21 | COM20 | WGM21 | CS22 | CS21 | CS20 |FOC2 强制输出比较WGM21:0 波形产生模式模式 WGM21:0 T/C工作模式TOP OCR2的更新时间TOV2的职位时刻0 00 普通0xFF 立即更新MAX1 01 相位修正PWM 0xFF TOP BOTTOM2 10 CTC OCR2 立即更新MAX3 11 快速PWM 0xFF TOP MAXCOM21:0 比较匹配输出模式*比较输出模式,非PWM 模式COM21:0 说明00 正常的端口操作,不与OC0 相连接01 比较匹配发生时OC0 取反10 比较匹配发生时OC0 清零11 比较匹配发生时OC0 置位*比较输出模式,快速PWM 模式COM21:0 说明00 正常的端口操作,不与OC0 相连接01 保留10 比较匹配发生时OC0 清零,计数到TOP 时OC0 置位11 比较匹配发生时OC0 置位,计数到TOP 时OC0 清零*比较输出模式,相位修正PWM 模式COM21:0 说明00 正常的端口操作,不与OC2 相连接01 保留10 在升序计数时发生比较匹配将清零OC2 ;降序计数时发生比较匹配将置位OC211 在升序计数时发生比较匹配将置位OC2 ;降序计数时发生比较匹配将清零OC2CS22:0 时钟选择000 无时钟,T/C不工作001 clk(t2s)(无预分频)010 clk(t2s)/8011 clk(t2s)/32100 clk(t2s)/64101 clk(t2s)/128110 clk(t2s)/256111 clk(t2s)/1024TCNT2 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //定时器/ 计数器寄存器OCR2 | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //输出比较寄存器ASSR | -- | -- | –- | -–| AS2 | TCN2UB | OCR2UB | TCR2UB | //异步状态寄存器AS2 异步T/C2AS2为"0”时T/C2由I/O时钟clkI/O驱动;AS2为"1”时T/C2由连接到TOSC1引脚的晶体振荡器驱动TCN2UB T/C2 更新中OCR2UB 输出比较寄存器2 更新中TCR2UB T/C2 控制寄存器更新中TIMSK | OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | OCIE0 | TOIE0 | //T/C中断屏蔽寄存器OCIE2 T/C2 输出比较匹配中断使能TOIE2 T/C2 溢出中断使能TIFR | OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | OCF0 | TOV0 | //T/C中断标志寄存器OCF2 输出比较标志2TOV2 T/C2 溢出标志SFIOR | ADTS2 | ADTS1 | ADTS0 | –- | ACME | PUD | PSR2 | PSR1 | //特殊功能IO寄存器PSR2 预分频复位T/C2//***********************// EEPROM相关寄存器//**************************// EEARH | ----- | ----- | ----- | ----- | ----- | ----- | ----- | EEAR8 | //EEPROM 地址寄存器EEARL | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 |EEDR | Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 | //EEPROM数据寄存器EECR | -- | -- | -- | -- | EERIE | EEMWE | EEWE | EERE | //EEPROM 控制寄存器EERIE 使能EEPROM 准备好中断EEMWE EEPROM 主机写使能EEWE EEPROM 写使能EERE EEPROM 读使能//***********************// TWI相关寄存器//******************************// TWBR | TWBR7 | TWBR6 | TWBR5 | TWBR4 | TWBR3 | TWBR2 | TWBR1 | TWBR0 |//TWI比特率寄存器TWCR | TWINT | TWEA | TWSTA | TWSTO | TWWC | TWEN | –---- | TWIE | //TWI控制寄存器TWINT TWI中断标志TWEA 使能TWI应答TWSTA TWI START状态标志TWSTO TWI STOP状态标志TWWC TWI写碰撞标志TWEN TWI使能TWIE 使能TWI中断TWSR | TWS7 | TWS6 | TWS5 | TWS4 | TWS3 | –| TWPS1 | TWPS0 | //TWI状态寄存器TWS7:3 TWI状态TWPS:0 TWI 预分频位00 101 410 1611 64TWDR | TWD7 | TWD6 | TWD5 | TWD4 | TWD3 | TWD2 | TWD1 | TWD0 | //TWI 数据寄存器TWAR | TWA6 | TWA5 | TWA4 | TWA3 | TWA2 | TWA1 | TWA0 | TWGCE | //TWI 从机地址寄存器TWA6:0 TWI 从机地址寄存器TWGCE 使能TWI广播识别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、寄存器
1.控制寄存器
➢CTRL_REG1(地址:20H):选择输出数据速率,带宽,X、Y、Z轴使能
DR1-DR0 输出速率选择,BW1-BW0带宽选择见表
ODR 为数据输出频率,
Cut_off为滤除的频率
➢CTRL_REG2(地址:21H):选择高通滤波模式和高通截止频率
➢CTRL_REG3(地址:22H):中断使能
CTRL_REG3
➢CTRL_REG4(地址:23H):选择量程
➢CTRL_REG5(地址:24H):FIFO使能,高通滤波使能
➢STATUS_REG(地址:27H):状态寄存器,ZYXDA=1时,数据已准备好,可读。

➢FIFO_CTRL_REG(地址:2EH):FIFO模式选择
2.数据寄存器(共6个,每个轴的角速度由两个字节组成,分成高位和低位,
数据以二进制补码形式存储)
➢OUT_X_L(地址:28H):X轴角速度低位
➢OUT_X_H(地址:29H):X轴角速度高位
➢OUT_Y_L(地址:2AH):Y轴角速度低位
➢OUT_Y_H(地址:2BH):Y轴角速度高位
➢OUT_Z_L(地址:2CH):Z轴角速度低位
➢OUT_Z_H(地址:2DH):Z轴角速度高位
二、程序思路
➢初始化:选择量程、高通滤波模式,设置中断使能等,对相应的控制寄存器进行写操作。

➢读数:首先读状态寄存器(STATUS_REG),若ZYXDA=1,则可以读数,否则等待。

为减小误差,程序连续读数20次,然后取平均值。

读写时序几乎和加速度传感器一致,参看陀螺仪的PDF文档。

相关文档
最新文档