当前位置:文档之家› STM NVIC中断向量表设置以及E TI中断寄存器设置

STM NVIC中断向量表设置以及E TI中断寄存器设置

STM NVIC中断向量表设置以及E TI中断寄存器设置
STM NVIC中断向量表设置以及E TI中断寄存器设置

NVIC中断向量表设置以及EXTI中断寄存器设置

一、开始中断的步骤

A.端口设置。这里包括了输入引脚的设置,务必记得打开GPIO的时钟和AFIO的时钟

信号

B.中断寄存器的设置

C.NVIC中断向量寄存器的设置。这里关键点有优先级分组设置以及中断入口地址的设

D.中断函数的书写

二、具体设置

1、端口设置

void GPIOA_init(void)

{

GPIO_DeInit(GPIOA);

RCC->APB2ENR |= 0X00000005;

GPIOA->CRL &= 0XFFFFFF00;

GPIOA->CRL |= 0x00000038;

GPIOA->ODR = 0X00000000;

GPIOA->ODR |= 0X00000001;

AFIO->EXTICR[0] |= 0X00;

}

a.在对端口进行任何操作之前,必须打开对应的时钟信号,其设置才能生效。这里使

用了GPIOA.00端口作为中断0输入,作为输入时一般我们设置为上拉输入,如果要设置成浮空输入的话,外部一定要加上拉电阻,这样对于过滤输入波动很有益处(假设在电压在3.3-2.0之间进行波动,时间上没尝试按键操作,因为一旦有按键,就应该为0,那么接了上拉的话,除非产生了低电平,否则小波动都会被拉高过滤掉)

b.复用端口时钟信号的开启

这里需要特别注意的是因为我们要对复用端口寄存器进行操作,所以必须打开复用端口寄存器时钟

c.AFIO->EXTICR[0] |= 0X00 ,EXTICR(External interrupt configuration register)即外部中断

配置寄存器。因为所有的外部中断输入来源都是经由GPIO口输入的,所以我们需要选择哪一个中断是经由那个IO口输入的。我所写的这条代码的意思是EXTI0的中断来源为GPIOX_0口输入。

图1

从寄存器配置中我们可以看到每个中断由四位配置,那么STM32总计有16个外部中断(具体参照STM32参考手册P133页),因此EXTIR有四组,在书写时要注意。

具体对应关系如下:0000: PA[x] pin,0001: PB[x] pin,0010: PC[x] pin,0011: PD[x] pin 0100: PE[x] pin,0101: PF[x] pin,0110: PG[x] pin。假设我们需要设定外部中断0由GPIOB_0来控制,那么我就可以写成AFIO->EXTIR[0] |=0X01;

2、中断寄存器的设置

A.首先我们可以观察一下下图

图2

从图中,我们可以看到和中断相关的寄存器总共有6个,他们分别是

1.EXTI_IMR(Interrupt mask register )中断屏蔽寄存器。

图3

该寄存器复位值为0,往对应寄存器内写1则打开中断

2. EXTI_EMR( Event mask register )中断事件屏蔽寄存器

图4

3. EXTI_RTSR(Rising trigger selection register)上升沿触发寄存器

图5

4. EXTI_FTSR (Falling trigger selection register)下降沿触发器

图6

需要说明的是,作为外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。5. EXTI_SWIER (Software interrupt event register) 软件中断事件寄存器

图7

我们可以通过对相应位置写1,来软件触发中断,对响应PR位写1,清除软件中断。该寄存器复位值为0

6. EXTI_PR (Pending Register) 中断挂起寄存器

图8

该寄存器复位值是不确定的,如果某个激活了某个中断,则对应的挂起位会置1,如果要手动清除挂起,则我们需要往对应位写1.

这里需要说明一下,就是中断和中断事件不是同一个概念。从图2中我们可以看到两者的来源都是一致的,但是中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD 转换等。

分析程序

void EXTI_Inition(void)

{

EXTI->IMR = 0X0001;

// EXTI->EMR = 0X0001;

EXTI->FTSR = 0X0001;

// EXTI->RTSR = 0X0001;

}

第一条语句,我们打开了中断0的使能信号,第二句是打开中断事件寄存器(在软件仿真我们选择关闭),第三、四行选择触发方式。

3、NVIC中断向量寄存器设置

该部分在STM32参考手册里没有详细的介绍,关于这部分我们可以从Cortex M3的编程手册里了解到。涉及到的寄存器如下图

图9

我们需要操作的寄存器有

a.ISER(Interrupt Set-Enable Register)-中断使能寄存器,该寄存器通过写1来使能中断,

写0无效

b.ICER(Interrupt Clear-Enable Register)-中断失能寄存器,通过对相应位写1,失能中断,

写0无效

c.ISPR(Interrupt Set- Pending Register)-中断挂起寄存器,写0,无效,但当中断处于中

断时,写1无效,否则写1则将该中断挂起。读寄存器,1-中断挂起,0-中断未挂起

d.ICPR(Interrupt Clear-Pending Register)-清除中断挂起寄存器。写0无效,写1则清除

当前中断挂起状态,但是如果该中断正在执行,则写1也无效。读寄存器,1-中断挂起,0-中断未挂起

e.IABR(Interrupt Active Bit Register)-中断激活寄存器。只读寄存器,1-对应中断激活,

0-对应中断未激活

f.IPR/IP(Interrupt Priority Register)-中断优先级寄存器。这是个很关键的寄存器,这里

在STM32F10XX系列中,每个字的高4位用于设定优先级,需要配合优先级分组寄存器使用SCB->AIRCR。如下图10所示

图10

比如IP[6]对应着中断0(应为中断0的中断号为6,具体参考STM32参考手册英文版P203),其中有8个bit,但是在设置优先级时STM32只使用了高4位,由这高四位决定了抢占优先级和响应优先级的级别。具体抢占优先级和响应优先级的分配位数怎么确定的即由优先级分组寄存器控制SCB-AIRCR

g. 关于中断优先级具体设置中,还有几个地方需要特别注意。那就是AMR内置的基本

部件的优先级设定,如SysTick、PendSV等。这些部分的优先级设定,需要对SCB->SHPRx 进行设置。具体信息如下图:

这一部分内容可以参考Cortex-M3编程手册P138的4.4.8。需要特别注意的是,在STM32 3.5的库函数中,对应的操作位为SCB->SHP[0-11]。可以查看core_cm3.h第347行。

h. SCB_AIRCR(Application interrupt and reset control register )-中断应用复位寄存器,其中

关系到分组的为其8-10位寄存器。图11

图11

具体的分组信息如下图12所示。Cortex-M3中必须强调的是必须保证有一个抢占优先级

图12-01

图12-02

i.图中的bit[7:4]即对应着IP[0]的高4位。

需要特别强调的是这里所提及的中断号是其位置号。如中断0,在中断向量表中位置号为6,位置号为0对应的中断是窗口定时器中断。

在对SCB->AIRCR进行操作是,如果要使写入的数据有效,则必须向其高4字写入0X05FA才能生效,比如SCB->AIRCR=0X05FA0000|0X0500,这里0X05FA就像开门的要是,这一点要注意.还有就是一旦设置了,中途则不能改变,且所有的可设置的中断都选择了同样的组别。

图12-01是STM32对应的组别,而图12-02是Cortex M3定义的,这两者有差别的。

因为优先级组的是MSB对其的,而STM32的优先级由高四位决定,那么由Cortex M3转移到STM32上,则是直接保留高四位,如下表1所示

Group Name Priority Group High 4 bit Low 4 bit

0 1 1 1 1 1 1 1 0

1 1 1 1 1 1 1 0 0

2 1 1 1 1 1 0 0 0

4 3(011) 1 1 1 10 0 0 0

3 4(100) 1 1 1 00 0 0 0

2 5(101) 1 1 0 00 0 0 0

1 6(110) 1 0 0 00 0 0 0

0 7(111)0 0 0 0 0 0 0 0

表1

这样就可以对比看出共同点就是分组,0-无抢占优先级,1-一个抢占优先级。

因此在STM32中,写入SCB-AIRCR[10-8]的数字,0组对应的写入111。

j. Vector table offset register (SCB_VTOR)-向量表漂移寄存器

图13

第29位,写入1-对应中断向量表位于CODE区-内置Flash,写0-中断向量表位于SRAM,即外部RAM区

写入漂移的地址有如下要求:必须先求出系统中共有多少个向量,再把这个数字向上“圆整”到2的整次幂,而起始地址必须对齐到后者的边界上。例如,如果一共有32个中断,则共有32+16(系统异常)=48个向量,向上圆整到2的整次幂后值为64,因此向量表重定位的地址必须能被64*4=256整除,从而合法的起始地址可以是:0x0, 0x100, 0x200等。(这里为什么要乘4,是由于CM3规定向量占用4字节,因此需要256字节)

可以通过看头函数,在库函数版本3.5中,提供的初始化函数已经自动将向量漂移地址设置好了。使用语句如下

#ifdef VECT_TAB_SRAM

SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */

#else

SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */

#endif

库函数名称void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)

接下来看例程

void NVIC_interrupt_init()

{

SCB->AIRCR=0X05FA0500;

NVIC->ISER[0]=(0X01<<6);

NVIC->IP[6] = 0xA0;

}

第1行我们写入信息为,设定优先级组别为组2,即有抢占优先级和响应优先级各有

两位控制,分级0-3.

第2行意思是打开中断编号为6的中断,即允许外部中断0

第3行意思即设定中断编号为6的中断优先级具体分配情况,0XA0—1010 0000,即抢占优先级和响应优先级都设置为2.

这里需要注意,我并没有设置中断偏移,采用了默认设置,如果有需要时,则要对SCB->VOTR进行相关设置

4、中断函数的书写

A.中断函数名的书写有要求,否则会找不到中断入口。在3.5库函数之前,在

stm32f10x_it.c中就预先写好了个外部中断的函数名称,我们只要将对应的执行过程填充进去就可以;但3.5库函数里没有给出,因此我们参考之前的。比如例程中我写的中断函数名称就为void EXTI0_IRQHandler(void)。

B.在进入中断后我们需要做的动作有2部,一次执行中断过程,2是清除中断挂起标

识,因为执行完毕了。如果不清除中断挂起标识,则无法再次进入中断。

看例程

void EXTI0_IRQHandler(void)

{

delayMs(10);

if(((GPIOA->IDR)&0x01)==0)

{

while(((GPIOA->IDR)&0x01)==1);

GPIOA->ODR = ~(GPIOA->ODR&0X02);

EXTI->PR=1;

}

}

这里EXTI->PR=1,即想中断挂起寄存器中写1,清除中断

单片机89C51特殊功能寄存器

单片机89C51特殊功能寄存器 高手从菜鸟忽略作起之(三)单片机共有21个特殊功能寄存器,下面从其功能,位结构,地址,读写方法对其作详细介绍。 一,特殊功能寄存器总述。 二,特殊功能寄存器分类:

1.CPU控制类(6个):Acc,B,PSW,DPL,DPH,SP. 2.中断控制类(2个):IE,IP. 3.计数/定时类(6个):TMOD,TCON,TL0,TL1,TH0,TH1. 4.并口端口类(4个):P0,P1,P2,P3. 5.串口端口类(2个):SCON,SBUF. 6.电源管理类(1个):PCON. 三,特殊功能寄存器详述: 1.CPU控制类(6个):Acc,B,PSW,DPL,DPH,SP 1.1 Acc:累加器,可按位,字节访问。 1.2 B:辅助寄存器,用于进行乘除运算。 P:奇偶校验位:P=0:1的个数为奇数;P=1,1的个数为偶数。 ---:保留位,没使用。 OV:Over flow,溢出标志,OV=0:没溢出;OV=1:溢出。 Rs0:Regedit select 0,寄存器选取0. RS1:Regedit select 1,寄存器选取1。 F0:User Flag bit:用户自定义位。 Ac: Auxiliary Carry,辅助进位标志,由低4位运算时,是否有向高4位进位。Cy:Carry,进位标志。字节运算时,是否有进位。 1.4 DPTL:Data Pointer Register Low,数据指针寄存器低8位。 1.5 DPTH:Data Pointer Register High,数据指针寄存器高8位。 1.6 SP: Stock Pointer:栈指针寄存器。 2.中断控制类寄存器(2个):IE,IP EX0: Enable Extra 0 ,INT0 中断允许位。 ET0: Enable Timer 0,C/T0 中断允许位。 EX1: Enable Extra 1 ,INT1 中断允许位。 ET1: Enable Timer 1,C/T1 中断允许位。 ES: Enable serial ,串行中断允许位。 ET2: Enable Timer 2,C/T2 中断允许位。

STM32库函数操作和寄存器操作

STM32库函数操作和寄存器操作 首先,两个都是C语言。从51过渡过来的话,就先说寄存器操作。每个MCU都有自己的寄存器,51是功能比较简单的一种,相应的寄存器也比较少,我们常用的就那么几个,像P0 P1 SMOD TMOD之类的,这些存在于标准头文件reg.h里面,因为少,所以大家就直接这么去操作了,每一位对应的意义随便翻一下手册就看得到,甚至做几个小项目就记的很清楚了。所以做51开发的时候大多数都是直接操作寄存器。 到了STM32,原理一样,也是有自己的寄存器,但是作为一款ARM 内核的芯片,功能多了非常多,寄存器自然也就多了很多,STM32的手册有一千多页,这时候想去像51那样记住每个寄存器已经不现实了,所以ST的工程师就给大家提供了库函数这么一个东西。这是个神器。库函数里面把STM32的所有寄存器用结构体一一对应并且封装起来,而且提供了基本的配置函数。我们要去操作配置某个外设的时候不需要再去翻眼花缭乱的数据手册,直接找到库函数描述拿来就可以用,这样就能把精力放在逻辑代码的开发上,而不是去费力的研究一个芯片的外设要怎么配置寄存器才能驱动起来。简单讲就是这些了,库函数是为了让开发者从大量繁琐的寄存器操作中脱离出来的一个文件包,在使用一个外设的时候让开发者直接去调用相应的驱动函数而不是自己去翻手册一个一个配置寄存器。有人说用库函数掌握不到芯片的精髓,见仁见智了。熟悉一款芯片是在不断的开发使用中逐渐了解并掌握的,调试的过程中会遇到很多问题,会要求我们去跟踪相关寄存器的状态,在整个框架都已经建立起来的基础上再去对照手册做具体到寄存器每一位的分析,代码对照现象,很快就能积累起来经验,祝成功。

51单片机的寄存器设置

void INT_0(void) interrupt 0 { if(inf_mode_en == 1) //如果红外线接收总控制开,那么才可以判断下面的所有{ if(inf_shunxu == 0) { TH1 = 0x1F; //定时器高位 TL1 = 0xFF; //定时器低位 TR1 = 1; //定时器1开始计数,由于晶振是24M inf_shunxu++; //顺序加一 ET1 = 1; //开定时器1的溢出中断使能 } else if(inf_shunxu == 1) { inf_gonggong(); //红外线接收公共程序 if(inf_zanshi>kaishizhi_l) { inf_dizhi_buf=0; inf_dizhichou_buf=0; inf_shuju_buf=0; inf_shujuf_buf=0; } else inf_gongcuowu(); //公共错误处理错误位置1,接收顺序清0 } else { switch(inf_shunxu) { case 2: inf_gonggong(); //红外线接收公共程序 if(inf_zanshi

51系列单片机寄存器详解

AUXR:辅助寄存器 字节地址=8EH,不可位寻址 - - - WDIDLE DISRTO - - DISALE WDIDLE:WTD在空闲模式下的禁止/允许位 当WDIDLE=0时,WDT在空闲模式下继续计数 当WDIDLE=1时,WDT在空闲模式下暂停计数 DISRTO:禁止/允许WDT溢出时的复位输出 当DISRTO=0时,WDT定时器溢出时,在RST引脚输出一个高电平脉冲 当DISRT0=1时,RST引脚为输入脚 DISALE :ALE禁止/允许位 当DISALE=0时,ALE有效,发出恒定频率脉冲 当DISALE=1时,ALE仅在CPU执行MOVC和MOVX类指令时有效,不访问外寄存器时,ALE不输出脉冲信号 AUXR1:辅助寄存器1字节地址A2,不可位寻 - - - -- - - DPS DPS:数据指针寄存器选择位 当DPS=0时,选择数据指针寄存器DPRT0 DPRT1时,选择数据指针寄存器DPS 当= PSW:程序状态字 CY——进位标记 AC——半进位标记 F0——用户设定标记 RS1、RS0——4个工作寄存器区的选择位。 VO——溢出标记 P——奇偶校验标记 PCON:电源控制器及波特率选择寄存器 字节地址=87H,不可位寻址 SMOD - - POF GF1 GF0 PD IDL SMOD——波特率倍增位 GF1、GF0——用户通用标记 PD——掉电方式控制位,PD=1时进入掉电模式 IDL——空闲方式控制位,IDL=1时进入空闲方式 在AT89S51中PCON.4是电源断电标记位POF,上电是为1 IE:中断允许控制寄存器

EA:中断允许总控制位 当EA=0时,中断总禁止。 当EA=1时,中断总允许后中断的禁止与允许由各中断源的中断允许控制位进行设置。 EX0( EX1):外部中断允许控制位 当EX0( EX1)=0 禁止外中断 当EX0( EX1)=1 允许外中断 ET0(EX1):定时/计数中断允许控制位 当ET0(ET1)=0 禁止定时(或计数)中断 当ET0(ET1)=1 允许定时(或计数)中断 ET2:定时器2中断允许控制位,在AT89S52、AT89C52中 ES:串行中断允许控制位 当ES=0 禁止串行中断 当ES=1 允许串行中断 IP:中断优先级控制寄存器 PX0——外部中断0优先级设定位 PT0——定时中断0优先级设定位 PX1——外部中断1优先级设定位 PT1——定时中断1优先级设定位 PS——串口中断优先级设定位 优先级设定位2PT2——定时器SCON:串行口控制寄存器 SM0、SM1:串行口工作方式选择位 SM2:多机通信控制位 REN:允许/禁止串行口接收的控制位 TB8:在方式2和方式3中,是被发送的第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中是停止位。

51_52系列单片机特殊功能寄存器及资源映射方式总结

51系列单片机特殊功能寄存器总结 第一节:片内RAM映射: 51:00H_7FH 128B片内(DATA),其中00H-07H: bank0,08H-0FH: bank1, 10H-17H: bank2,18H-1FH:bank3. 20H-2FH: 位寻址区(bdata) 30H-7FH: 堆栈区。 80H-FFH: SFR区 52:增加了80H-FFH间接寻址的片内RAM(IDATA) 第二节:特殊功能寄存器(51) ①TCON,地址:88H,定时器计数器控制,中断控制 IT0/1:外部中断触发方式控制,置0,为低电平触发,置1,为下降沿触发。每个机器周期的S5P2器件多外部触发采样。响应中断需要两个机器 周期。 IE0/1:外部中断请求标志,CPU响应中断后,硬件自动将IE清0 TFx,定时器Tx溢出标志,计数溢出时,硬件将其置位,响应中断后,硬件将其清0,该位可由程序查询。 TRx, 定时器x运行控制,置1则启动定时器,清0则停止定时器。 ②TMOD,地址:89H, 定时器计数器工作方式控制 counter对外部输入外冲计数,计一次数需要两个机器周期。 GATE: 取反后与外部中断输入或运算后再同TCON的TRx位相与控制计数器的启与停,GATE为0时,允许TRx开启或停止计数器,为1时,允许INTx开启或停止计数器。 ③TL0, 地址:8AH, 定时器0低八位 ④TL1, 地址:8BH, 定时器1低八位

⑤TH0, 地址:8CH, 定时器0高八位 ⑥TH1, 地址:8DH, 定时器1高八位1 ⑦SCON, 地址:98H,串行通信控制寄存器 S M2:方式2和方式3的多机通信控制位,在方式0中,SM2应置0。 REN:允许串行接收位,由软件置1时,允许接收,清0时。禁止接收 TB8:方式2和方式3中,发送的第9位数据,需要时由软件置位或复位。 RB8: 方式2和方式3中,接收到的第9位数据,在方式1时,RB是接收到停止位,在方式0时,不使用RB8. TI:接收中断标志,由硬件置1,在方式0时,串行发送到第8位结束时置1;在其他方式,串行口发送停止位时置1。TI必须由软件清0。 RI:接收中断标志,由硬件置1。在方式0时(SM2应置0),接收到第8位结束时置1,当SM2=0的其他方式(方式0,1,3)时,接收到停止位置位“1”,当SM2=1时,若串口工作在方式2和3,接收到的第9位数据(RB8)为1时,才激活RI。在方式1时,只有接收到有效的停止位时才会激活RI。RI必须由软件清0 ⑧SBUF, 地址:99H,串行通信数据缓冲器 ⑨IE, 地址:A8H,中断使能控制寄存器 EA: globle interuption Enable, 1: Enable, 0: Disable ET2: timers2 flowover interuption Enable for52, 1: Enable, 0: Disable ES: serrial port interuption Enable, 1: Enable, 0: Disable ET1/0: timers1/0 flowover interuption Enable, 1: Enable, 0: Disable EX1/0: external interuption Enable, 1: Enable, 0: Disable

STM32单片机GPIO寄存器的功能解析

STM32单片机GPIO寄存器的功能解析 1、GPIO的寄存器按照功能可以分为以下几类: A、配置寄存器 B、数据寄存器 C、位寄存器 D、锁定寄存器 2、对于GPIO端口,每个端口有16个引脚,每个引脚的模式由寄存器的四个位控制,每四位又分为两位控制引脚配置(CNFy[1:0]),两位控制引脚的模式及最高速度(MODEy [1:0]),其中y表示第y个引脚。配置GPIO引脚模式的一共有两个寄存器,CRH是高寄存器,用来配置高8位引脚,还有CRL配置低八位引脚。 3、端口位设置\清除寄存器(GPIOx_BSRR) 一个引脚y的输出数据由GPIOx_BSRR寄存器位的2个位来控制分别为BRy (Bit Reset y)和BSy (Bit Set y),BRy位用于写1清零,使引脚输出低电平,BSy位用来写1置1,使引脚输出高电平。而对这两个位进行写零都是无效的。 4、Cortex-M3有32根地址线,所以它的 寻址空间大小为2 bit=4GB。ARM公司设计时,预先把这4GB的寻址空间大致地分配好了。它把地址从0x4000 0000至0x5FFF FFFF(512MB )的地址分配给片上外设。 5、stm32f10x.h这个文件中重要的内容就是把STM32的所有寄存器进行地址映射。如同51单片机的头文件一样,stm32f10x.h像一个大表格,我们在使用的时候就是通过宏定义进行类似查表的操作。 6、STM32总线有AHB总线、APB2总线、APB1总线 7、时钟系统。 A、从时钟频率来说分为告诉时钟和低速时钟,高速时钟是提供给芯片主体时钟,而低速时钟只是提供给芯片中的RTC及独立看门狗使用。 B、从芯片角度来说,时钟源分为内部时钟与外部时钟源,内部时钟是在芯片内部RC振

单片机总结

一、中断 (2) 1、中断优先级控制IP (2) 2、中断请求控制标志TCON (2) 3、中断允许控制IE (3) 4、写中断函数(不用在main函数前声明): (3) 二、定时器 (4) 1、工作方式寄存器TMOD:写程序时选择定时器和工作方式(设置M0、M1)。 (4) 2、对定时器装初值: (4) 3、设置中断: (4) 4、启动定时器控制寄存器: (4) 5、写中断函数(不用再main函数前声明): (5) 6、注意:中断函数中的功能程序代码的执行时间不要超过定时时间。 (5) 三、串行接口 (6) 1、将TMOD设置成定时器1,工作方式为2 (6) 2、计算T1的初值:TH1和TL1的值相同: (6) 3、启动定时器T1(对TCON设置):TR1=1; (6) 4、确定串行口控制SCON: (6) 5、串行口工作在中断方式时,进行中断设置: (6) 6、写中断函数。 (6) 串口补充:波特率的计算: (6)

一、中断 中断涉及到的寄存器和写程序时的操作顺序: 1、中断优先级控制IP IP的每一位需用程序置一,某个控制位置一,相应得中断源就设定为高级中断。 同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示: 2、中断请求控制标志TCON IT0(TCON.0),外部中断0触发方式控制位。 当IT0=0时,为电平触发方式,P3.2引脚低电平有效。 当IT0=1时,为边沿触发方式,P3.2引脚下降沿有效。 IE0(TCON.1),外部中断0中断请求标志位。单片机硬件自动置位和自动清零,不用编写在程序中。 IT1(TCON.2),外部中断1触发方式控制位。 当IT0=0时,为电平触发方式,P3.3引脚低电平有效。 当IT0=1时,为边沿触发方式,P3.3引脚下降沿有效。

单片机特殊功能寄存器及相应功能

SPECIAL FUNCTION REGISTER ?? Register (MSB) (LSB) Byte Symbol b7 b6 b5 b4 b3 b2 b1 b0 Address P0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 80H(128) SP 81H(129) DPL 82H(130) DPH 83H(131) PCON SMOD - - - GF1 GF0 PD IDL 87H(135) *PCON SMOD - - WLE GF1 GF0 PD IDL 87H(135) TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 88H(136) TMOD GATE C/T M1 M0 GATE C/T M1 M0 89H(137) TL0 8AH(138) TL1 8BH(139) TH0 8CH(140) TH1 8DH(141) P1 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 T2EX T2 90H(144) *P1 SDA SCL RT2 T2 CT3I CT2I CT1I CT0I 90H(144) SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 98H(152) SBUF 99H(153) P2 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 0A0H(208) IE EA - ET2 ES ET1 EX1 ET0 EX0 0A8H(168) *IEN0 EA EAD ES1 ES0 ET1 EX1 ET0 EX0 0A8H(168) +CML0 0A9H(169) +CML1 0AAH(170) +CML2 0ABH(171) +CTL0 0ACH(172) +CTL1 0ADH(173) +CTL2 0AEH(174) +CTL3 0AFH(175) P3 RD WR T1 T0 INT1 INT0 TXD RXD 0B0H(176) IP - - PT2 PS PT1 PX1 PT0 PX0 0B8H(184) *IP0 - PAD PS1 PS0 PT1 PX1 PT0 PX0 0B8H(184) +P4 CMT1 CMT0 CMSR5 CMSR4 CMSR3 CMSR2 CMSR1 CMSR0 0C0H(192) +P5 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 0C4H(196) +ADCON ADC.1 ADC.0 ADEX ADCI ADCS AADR2 AADR1 AADR0 0C5H(197)

51单片机特殊功能寄存器功能一览表

51单片机特殊功能寄存器功能一览表 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器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:辅助进、借位(高半字节与低半字节间的进、借位)。

STM32f103寄存器说明

CRC寄存器 (一种算法,用以确认发送过程中是否出错)数据寄存器:CRC_DR 可读写,复位值:0xFFFF FFFF; 独立数据寄存器:CRC_IDR 临时存放任何8位数据; 控制寄存器:CRC_CR 只零位可用,用于复位CRC,对其写1复位,由硬件清零; PWR电源控制(控制和管理电源) 电源控制寄存器:PWR_CR 控制选择系统的电源 电源控制/状态寄存器:PWR_CSR 睡眠或待机模式电源控制 BKP备份寄存器(用以控制和管理备份数据) 备份数据寄存器x:BKP_DRx (x = 1 … 10) 10个16位数据寄存器用以存储用户数据 RTC时钟校准寄存器:BKP_RTCCR 控制实时时钟的运行 备份控制寄存器:BKP_CR 控制选择清除备份数据的类型

备份控制/状态寄存器:BKP_CSR 对侵入事件的控制 RCC寄存器(时钟的选择、复位、分频) 时钟控制寄存器(RCC_CR) 各时钟状态显示 时钟配置寄存器(RCC_CFGR) 时钟分频 时钟中断寄存器(RCC_CIR) 控制就绪中断使能与否 APB2外设复位寄存器(RCC_APB2RSTR) APB1外设复位寄存器(RCC_APB1RSTR) 复位APB各功能寄存器 AHB外设时钟使能寄存器(RCC_AHBENR) AHB时钟使能控制 APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设时钟使能寄存器(RCC_APB1ENR) APB1时钟使能控制 备份域控制寄存器(RCC_BDCR) 备份域时钟控制 控制/状态寄存器(RCC_CSR) 复位标志寄存器 AHB外设时钟复位寄存器(RCC_AHBRSTR) 复位以太网MAC模块 时钟配置寄存器2(RCC_CFGR2) 时钟选择与分频

单片机各寄存器汇总

符号 地址功能介绍 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位计数器

单片机涉及寄存器知识点汇总

单片机涉及寄存器知识点汇总 第六章两个串口寄存器 1:串行口控制寄存器SCON(98H) 按位解释: (1)SM0、SM1——串行口4种工作方式的选择位 SM0 SM1 方式功能说明 0 0 0 同步移位寄存器方式(用于扩展I/O口) 0 1 1 8位异步收发,波特率可变(由定时器控制) 1 0 2 9位异步收发,波特率为fosc/64或fosc/32 1 1 3 9位异步收发,波特率可变(由定时器控制)(2)SM 2 ——多机通信控制位 在方式二,三情况下:SM2=0,不管第九位是啥,RI=1,产生中断;SM2=1,第九位为1,才产生中断,为0,舍弃前八位。 (3)REN——允许串行接收位 REN=1 允许串行口接收数据。 REN=0 禁止串行口接收数据。 由软件置“1”或清“0” (4)TB8,发送第九位,方式2,3中可作为奇偶校验位或者识别地址帧或数据帧的标志。

(5)RB8,接收的第九位,适用于方式二和方式三。方式一中若SM2=0,RB8接收到的是停止位。 (6)TI——发送中断标志位 方式0时,串行发送第8位数据结束时由硬件置“1”, 其它工作方式,串行口发送停止位的开始时置“1”。 TI=1,表示一帧数据发送结束,可申请中断。CPU响应中断后, 向SBUF写入要发送的下一帧数据。 TI必须由软件清0。 (7)RI——接收中断标志位 方式0时,接收完第8位数据时,RI由硬件置1。 其它工作方式,串行接收到停止位时,该位置“1”。 RI=1,表示一帧数据接收完毕,并申请中断。 RI必须由软件清“0”。 2、特殊功能寄存器PCON (87H) 就一个波特率选择位。 3:四种工作方式

单片机寄存器汇总表图文稿

单片机寄存器汇总表 Company number【1089WT-1898YT-1W8CB-9UUT-92108】

51单片机寄存器功能一览表 21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SFR存储空间中,地址空间为80H-FFH,在这片SFR空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。 在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。这样的特殊功能寄存器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 AC:辅助进、借位(高半字节与低半字节间的进、借位)。 例:57H+3AH(01010111+00111010)

STM32使用BSRR和BRR寄存器快速操作

STM32使用BSRR和BRR寄存器快速操作 GPI0端口STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSR和GPIOx_BRF寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置“或置“ 0。“ GPIOx_BSRR勺高16位中每一位对应端口x的每个位,对高16位中的某位置“狈『端口x的对应位被清“0;“寄存器中的位置“0, “则对它对应的位不起作 用。 GPIOx_BSRR的氐16位中每一位也对应端口x的每个位,对低16位中的某位置“1则“它对应的端口位被置“1;“寄存器中的位置“0,“则对它对应的端口不起作用。 简单地说GPIOx_BSR的高16位称作清除寄存器,而GPIOx_BSR的低氐16 位称作设置寄存器。另一个寄存器GPIOx_BRfl只有低16位有用,与GPIOx_BSR 的高16位具有相同功能。 举个例子说明如何使用这两个寄存器和所体现的优势。例如GPIOE的16个IO都被设置成输出,而每次操作仅需要改变低8位的数据而保持高8位不变,假设新的8 位数据在变量Newdata 中, 这个要求可以通过操作这两个寄存器实现,STM32的固件库中有两个函数GPIO_SetBits和GPIO_ResetBits使用了这两个寄存器操作端口。 上述要求可以这样实现: GPI0_SetBits(GPI0E, Newdata & 0xff); GPI0_ResetBits(GPI0E, (~Newdata & 0xff)); 也可以直接操作这两个寄存器: GPI0E->BSRR = Newdata & 0xff; GPI0E->BRR = ~Newdata & 0xff; 当然还可以一次完成对8位的操作:

stm32 BKP寄存器操作操作寄存器+库函数

stm32 BKP 寄存器操作操作寄存器+库函数 BKP 是BACKUP 的缩写,stm32f103RCTE 的内部配备了10 个16 位宽度 的BKP 寄存器。在主电源切断或系统产生复位时间时,BKP 寄存器仍然可以 在备用电源的支持下保持其内容。BKP 在实际应用中可以存入重要数据,防止 被恶意查看,或用于断电等。本例实现对BKP 寄存器的读写操作,和入侵检 测和处理。主程序中写入寄存器后,依次打印出10 个BKP 寄存器数据,然后 触发GPIOC13 的入侵中断(输入低电平),在中断中打印出入侵事件发生后的 寄存器内容(复位为0 )。直接操作寄存器用到的寄存器描述如下:备份数据 寄存器x(BKP_DRx) (x = 1 10):低16 位[15:0]有效,用来写入或读出备份数据。备份控制寄存器(BKP_CR):低两位有效。TPAL[1]:侵入检测TAMPER 引脚有效电平(TAMPER pin active level)0:侵入检测TAMPER 引脚上的高电平会清除所有数据备份寄存器(如果TPE 位为1) 1:侵入检测TAMPER 引脚 上的低电平会清除所有数据备份寄存器(如果TPE 位为1)TPE[0]:启动侵入检 测TAMPER 引脚(TAMPER pin enable)0:侵入检测TAMPER 引脚作为通用IO 口使用1:开启侵入检测引脚作为侵入检测使用备份控制/状态寄存器 (BKP_CSR): TIF[9]:侵入中断标志(Tamper interrupt flag) 0:无侵入中断1:产生侵入中断当检测到有侵入事件且TPIE 位为1 时,此位由硬件置1。通过向CTI 位 写1 来清除此标志位(同时也清除了中断)。如果TPIE 位被清除,则此位也会被 清除。TEF[8]:侵入事件标志(Tamper event flag) 0:无侵入事件1:检测到侵入事件当检测到侵入事件时此位由硬件置1。通过向CTE 位写1 可清除此标 志位TPIE[2]:允许侵入TAMPER 引脚中断(TAMPER pin interrupt enable)0:禁止侵入检测中断1:允许侵入检测中断(BKP_CR 寄存器的TPE 位也必须被置1)注

51单片机特殊功能寄存器详细说明

/*-------------------------------------------------------------------------- REG51.H Header file for generic 80C51 and 80C31 microcontroller. Copyright (c 1988-2001 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ /* BYTE Register */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; 程序状态字 sfr ACC = 0xE0; 累加器 sfr B = 0xF0; B寄存器 sfr SP = 0x81; 堆栈指针 sfr DPL = 0x82; 数据指针低八位 sfr DPH = 0x83; 数据指针高八位 sfr PCON = 0x87; 波特率选择寄存器 sfr TCON = 0x88; 定时器/计数器控制寄存器

sfr TMOD = 0x89; 定时器方式选择寄存器 sfr TL0 = 0x8A; 定时器0低八位 sfr TL1 = 0x8B; 定时器1低八位 sfr TH0 = 0x8C; 定时器0高八位 sfr TH1 = 0x8D; 定时器1高八位 sfr IE = 0xA8; 中断允许寄存器 sfr IP = 0xB8; 中断优先级寄存器 sfr SCON = 0x98; 串行控制寄存器 sfr SBUF = 0x99; 串行数据缓冲器 /* BIT Register */ /* PSW */ 程序状态字 sbit CY = 0xD7; 有无进位或者借位 sbit AC = 0xD6; Auxiliary Carry有无低四位向高四位的进位或借位 sbit F0 = 0xD5; 用户管理的标志位,可根据自己的需求设定 sbit RS1 = 0xD4; 这两位用于选择当前工作寄存器区。8051有8个8位寄存器R0~R7,它 们在RAM中的地址可以根据用户需要来确定。 sbit RS0 = 0xD3; RS1 RS0:R0~R7的地址0 0:00H~07H 0 1:08H~0FH 1 0:10H~17H 1 1:18H~1FH

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。 先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的: 七个中断优先级 每一个中断源都有一个可以设置的级别 高优先级中断的可以嵌套低优先级中断 复位后可屏蔽中断默认优先级为1 同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应 注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断 下面直接进入正题,看看怎么设置中断优先级: XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。 分组的规则是这样的:中断地址位7到位4相同的中断为一组,比如MC9SX128.h中 这些中断的位7到位3都为D,他们就被分成了一组。0~F正好16个组。

INT_CFADDR就是上面说到的用来设置组别的寄存器: 我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。 设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为 这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。对应规则是这样的:中断地址的低四位除以2 比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3 往INT_CFDATAx中写入0~7就能设置相应的中断优先级了 拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。因此中断优先级要SCI0>PORTH>PIT0。 我们先要从头文件中找出相应中断的地址: PIT0【7:4】位为7,选择中断组: INT_CFADDR=0x70;

PIC单片机各寄存器汇总资料讲解

1) 芯片的振荡模式选择。 2) 片内看门狗的启动。 3) 上电复位延时定时器PWRT的启用。 4) 低电压检测复位BOR模块的启用。 5) 代码保护。 __CONFIG_CP_OFF &_WDT_OFF &_BODEN_OFF &_PWRTE_ON &_XT_OSC &_WRT_OFF &_LVP_OFF &_CPD_OFF ; _CP_OFF 代码保护关闭 _WDT_OFF 看门狗关闭 _BODEN_OFF _PWRTE_ON 上电延时定时器打开 _XT_OSC XT振荡模式 _WRT_OFF 禁止Flash程序空间写操作 _LVP_OFF 禁止低电压编程 _CPD_OFF EEPROM数据读保护关闭 LVP Low Voltage Program 低电压编程 CP Code Protect 代码保护 Date EE Read Protect EEPROM数据读保护 Brown Out Detect Power Up Timer Watchdog Timer Flash Program Write 外部时钟输入(HS,XT或LP OSC配置)如下图: 陶瓷(ceramic)谐振器电容的选择如下表:

一般情况为:11 1111 0011 0001 0x3F31 或0x3F71 位13 CP:闪存程序存储器代码保护位1 1=代码保护关闭 0=所有程序存储器代码保护 位12 未定义:读此位为1 1 位11 DEBUG:在线调试器模式位1 1=禁止在线调试器,RB6和RB7是通用I / O引脚 0=在线调试功能开启,RB6和RB7专用于调试 位10:9 WRT1:WRT0:闪存程序存储器的写使能位11 PIC16F876A / 877A 11=写保护关闭,所有的程序存储器可能被写入由EECON控制 10=0000h-00FFh写保护,0100h-1FFFh写入由EECON控制 01=0000h-07FFh写保护,0800h-1FFFh写入由EECON控制 00=0000h-0FFFh写保护,1000h-1FFFh写入由EECON控制 位8 CPD:数据EEPROM存储器代码保护位(Code Protection bit) 1 1=数据EEPROM存储器代码保护关闭 0=数据EEPROM存储器代码保护功能开启 位7 LVP:低电压(单电源)在线串行编程使能位(Low V oltage Program) 0 1=RB3/PGM引脚有PGM功能,低电压编程启用 0=RB3是数字I / O 引脚,HV(高电压13V左右) 加到MCLR必须用于编程 位6 BOREN:欠压复位使能位(低电压检测复位)(Brown-out Reset(Detect)) 0 1=低电压检测复位BOR(BOD)模块启用 0=低电压检测复位BOR(BOD)模块关闭 位5:4 未定义:读此两位均为1 11 位3 PWRTEN:上电定时器使能位(上电复位延时定时器)(Power-up Timer) 0 1=上电定时器关闭 0=上电定时器开启 位2 WDT:看门狗定时器使能位0晶体振荡器电容的选择 1=看门狗开启如右图: 0=看门狗关闭 位1:0 Fosc1:Fosc0:振荡器选择位01 11=RC振荡器 10=晶体振荡器HS模式。参考振荡频率范围:>2 MHz 01=晶体振荡器XT模式。参考振荡频率范围:100 kHz ~ 4 MHz 00=晶体振荡器LP模式。参考振荡频率范围:<200 kHz

相关主题
文本预览
相关文档 最新文档