IO口引脚相关寄存器配置

IO口引脚相关寄存器配置
IO口引脚相关寄存器配置

单片机各寄存器汇总

符号 地址功能介绍 B F0H B寄存器 ACC E0H 累加器 PSW D0H 程序状态字 IP B8H 中断优先级控制寄存器 P3 B0H P3口锁存器 IE A8H 中断允许控制寄存器 P2 A0H P2口锁存器 SBUF 99H 串行口锁存器 SCON 98H 串行口控制寄存器 P1 90H P1口锁存器 TH1 8DH 定时器/计数器1(高8位)TH0 8CH 定时器/计数器1(低8位)TL1 8BH 定时器/计数器0(高8位)TL0 8AH 定时器/计数器0(低8位) TMOD 89H 定时器/计数器方式控制寄存器 TCON 88H 定时器/计数器控制寄存器 DPTR 82H 83H 83H数据地址指针(高8位) PC SP 81H 堆栈指针 P0 80H P0口锁存器 PCON 87H 电源控制寄存器 、PSW-----程序状态字。 D7D6D5D4D3D2D1D0 CY AC F0 RS1 RS0 OV P 下面我们逐一介绍各位的用途 CY:进位标志。 AC:辅助进、借位(高半字节与低半字节间的进、借位)。 F0:用户标志位,由用户(编程人员)决定什么时候用,什么时候不用。 RS1、RS0:工作寄存器组选择位。这个我们已知了。 0V:溢出标志位。运算结果按补码运算理解。有溢出,OV=1;无溢出,OV=0。什么是溢出我们后面的章节会讲到。

P :奇偶校验位:它用来表示ALU 运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,否则为0。 运算结果有奇数个1,P =1;运算结果有偶数个1,P =0。 例:某运算结果是78H (01111000),显然1的个数为偶数,所以P=0。 定时/计数器寄存器 1.工作方式寄存器TMOD(P134) TMOD 为T0.T1的工作方式寄存器,其各位的格式如下:TMOD D7 D6 D 5 D4 D3 D2 D1 D0 GATE C/-T M1 M0 GATE C/-T M1 M0 定时器1 定时器0 位7 GATE ——T1的门控位。 当GATE=0时,只要控制TR1置1,即可启动定时器T1开始工作; 当GATE=1时,除需要将TR1置1外,还要使INT1引脚为高电平,才能启动相应的定时器开始工作。 位6 C/—T ——T1的功能选择位。 当C/—T=0时,T1为定时器方式; 当C/—T=0时,T1为计数器方式; 位5和位4 M1和M0——T1的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T1工作方式选择表 如右表: 位3 GATE ——T0的门控位。 当GATE=0时,只要控制TR0置1,即可启动定时器T0开始工作; 当GATE=1时,除需要将TR0置1外,还要使INT0引脚为高电平,才能启动相应的定时器开始工作。 位2 C/T ——T1的功能选择位。 当C/—T=0时,T0为定时器方式; 当C/—T=0时,T0为计数器方式; 位1和位0 M1和M0—T0的方式选择位。 由这两位的组合可以定义T1的3种工作方式 定时器T0工作方式选择表 TMOD 不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半节定义定时器0,高半字节定义定时器1。复位时,TMOD 所有位均为0,定时器处于停止工作状态。 定时/计数器控制寄存器中断请求标志寄存器TCON(P183) TCON 的作用是控制定时器的启/停,标志定时器的溢出和中断情况。定时器控制寄存器TCON 各位格式如下:TCON(88H) 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 当有中断源发出请求时,有硬件将相应的中断标志位置 1.在中断请求被响应前,相应中断标志位被锁存在特殊功能寄存器TCON 或SCON 中。 TCON 为定时器T0和T1的控制寄存器,同时也锁住T0和T1的溢出中断标志及外部中断——INT0和— M1 M0 工作方式 功能描述 0 0 方式0 13位计数器 0 1 方式1 16位计数器 1 0 方式 2 自动再装入8位计数器 1 1 方式3 定时器1:停止计数 M1 M0 工作方式 功能描述 0 0 方式0 13位计数器 0 1 方式1 16位计数器 1 0 方式 2 自动再装入8位计数器 1 1 方式3 定时器0:分成2个8位计数器

寄存器(register)

寄存器 Scope of register: 寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。 1、寄存器- 特点及原理 寄存器又分为内部寄存器与外部寄存器,所谓内部寄存器,其实也是一些小的存储单元,也能存储数据。但同存储器相比,寄存器又有自己独有的特点: ①寄存器位于CPU内部,数量很少,仅十四个; ②寄存器所能存储的数据不一定是8bit,有一些寄存器可以存储16bit数据,对于386/486处理器中的一些寄存器则能存储32bit数据; ③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。 寄存器的功能十分重要,CPU对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与CPU之间通过“端口”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为“端口”,这种说法不太严格,但经常这样说。 外部寄存器虽然也用于存放数据,但是它保存的数据具有特殊的用途。某些寄存器中各个位的0、1状态反映了外部设备的工作状态或方式;还有一些寄存器中的各个位可对外部设备进行控制;也有一些端口作为CPU同外部设备交换数据的通路。所以说,端口是CPU和外设间的联系桥梁。CPU对端口(Ports)的访问也是依据端口的“编号”(地址),这一点又和访问存储器一样。不过考虑到机器所联接的外设数量并不多,所以在设计机器的时候仅安排了1024个端口

寄存器简单理解

GPIOB_BASE是一个地址,这个地址是GPIOB一系列寄存器的首地址,后面地址依次是GPIOB 的寄存器,将这个地址转换为结构体形式,并将后面寄存器按顺序定义在结构体里面,这样访问寄存器就可以通过引用结构体的形式了而不必书写寄存器的地址来访问寄存器。 寄存器用途: 1.可将寄存器内的数据执行算术及逻辑运算; 2.存于寄存器内的地址可用来指向内存的某个位置,即寻址; 3.可以用来读写数据到电脑的周边设备。 AX 累加器,得名原因是最初常使用ADD AX,n这样的指令 CX 计数器,得名原因是最常使用CX的值作为重复操作的次数 BX 常用作地址寄存器,如MOV AX,[BX],把BX所指地址中的数取到AX中去 DX 通用寄存器 所讲的寄存器都是以x86为基础的,那么这种CPU内,寄存器可分为以下几种: 1.EAX、EBX、ECX、EDX等通用寄存器——从通用上来讲,它所存储的东西,只要它的容积所容许的话,什么都是可以存储的; 2.CS、SS、ES等段寄存器——它所存储的只能是地址,它的作用是从寻址上可以体现出来; 3.EIP,也称为指令指针 4.EFLAGS寄存器,俗称为标志寄存器——所存储的是与CPU的每一个执行的指令有关。是关系到CPU每一个指令的执行相关内容与特殊的关联,即CPU所执行的指令是否违规,它的指令是否有进位,它的指令是否有溢出,都是在标志寄存器中能表现与表达出来; 5.浮点单元,这里面之所以只浮点单元,是因为在它里面还有一些小的寄存分类,主要是数学上的浮点上的计算 6.MMX指令使用的8个64位寄存器 7.单指令、多数据操作(SIMD,single-instruction,multiple-data)使用的8个128位XMM寄存器

msp430状态寄存器介绍概括

寄存器实在太多了。。我有个文档给你看看吧、、 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 输入寄存器*/

ATMEGA16的IO端口

第九课A Tmega16(L)的IO端口 本教程节选自周兴华老师《手把手教你学A VR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书实验器材,可登陆周兴华单片机培训中心网购部自助购买! ATmega16(L)单片机有32个通用I/O口,分为PA、PB、PC和PD四组,每组都是8位。这些I/O 口都可以通过各自的端口寄存器设置成输入和输出(即作为普通端口使用),有些I/O口还具有第二功能(我们在后面使用到这些第二功能时再介绍)。 ATmega16(L)单片机的I/O口在不考虑第二功能时,其基本输入输出功能都是相同的。如图7-1所示为ATmega16(L)单片机I/O口的结构图。每个端口对应3个寄存器,即方向寄存器DDRX(X=A、B、C、D)、端口寄存器PORTX(X=A、B、C、D)、输入引脚PINX(X=A、B、C、D),各个端口的工作状况都可以通过对DDRX、PORTX和PINX的操作来完成。所有的A VR单片机的I/O端口都具有读、写和修改功能。表7-1列出了A Tmega16(L)的I/O端口的组合控制设置。 ATmega16(L)单片机每一组I/O口的所有管脚都可以单独选择上拉电阻。引脚缓冲器可以吸收20mA 的电流,能够直接驱动LED显示。如果设置了弱上拉电阻,当管脚被拉低时,引脚会输出电流。1.DDRX DDRX为端口方向寄存器。当DDRX的某一位置1时相应引脚作为输出使用。反之,当DDRX的某一位置0时,对应的引脚单片机培训作为输入使用。 例如: DDRB=0xF0;//此语句将PB端口的PB0~PB3位设为输入,而PB4~PB7位设为输出。2.PORTX PORTX为端口数据寄存器。 如果引脚设为输出,则对PORTX进行写操作即改变引脚的输出值。

单片机IO口定义

单片机I/O口定义 I/O端口又称为I/O接口,也叫做I/O通道或I/O通道。I/O端口是MCS-51单片机对外部实现控制和信息交换的必经之路,是一个过渡的集成电路,用于信息传送过程中的速度匹配和增强它的负载能力。I/O端口右串行和并行之分,串行I/O端口一次只能传送一位二进制信息,并行I/O端口一次可以传送一组(8位)二进制信息。 并行I/O端口 8051有四个并行I/O端口,分别命名为P0、P1、P2和P3,在这四个并行I/O端口中,每个端口都有双向I/O功能。即CPU即可以从四个并行I/O端口中的任何一个输出数据,又可以从它们那里输入数据。每个I/O端口内部都有一个8位数据输出锁存器和一个8位数据输入缓冲器,四个数据输出锁存器和端口号P0、P1、P2和P3同名,皆为特殊功能寄存器SFR中的一个。因此,CPU数据从并行I/O端口输出时可以得到锁存,数据输入时可以得到缓冲。 四个并行I/O端口在结构上并不相同,因此它们在功能和用途上的差异较大。P0口和P2口内部均有一个受控制器控制的二选一选择电路,故它们除可以用作通用I/O口外,还具有特殊的功能。例如:P0可以输出片外存储器的低八位地址码和读写数据,P2口可以输出片外存储器的高八位地址码,等等。P1口常作为通用I/O口使用,为CPU传送用户数据;P3口除可以作为通用I/O口使用外,还具有第二功能。在四个并行I/O端口中,只有P0口是真正的双向I/O口,故它具有较大的负载能力,最多可以推动8个LSTTL门,其余3个

I/O口是准双向I/O口,只能推动4个LSTTL门。 四个并行I/O端口作为通用I/O使用时,共有写端口、读端口和读引脚三种操作方式,写端口实际上是输出数据,是把累加器A或其他寄存器中的数据传送到端口锁存器中,然后由端口自动从端口引脚线上输出。读端口不是真正的从外部输入数据,而是把端口锁存器中的输出数据读到CPU的累加器A中。读引脚才是真正的输入外部数据的操作,是从端口引脚线上读入外部的输入数据。端口的上述三种操作书架上是通过指令或程序来实现的。 串行I/O端口 8051有一个全双工的可编程串行I/O端口。这个串行I/O端口既可以在程序控制下把CPU中的8位并行数据编程串行数据逐行从发送数据线TXD发送出去,也可以把RXD线上串行接收到的数据变成8位并行数据送给CPU,而且这种串行发送和串行接收可以单独进行,也可以同时进行。 8051串行发送和串行接收利用了P3口的第二功能,即它利用P3.1引脚作为串行数据的发送线TDX和P3.0引脚作为串行数据的接收线RXD,串行口I/O口的电路结构还包括串行口控制寄存器SCON,电源及波特率选择寄存器PCON和串行数据缓冲器SBUF等,它们都属于SFR(特殊功能寄存器)。其中,PCON和SCON用于设置串行口工作方式和确定数据的发送和接收波特率,SBUF实际上有两个8位寄存器组成,一个工作方式和确定数据的发送和接收比特率,另一个用于存放接收到的数据,起着数据的缓冲作用。

UART寄存器介绍

UART寄存器介绍 UARTn_BR: UART波特率寄存器 UARTn_BR[15:0]: 由定时器的装入寄存器定时装入相应内容。 UARTn_CR.Run=0可以装入直到UARTn_CR.Run=1才写入无效 UARTn_TxBUFR:UART传输寄存器 UARTn_TxBUFR[8]: 传输数据第八位或者奇偶校验位或者唤醒位或者未定义的位有相应操作模式决定 1.如果是001模式则此位写0 2.如果是8+校验111模式则此位由UART自己处理写入软件操作无效 UARTn_TxBUFR[7]: 传输数据第七位或者奇偶校验位 1.如果是7+校验011模式同样此位由UART自己处理写入软件操作无效 UARTn_TxBUFR[6:0]:数据位 UARTn_RxBuffer: UART接收寄存器 RX[9]:桢错误标志1表示此桢有问题 RX[8]:接收数据位8,或者奇偶校验位或者唤醒位

RX[7]:接收数据位7,或者奇偶校验位 RX[6:0]:数据位 UARTn_CR:UART控制寄存器 CR[15-11]保留都是0 CR[10]FifoEnble队列模式0关闭表示TxFIFO认为是包含了16位数据才是满栈 1是开启表示TxFIFO认为当前就是才是满栈直接置TxFULL位 CR[9]SCENBLE 智能卡关闭还是开启不使用则置0 CR[8]RxEnble 接收功能关闭开启由下降沿来触发RXD脚初始化 CR[7]Run=0波特率无用=1则有用 CR[6]LoopBack=0标准的接收和发送模式=1是特殊模式。此位只由UART无效被改变 CR[5]ParityOdd选择奇偶校验=0则为偶校验=1为奇校验CR[43]StopBits 00 0.5停止位01是1个停止位10是1.5个11是2个 CR[2:0] MODE 5种模式 UARTn_IER UART的中断允许寄存器 15-9保留位为0 8 RxHalfFullIE 接收存储器超过8位则置

IO端口复用的几种方式

IO端口复用 简介 I/O多路复用(multiplexing):本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。 适用场景:高并发的服务器端。应对并发,常见的思维是创建多线程,每个线程管理一个并发操作,但是弊端很明显,就是多线程需要上下文切换,这个切换的消耗太大,当连接的客户端很多的时候弊端就很突出了。所示使用单线程的多路复用。 几种方式 1.s elect Linux提供的select相关函数接口如下: #include #include int select(int max_fd, fd_set *readset, fd_set *wri teset, fd_set *exceptset, struct timeval *timeout) FD_ZERO(int fd, fd_set* fds) /* 清空集合 */ FD_SET(int fd, fd_set* fds) /* 将给定的描述符加入集合 */ FD_ISSET(int fd, fd_set* fds) /* 将给定的描述符从文

件中删除 */ FD_CLR(int fd, fd_set* fds) /* 判断指定描述符是否 在集合中 */ 接口解释: 1:select函数的返回值就绪描述符的数目,超时时返回0,出错返回-1。 2:第一个参数max_fd指待测试的fd个数,它的值是待测试的最大文件描述符 加1,文件描述符从0开始到max_fd-1都将被测试。 3:中间三个参数readset、writeset和exceptset指定要让内核测试读、写和异 常条件的fd集合,如果不需要测试的可以设置为NULL。 代码演示: sockfd=socket(AF_INET,SOCK_STREAM,0); memset(&addr,0,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(2000); addr.sin_addr.s_addr=IN ADDR_ANY; bind(sockfd,(struct sockaddr*)&addr,sizeof(addr)); listen(sockfd,5); fd_set rset; int max = 0; int fds[5]; for(int i=0;i<5;i++) { memset(&client,O,sizeof(client); addrlen=sizeof(client); fds[i]=accept(sockfd,(struct sockaddr*) &client,&addrlen); if(fds[i]>max) max=fds[i]; } while(1)

14、芯片与寄存器的介绍

理解芯片控制的原理 如果要说做单片机很难吗?其实并不难,用3句话就可以讲明白: 第1句话:芯片管脚不是输入,就是输出。 我们所有的程序,用单片机控制的产品,以及外设,无非就是控制芯片的各个管脚输入或者输出两个状态;例如,芯片发送数据就是输出;芯片驱动一个产品,也是输出;芯片接收数据就是输入;单片机对一个存储芯片写输入,可以理解为单片机与存储芯片连接的管脚输出状态,输出数据到存储芯片的管脚上,而存储芯片此时它的芯片对应管脚被配置成输入,将数据写入到芯片内部。 所以说,芯片管脚不是输入,就是输出,当然,如果你不使用这个管脚,也可以将它配置成某一种中间状态,免得干扰了外界,影响了PCB板上的其他元器件状态。 第2句话:芯片管脚不是高电平,就是低电平。 无论管脚是输入还是输出,它的目的是传输数据,传输信息,所以要么是高电平,要么低电平,通过010101这样的数据来传输它想传输的内容;这个就是所谓的二进制。 第3句话:传输协议。 什么是传输协议,比如与串口芯片通信,那么就要是串口协议的;如果是I2C 协议的EERPOM,那么就是I2C协议;还有其他一些比如485协议,CAN协议,USB协议,SD卡的SDIO协议…….等等数不胜数。 而这些协议,无非就是按照预先规定的表达方式进行通信,比如举个例子,我约定先连续发4个1,,然后再发4个0,就表示芯片A要开始发数据给芯片B 了,即芯片A通过它的芯片管脚发‘11110000’给到芯片B的时候,那么芯片B 就知道芯片A要给它真正的数据,它就要做好准备工作,准备好之后,芯片B 就会给芯片A一个回应,当芯片A收到芯片B的回应,就正式开始发数据。 这样通信双方之间的协商规定,就构成了协议,经过这么多年,就形成了我们所常见到的串口协议,CAN协议,USB协议(像USB协议又分为USB1.0协议,USB2.0协议,USB3.0协议,版本越高,速度就越快,协议进行优化后,通信效率也变高了)。 不知道大家理解了没有呢?所以总结下来,一个芯片最简单的外设莫过于 I/O口的高低电平控制,我们这里将详细讲解一下如何用一个I/O口去控制一个LED灯的亮灭。

段寄存器的工作原理

一、段寄存器的产生 段寄存器的产生源于Intel 8086 CPU体系结构中数据总线与地址总线的宽度不一致。 数据总线的宽度,也即是ALU(算数逻辑单元)的宽度,平常说一个CPU是“16位”或者“32位”指的就是这个。8086CPU的数据总线是16位。 地址总线的宽度不一定要与ALU的宽度相同。因为ALU的宽度是固定的,它受限于当时的工艺水平,当时只能制造出16位的ALU;但地址总线不一样,它可以设计得更宽。地址总线的宽度如果与ALU相同当然是不错的办法,这样CPU的结构比较均衡,寻址可以在单个指令周期内完成,效率最高;而且从软件的解决来看,一个变量地址的长度可以用整型或者长整型来表示会比较方便。 但是,地址总线的宽度还要受制于需求,因为地址总线的宽度决定了系统可寻址的范围,即可以支持多少内存。如果地址总线太窄的话,可寻址范围会很小。如果地址总线设计为16位的话,可寻址空间是2^16=64KB,这在当时被认为是不够的;Intel最终决定要让8086的地址空间为1M,也就是20位地址总线。 地址总线宽度大于数据总线会带来一些麻烦,ALU无法在单个指令周期里完成对地址数据的运算。有一些容易想到的可行的办法,比如定义一个新的寄存器专门用于存放地址的高4位,但这样增加了计算的复杂性,程序员要增加成倍的汇编代码来操作地址数据而且无法保持兼容性。 Intel想到了一个折中的办法:把内存分段,并设计了4个段寄存器,CS,DS,ES和SS,分别用于指令、数据、其它和堆栈。把内存分为很多段,每一段有一个段基址,当然段基址也是一个20位的内存地址。不过段寄存器仍然是16位的,它的内容代表了段基址的高16位,这个16位的地址后面再加上4个0就构成20位的段基址。而原来的16位地址只是段内的偏移量。这样,一个完整的物理内存地址就由两部分组成,高16位的段基址和低16位的段内偏移量,当然它们有12位是重叠的,它们两部分相加在一起,才构成完整的物理地址。 Base b15 ~ b12 b11 ~ b0 Offset o15 ~ o4 o3 ~ o0 Address a19 ~ a0 这种寻址模式也就是“实地址模式”。在8086中,段寄存器还只是一个单纯的16位寄存器,而且操作寄存器的指令也不是特权指令。通过设置段寄存器和段内偏移,程序就可以访问整个

io端口与中断

I/O端口基本知识 (2010-03-06 09:20:50) 转载 1.什么是I/O端口? CPU使用什么指令与外设进行数据交换? 答:CPU与I/O设备通过硬件接口或控制器相连接,这些接口或控制器都有数量不等的端口,这些端口有统一的地址编码,CPU通过这些端口使用输入输出指令IN、OUT与外设进行数据交换。 2.CPU为什么不能用MOV指令进行I/O数据传输? 答:在80x86微机系统中,I/O端口编址在一个独立的地址空间中,它和存储器是完全分离的。因此,对于存储器的存取操作使用MOV指令,而与端口进行信息交换的操作使用专门的I/O指令,二者不能混淆。 3.使用查询方式进行输入输出的优缺点是什么? 答:使用查询方式编程可直接在端口级上输入输出信息,数据的传送速度和吞吐量比较高,另外在控制多个设备的I/O时,可在程序中安排它们的优先级,最先查询的设备,其工作的优先级也最高。修改程序中的查询次序,实际上也就修改了设备的优先级,这样以最简便的方法实现了对设备优先级的控制。查询方式的缺点主要是在查询过程中,要反复的查询等待,浪费了CPU原本可执行大量指令的时间,而且由询问转向相应的处理程序的时间较长,尤其在设备比较多的情况下。 4.什么是中断? 答:计算机在执行程序过程中,遇到需要处理的事件时,暂停当前正在运行的程序,转去执行有关的服务程序,处理完后自动返回原程序,这个过程称为中断(interrupt)。中断在现代计算机系统中是一种非常重要的技术,输入输出设备和主机交换数据、分时操作、实时系统、多处理机系统、计算机网络和分布式计算机系统都要用到这种技术。 5.中断分为几类? 答:中断可分为内中断和外中断。内中断是由计算机内部原因引起的中断,内中断又称为软中断,它通常由三种情况引起: (1) 由中断指令INT引起;

AD9833详细原理解析(附内部寄存器说明)

基于AD9833的高精度可编程波形发生器系统设计 来源:国外电子元器件 1 引言 频率合成器在通信、雷达和导航等设备中既是发射机的激励信号源,又是接收机的本地振荡器;在电子对抗设备中可作为干扰信号发生器;在测试设备中则作为标准信号源。因此频率合成器被称为许多电子系统的“心脏”。而设计高精度,易于操作的频率合成器则是核心,因此,这里提出了一种基于DDS AD9833的高精度波形发生器系统解决方案。用户可直接编辑设置所需的波形频率和峰峰值等信息,利用串口将配置信息发送到电路板,实时控制波形。该系统设计已成功应用于某型雷达测速仪测试设备。 2 AD9833简介 AD9833是ADI公司的一款低功耗、DDS器件,能够输出正弦波、三角波、方波。AD9833无需外接元件,输出频率和相位可通过软件编程设置,易于调节。其频率寄存器为28位,主频时钟为25 MHz时,其精度为0.1 Hz;主频时钟为l MHz时.精度可达0.004 Hzt2。 AD9833内部有5个可编程寄存器:1个16位控制寄存器,用于设置器件_T 作模式;2个28位频率寄存器和2个12位相位寄存器,分别用于设置器件输出正弦波的频率和相位。AD9833有3根串行接口线,可与SPI,QSPI,MICRO-WIRE 和DSP接口标准相兼容。在串口时钟SCLK的作用下,数据是以16位方式加载至设备。 AD9833的内部电路主要有数控振荡器(NCO)、频率和相位调节器、SineROM、D/A转换器、电压调整器。AD9833的核心是28位的相位累加器,它由加法器和相位寄存器组成,而相位寄存器是按每个时钟增加步长,相位寄存器的输出与相位控制字相加后输入到正弦查询表地址中。正弦查询表包含1个周期正弦波的数字幅值信息,每个地址对应正弦波中O。~360°内的1个相位点。查询表把输入的地址相位信息映射成正弦波幅值的数字量信号,驱动D/A转换器输出模拟量。 输出正弦波频率为: 式中:FREQREG为频率控制字,由频率寄存器FREQOREG或FREQlREG的值给定,其范围为0≤M<228一1。fMCLK为参考时钟频率。 输出正弦波的相位为2π/4 096xPHASEREG,其中PHASEREG是所选相位寄存器的值。输出正弦波的峰峰值固定.约600 mV,且正弦波不是标准正弦波,即波谷是0 V,而不是负电压。因此,输出正弦波为: 式中:K约600 mV,与器件内部参考电压有关。

PIC24FJ32的IO端口使用简介

NOTE1-PIC24FJ32GA004系列的IO端口使用简介介绍针对PIC24FJ32GA004或相同系列单片机IO端口使用。 1、IO寄存器 TRISx:方向寄存器 PORTx:端口寄存器 LATx:锁存寄存器 ODCx:漏极输出控制寄存器 2、寄存器使用 TRISx:控制端口输入输出属性。其中某位为1,引脚输入(input);为0,引脚输出(output)。 PORTx:读PORTX,是直接读引脚上的电平状态(见图)。 写PORTX,将数值写入引脚数据锁存器(见图)。 PIC单片机引脚操作模式为“读出--修改--写入”,使用PORTX操作引脚时应注意两点,一是在单片机初始化之后的运行中尽量不改变端口输入输出方向,容易出问题,二是IO端口避免链接容性负载,此种在高速操作IO端口时会出问题,比如输出快速变化的高低电平时,每次输出都会读取一次端口寄存器数值。 LATx:读LATX,得到保存在端口数据锁存器中的值(该值为写LATX或PORTX后所得)。 写LATx,讲数值写入引脚数据锁存器,与写PORTX效果相同。 通过LATX操作端口IO,可避免上述因“读出--修改--写入”模式造成的问题。 ODCx:将引脚的相应位置1可配置引脚为漏极开路输出。

3、IO端口使用原则 (1)端口用作出入,需要直接读取外部引脚上的电平状态,使用PORTX寄存器:int V ALUE=PORTA; (2)端口用作输出,输出高低电平,驱动芯片等使用LATX寄存器: LATA=0XFFEE; 4、IO端口使用的位操作 可以使用P24FJ32GA004.h中定义的位操作宏定义对单片机的IO端口以及其他众多单片机寄存器进行位操作。 如:_LATB0=1; RB0输出高电平 以端口B为例,针对PIC24F系列的位操作被定义如下形式: /* TRISB */ #define _TRISB0 TRISBbits.TRISB0 #define _TRISB1 TRISBbits.TRISB1 …… #define _TRISB15 TRISBbits.TRISB15 /* PORTB */ #define _RB0 PORTBbits.RB0 #define _RB1 PORTBbits.RB1 …… #define _RB15 PORTBbits.RB15 /* LATB */ #define _LATB0 https://www.360docs.net/doc/ad13176404.html,TB0 #define _LATB1 https://www.360docs.net/doc/ad13176404.html,TB1 …… #define _LATB15 https://www.360docs.net/doc/ad13176404.html,TB15 /* ODCB */ #define _ODB0 ODCBbits.ODB0

ARM寄存器简介

ARM寄存器简介 ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。 (1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。 (2)6个状态寄存器:状态寄存器也是32位的寄存器,但是只使用了其中的12位。 1.通用寄存器 在ARM处理器的7种模式下都有一组对应的寄存器组。在任意时刻,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状态寄存器和PC。在所有的寄存器中,有些是各种模式下共用的同一个物理寄存器,有些是各种模式自己独立拥有的物理寄存器。详细如表1-3所示。 表1-3 ARM物理寄存器 用户模式系统模 式特权模式中止模式未定义指令 模 外部中断模快速中断模 R0 R0 R0 R0 R0 R0 R0 R1 R1 R1 R1 R1 R1 R1 R2 R2 R2 R2 R2 R2 R2 R3 R3 R3 R3 R3 R3 R3 R4 R4 R4 R4 R4 R4 R4 R5 R5 R5 R5 R5 R5 R5 R6 R6 R6 R6 R6 R6 R6 R7 R7 R7 R7 R7 R7 R7 R8 R8 R8 R8 R8 R8 R8_fiq R9 R9 R9 R9 R9 R9 R9_fiq R10 R10 R10 R10 R10 R10 R10_fiq R11 R11 R11 R11 R11 R11 R11_fiq R12 R12 R12 R12 R12 R12 R12_fiq R13 R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14 R14 R14_svc R14_abt R14_und R14_irq R14_fiq PC PC PC PC PC PC PC CPSR CPSR CPSR CPSR CPSR CPSR CPSR SPSR_svc S PSR_abt SPSR_und SPSR_irq SPSR_fiq 通用寄存器通常又可以分为下面3类。 n 未备份寄存器:包括R0~R7。 n 备份寄存器:包括R8~R14。

SDHC部分寄存器介绍

11.3.2 K60的SD模块存储器映像与寄存器定义 K60的SDHC模块主要使用到表11-6中寄存器,其他寄存器详细信息可参见网络光盘中的本章阅读材料。 表11-6 SDHC模块部分寄存器列表 1.块属性寄存器(Block Attributes Register,SDHC_BLKATTR) 这个寄存器是用来配置数据块数和每块的字节数。 图52-4 SDHC_BLKATTR D31~D16—BLKCNT位,当前传输的块数。当XFERTYP[BCEN]被置1时,该寄存器有用,仅用于多块间传输。主驱动应设定该寄存器为从1到最大块数(最大为65535块)之间的一个值,每块传输并停止后,该域自减1,直到块数为0。设定块数为0将导致没有数据块传输。当XFERTYP [MSBDEL]位被清零时,只能单块传输,BLKCNT的读值总为1。当为0时,表示停止计数;为1时,表示1块;为0xFFFF时,表示65535块。 D15~D13—保留。 D12~D0—BLKSIZE位,传输块的大小。该寄存器为块数据传输时,每块数据大小,其值可被设定为1字节到最大缓冲值(最大为4096字节)之间的数。该域在SDHC空闲时,修改才有效。传输期间的读操作可能发回一个无效值,且修改无效。当为0时,表示无数据传输;为1时,表示1字节;为0x1000时,表示4096块。 2.命令参数寄存器(Command Argument Register,SDHC_CMDARG) 该寄存器用于写入SD/MMC操作命令参数。 D31~D0—CMDARG位,命令内容。在SD或MMC的协议中,SD/MMC命令内容被

指定在命令格式的39-8位。当PRSSTAT[CDIGBO]为1,该寄存器被写保护。 3.传输类型寄存器(Transfer Type Register,SDHC_XFERTYP) D31~D30—保留。 D29~D24—CMDINX位,命令索引。在SD储存卡物理层协议和SDIO卡协议中,这些位的命令应设为命令格式的45-40位。 D23~D22—CMDTYP位,命令类型。一共可以设置四种命令类型,执行普通命令时,该域为0。3种特殊类型命令:暂停,重新开始,和中止命令。暂停命令:如果暂停命令成功,SDHC模块认为总线已经释放,并有可能使用DAT通道发出下一个命令;重新开始命令:主驱动通过在发送暂停命令之前,恢复寄存器储存值重新开始数据传输,并发送重新开始命令;中止命令:如果当执行读传输时发送该命令,SDHC将停止读入缓冲。如果当执行写传输时发送该命令,SDHC将停止DAT通道。终止命令发放后,主机驱动器发送一个软件复位命令。 D21—DPSEL位,传输时的数据选择。当该域为1时,表明数据需要发送并且通过DAT 通道传输。当该域为0时,表明命令仅通过CMD通道或没有数据传输的命令,但使用繁忙信号通道DAT[0]。 D20—CICEN位,命令索引检测使能。如果该位置1,SDHC将检测响应值是否与命令索引相等。如果不等,将报告命令索引错误;如果该位置0,则不检测响应。 D19—CCCEN位,命令CRC检测使能。如果该位置1,SDHC将检测响应的CRC字段。如果检测到错误则报告命令CRC错误。如果该位置0,不检测CRC段,这些位由CRC 字段值根据响应长度的变化检测。 D18—保留。 D17~D16—RSPTYP位,响应类型。00b:无响应;01b:响应长度136;10b:响应长度48;11b:响应长度48,响应后检测忙碌状态。 D15~D6—保留。 D5—MSBSEL位,多/单块选择。该位控制多块DAT通道数据传输,对其他命令,该位应置为0。如果该位为1,就不必设定块计数寄存器。 D4—DTDSEL位,数据传输方向选择。该位定义了DAT通道数据发送的方向。当主驱动从SD卡发送数据到SDHC时该位置1,其他命令时则置0。 D3—保留。 D2—AC12EN位,自动CMD12使能。存储器的多块传输需要CMD12停止事务。当该位为1,在最后块传输完成后,SDHC将自动发出一个CMD12。主驱动发出的命令不需

IO口结构详解

1.什么是源型、漏型?什么是上拉电阻?下拉电阻?什 么是线驱动输出、集电极开路输出、推挽式输出? 我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极c跟发射极e之间相当于断开),所以5v电源通过1k电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。 我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。 再看图三。图三中那个1k的电阻即是上拉电阻。如果开关闭合,则有电流从1k电阻及开关上流过,但由于开关闭和时电阻为0(方便我们的讨论,实际情况中开关电阻不为0,另外对于三极管还存在饱和压降),所以在开关上的电压为0,即输出电平为0。如果开关断开,则由于开关电阻为无穷大(同上,不考虑实际中的漏电流),所以流过的电流为0,因此在1k电阻上的压降也为0,所以输出端的电压就是5v了,这样就能输出高电平了。但是这个输出的内阻是比较大的(即1kω),如果接一个电阻为r的负载,通过分压计算,就可以算得最后的输出电压为5*r/(r+1000)伏,即5/(1+1000/r)伏。所以,如果要达到一定的电压的话,r就不能太小。如果r真的太小,而导致输出电压不够的话,那我们只有通过减小那个1k的上拉电阻来增加驱动能力。但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要综合这些电流考虑来选择合适的上拉电阻。 如果我们将一个读数据用的输入端接在输出端,这样就是一个io口了(51的io口就是这样的结构,其中p0口内部不带上拉,而其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为1即可,这样就相当于那个开关断开,而对于p0口来说,就是高阻态了。 对于漏极开路(od)输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,oc就变成了od,原理分析是一样的。

单片机寄存器名称

【转】【51单片机特殊功能寄存器功能一览表】 Posted on 2011-03-26 15:07 香格里拉\(^o^)/阅读(688) 评论(0)编辑收藏 【转】【51单片机寄存器功能一览表】 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能 寄存器(SF R)。这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):

分别说明如下: 1、ACC---是累加器,通常用A表示 这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。该标志常用作程序分枝转移的判断条件。 2、B--一个寄存器 在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW-----程序状态字。 这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。它的各位功能请看下表: 下面我们逐一介绍各位的用途 CY:进位标志。 8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。有进、借位,CY=1;无进、借位,CY=0 例:78H+97H(01111000+10010111) AC:辅助进、借位(高半字节与低半字节间的进、借位)。

相关文档
最新文档