基于Proteus的AVR单片机C语言程序设计与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第4章 ATmega16通用I/O控制

AVR单片机是ATMEL公司于1997年推出的一款RISC指令架构的高性能、低功耗的8位单片机。AVR单片机系列齐全,可适用于各种不同场合的要求,现主要有低档的Tiny系列、中档的AT90系列和高档的ATmega系列的产品。本章将以ATmega16单片机为例讲述AVR单片机的基本结构及简单I/O端口的应用。

4.1 ATmega16的基本结构

ATmega16是ATmega系列中比较典型的AVR单片机。这款单片机具备了AVR单片机的主要特点和功能,不仅适用于产品设计,也便于初学者尽快入门。

1.ATmega16的特点

ATmega16单片机内部接口丰富、功能齐全,并具有较高的性价比。具体而言,它具有以下特点。

1)采用先进的RISC结构

(1)由131条指令构成8位精简指令集,且大多数指令执行时间为单个时钟周期。

(2)具有32个8位通用工作寄存器。

(3)工作于16MHz时,性能达到16MIPS(Million Instructions Per Second的缩写,指每秒处理的百万级的机器语言指令数,是衡量CPU速度的一个指标)。

(4)配备只需两个时钟周期的硬件乘法器。

2)片内含有较大容量、非易失性的程序和数据存储器

(1)16KB的在系统可编程(ISP)的Flash存储器,其擦写次数为1万次。

(2)具有独立锁定位的可选Boot代码区,可通过片上的Boot程序实现系统内编程(IAP),真正实现了同时进行读写操作。

(3)具有1KB的片内SRAM数据存储器,可实现3级锁定的程序加密。

(4)具有512B片内在线可编程E2PROM数据存储器,其擦写次数为10万次。

3)片内含JTAG(与IEEE1149.1标准兼容)

(1)支持符合JTAG标准的边界扫描功能,用于芯片检测。

(2)支持扩展的片内在线调试功能。

(3)可通过JTAG接口实现对Flash、E2PROM、熔丝位和锁定位的编程。

4)外围器件特点

(1)两个具有独立预分频器和比较器功能的8位定时器/计数器。

(2)一个具有预分频器、比较功能的捕捉功能的16位定时器/计数器。

(3)具有独立振荡器的实时计数器RTC。

(4)具有四通道PWM。

(5)具有8路10位ADC,8个单端通道,TQFP封装的7个差分通道,两个具有可编程增益(1x、10x或200x)的差分通道。

(6)具有面向字节的两线接口TWI(兼容I2C硬件接口)。

(7)具有两个可编程的串行USART。

(8)具有可工作于主机/人机模式的SPI串行接口。

(9)具有独立片内振荡器的可编程看门狗定时器WDT。

(10)具有片内模拟比较器。

5)特殊的处理器特点

(1)片内含上电复位电路及可编程的掉电检测复位电路BOD。

(2)片内含有1/2/4/8MHz经过标定的、可校正的RC振荡器,可作为系统时钟使用。(3)具有多达21个各种类型的片内/片外中断源。

(4)有6种睡眠模式:空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby模式及扩展的Standby模式。

6)I/O的封装

(1)具有32个可编程的I/O口。

(2)具有40引脚PDIP封装,44引脚TQFP封装与44引脚MLF封装。

7)工作电压

(1)ATmega16L为2.7~5.5V。

(2)ATmega16为4.5~5.5V。

8)运行速度

(1)ATmega16L为0~8MHz。

(2)ATmega16为0~16MHz。

9)ATmega16L在1MHz、3V、25℃时的功耗

(1)正常模式:1.1mA。

(2)空闲模式:0.35mA。

(3)掉电模式:<1μA。

2.ATmega16的外部引脚及配置

ATmega16单片机有3种形式的封装:PDIP-40(双列直插)、TQFP-44(方形)和MLF-44(贴片形式),其外部封装形式如图4-1所示。

图4-1 ATmega16单片机的外部封装形式

PDIP-40(双列直插)封装的ATmega16单片机的外部引脚功能配置如表4-1所示。

表4-1 ATmega16单片机的外部引脚功能配置

3.ATmega16的内部结构

ATmega16的内部结构框图如图4-2所示,从图中可以看出,它主要由AVR CPU、Flash程序存储器、数据存储器RAM、E2PROM、各种功能的外围接口、I/O口,以及相关的数据、控制、状态寄存器等组成。

图4-2 ATmega16的内部结构框图

AVR内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算术逻辑单元(ALU,又称算逻单元)相连接,使得一条指令可以在1个时钟周期内同时访问2个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC微控制器快最高10倍的数据吞吐率。

ATmega16是以ATMEL高密度、非易失性存储器技术生产的。片内ISP Flash允许程序存储器通过ISP串行接口或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(Application Flash Memory)中。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续运行,实现了系统内可编程Flash(具有同时读写的能力,即RWW)操作。通过将8位RISC CPU与系统内可编程的Flash集成在一个芯片内,ATmega16成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。

4.ATmega16的CPU结构

CPU的主要任务是保证程序的正确执行。因此,它必须能够访问存储器(SRAM、E2PROM、Flash程序存储器)、执行运算、控制外设及处理中断。ATmega16的CPU结构框图如图4-3所示,它由运算逻辑单元ALU、程序计数器PC、指令寄存器、指令译码器的32个8位快速访问通用寄存器组成。

AVR采用Harvard结构,具有独立的数据和程序总线。Flash程序存储器里的指令通过一级流水线运行。CPU在执行一条指令的同时读取下一条指令。这种结构实现了指令的单时钟周期运行,从而显著提高了指令的执行速度。

图4-3 ATmega16的CPU结构框图

CPU内的快速访问通用寄存器文件包括32个8位通用寄存器,访问时间为1个时钟周期,从而实现了单时钟周期的ALU操作。在典型的ALU操作中,两个位于寄存器文件中的操作数同时被访问,然后执行运算,结果再被送回到寄存器文件中,整个过程仅需1个时钟周期。寄存器文件里有6个寄存器可以用做3个16位的间接寻址寄存器指针以寻址数据空间,实现高效的地址运算。其中1个指针还可以用做程序存储器查询表的地址指针。这些附加的功能寄存器即为16位的X、Y、Z寄存器。

ALU与32个8位通用寄存器直接相连,支持通用寄存器之间及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器操作。运算完成之后状态寄存器的内容会得到更新,以反映操作结果。

程序流程通过有/无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。大多数指令长度为16位,即每个程序存储器地址都包含1条16位或32位的指令。

程序存储器空间分为两个区:引导程序区(Boot区)和应用程序区。这两个区都有专门的锁定位以实现读/写保护。用于写应用程序区的SPM指令必须位于引导程序区。

在中断和调用子程序时,返回地址的程序计数器(PC)保存于堆栈之中。堆栈位于通用数据SRAM中,因此其深度仅受限于SRAM的大小。在AVR单片机上电复位时,堆栈指针SP初始化为0x00,因此用户应该注意在程序开始时就初始化16位堆栈指针寄存器SP来指向SRAM。这个SP指针位于I/O空间中,可以进行读/写访问。数据SRAM可以通过5种不同的寻址模式进行访问。

1)状态寄存器SREG状态寄存器SREG是一个8位标志寄存器,用来存放执行算术指令后的结果信息。这些信息可以用来改变程序流程以实现条件操作。状态寄存器的内容只有在ALU运算出来后才会更新。这样,在许多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。在进入中断服务程序时,状态寄存器中的内容不会自动保存,中断返回时也不会自动恢复。这些工作需要由软件来处理。

ATmega16的状态寄存器SREG在I/O空间的地址为0x3F(0x005F),各标志位的定义如下所示。

(1)I(bit7):全局中断使能位。该标志位为AVR中断总控制开关,单独的中断使能由其他独立的寄存器控制。当I置为“1”时,表示CPU可以响应中断请求;当I清“0”时,不管单独中断标志位的状态是“0”还是“1”,都不会产生中断。当响应任意一个中断后,I位由硬件清“0”,而执行RETI指令后,I将恢复置位为“1”以便重新使能中断。I也可以通过SEI和CLI指令来软件置“1”和清“0”。

(2)T(bit6):位复制存储位。位复制指令BLD和BST将T作为目的或源地址。通用寄存器组中任何一个寄存器中的一位可以通过BST指令复制到T中,而用BLD指令可以将T中的位值复制到通用寄存器组中的任何一个寄存器的一位中。

(3)H(bit5):半进位标志位。半进位标志H表示在一些算术操作过程中有无半进位(即低4位向高4位进位或借位)的产生。此标志位对于BCD运算而言非常有用。

(4)S(bit4):符号标志位。S=N⊕V,即S为负数标志N与2的补码溢出标志V的“异或”值。

(5)V(bit3):2的补码溢出标志。该标志位支持2的补码运算,用于指示算术运算中是否产生溢出。溢出表示运算结果超出了正数(或负数)所能表示的范围。

(6)N(bit2):负数标志位。该标志位为运算结果的最高位。N=1,表示运算结果为负数;N=0,表示运算结果为正数。

(7)Z(bit1):零标志位。该位表示在CPU的运算和逻辑操作后,其结果是否为“0”。Z=0,表示结果为零。

(8)C(bit0):进位/借位标志位。该标志位表示在CPU的运算和逻辑操作过程中,是否产生了进位或借位。

2)堆栈指针SP堆栈指针SP主要用来保存临时数据、局部变量和中断或子程序的返回地址。堆栈指针总是指向堆栈的顶部。AVR的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。堆栈指针指向数据SRAM堆栈区,在此聚集了子程序堆栈和中断堆栈。调用子程序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0x60的地址空间。使用PUSH指令将数据推入堆栈时,指针减1;而将子程序或中断返回地址推入堆栈时,指针将减2。使用POP指令将数据弹出堆栈时,堆栈指针加1;而用RET或RETI指令从子程序或中断返回时,堆栈指针加2。

AVR的堆栈指针由I/O地址空间中的两个8位寄存器SPH和SPL实现。SPH的地址空间为0x3E(0x005E);SPL的地址空间为0x3D(0x005D)。AVR堆栈指针SP实际使用的位数与具体器件有关:对于ATmega16而言,由于低于0x0060的区域为寄存器空间,所以堆栈指针必须指向高于0x0060的SRAM地址空间。ATmega16片内集成了1KB的SRAM,不支持外部扩展SRAM,因此堆栈指针寄存器SP的初始值设在SRAM的最高端,即0x045F处。

5.ATmega16的存储器组织

ATmega16单片机片内集成了Flash程序存储器、SRAM数据存储器和E2PROM数据存储器。这3个存储器空间互相独立,物理结构也不相同。虽然它们的物理结构不同,但是这3个存储器的空间均采用了线性的平面结构,如图4-4所示。

图4-4 ATmega16的存储器组织

1)Flash程序存储器 ATmega16具有16KB的在线编程Flash,用于存放程序指令代码。因为所有的AVR指令为16位或32位,所以Flash组织为8K×16位的形式。Flash程序存储器被分为两个区:引导(Boot)程序区和应用程序区。

Flash程序存储器至少可以擦写1万次。ATmega16的程序计数器(PC)为13位,因此可以寻址8KB的程序存储器空间。

2)SRAM数据存储器 ATmega16具有1120字节的片内SRAM,由通用寄存器(R0~R31)、I/O寄存器和SRAM数据存储器组成。

ATmega16单片机的SRAM的起始地址段0x0000~0x001F(即96个地址)为寄存器文件(R0~R31共32个8位通用寄存器),其中最后6个寄存器R26~R31组成X、Y、Z 3个16位寄存器,用于存放间接寻址的地址指针。R26和R27组成X寄存器,R26为X寄存器的低8位,R27为X寄存器的高8位;R28和R29组成Y寄存器,R28为Y寄存器的低8位,R29为Y寄存器的高8位;R30和R31组成Z寄存器,R30为Z寄存器的低8位,R31为Z寄存器的高8位。

ATmega16单片机的SRAM的地址段0x0020~0x005F为I/O寄存器,I/O寄存器支持专用的I/O指令访问和SRAM地址访问。如果使用IN和OUT指令访问I/O寄存器时,地址单元为0x00~0x3F;而将I/O寄存器作为普通SRAM访问时,地址单元则为0x0020~0x005F。

ATmega16单片机的I/O寄存器的地址空间分配、名称和功能描述如表4-2所示。

表4-2 ATmega16单片机的I/O寄存器的地址空间分配、名称和功能描述

续表

直接给用户使用的SRAM单元为0x006F~0x045F,共1024B,这部分SRAM单元用于存放在程序执行过程中定义的各种变量。

3)E2PROM数据存储器 ATmega16包含512B的E2PROM数据存储器。它是作为一个独立的数据空间而存在的,可以通过相关的寄存器按字节对其进行读/写操作。EEPROM的擦除次数达10万次以上。E2PROM的访问由地址寄存器、数据寄存器和控制寄存器决定。

6.ATmega16的系统控制

1)时钟系统

(1)时钟系统和时钟分配:ATmega16的主要时钟系统及其分布如图4-5所示,这些时钟并不需要同时工作。为了降低功耗,可以使用不同的睡眠模式来禁止无须工作的模块时钟。

图4-5 ATmega16的主要时钟系统及其分布

ATmega16的时钟系统将产生的时钟信号主要有:clkCPU(CPU时钟)、clkI/O(I/O时钟)、clkFlash(Flash时钟)、clkASY(异步定时器时钟)、clkADC(ADC时钟)。

clkCPU(CPU时钟)与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针的数据存储器。如果终止CPU时钟,将使CPU内核停止工作和计算。

clkI/O(I/O时钟)用于主要的I/O模块,如定时器/计数器、SPI和USART。clkI/O还用于外部中断模块。由于有些外部中断是通过异步逻辑检测的,所以即使clkI/O停止了,这些中断仍然可以得到监控。此外,TWI模块的地址识别功能在没有clkI/O的情况下也是异步实现的,使得这个功能在任何睡眠模式下都可以正常工作。

clkFlash控制Flash接口的操作。此时钟通常与CPU时钟同时挂起或激活。

clkASY允许异步定时器/计数器与LCD控制器直接由外部32kHz时钟晶体驱动,使得此定时器/计数器即使在睡眠模式下仍然可以为系统提供一个实时时钟。

ADC具有专门的时钟clkADC,这样可以在ADC工作时停止CPU和I/O时钟以降低数字电路产生的噪声,从而提高ADC的转换精度。

(2)时钟源:ATmega16芯片可以通过Flash熔丝位来选择系统的时钟源,如表4-3所示。对于所有的熔丝位,“1”表示未编程;“0”表示已编程。时钟先输入到AVR时钟发生器,再分配给相应的模块。器件出厂时,默认设置为CKSEL=“0010”,SUT=“10”。这种默认设置的时钟源为1MHz的内部RC振荡器,启动时间最长,可以保证用户通过ISP或者并行编程器得到所需的时钟源。

表4-3 ATmega16芯片时钟源的选择

(3)外部晶体振荡器:XTAL1与XTAL2分别为片内振荡器的反向放大器的输入和输出。在XTAL1与XTAL2引脚上外接振荡器和电容可组成谐振回路(如图4-6所示),配合片内的OSC振荡回路还可构成稳定的自激振荡器,这个振荡器可以使用石英晶体,也可以使用陶瓷谐振器。熔丝位CKOPT用来选择这两种放大器模式的其中之一。当CKOPT被编程时,振荡器在输出引脚产生满幅度的振荡。这种模式适合于噪声环境,以及需要通过XTAL2驱动第二个时钟缓冲器的情况,而且这种模式的频率范围比较宽。当保持CKOPT为未编程状态时,振荡器的输出信号幅度比较小。其优点是大大降低了功耗,但是频率范围比较窄,而且不能驱动其他时钟缓冲器。

图4-6 外部晶振连接图

对于谐振器,其频率可在0~16MHz之间选择。CKOPT未编程时的选择谐振器的最高频率为8MHz,CKOPT编程时选择谐振器的最高频率为16MHz。C1和C2的数值要一样,不管使用的是晶体还是谐振器。其最佳的数值与使用的晶体或谐振器有关,还与杂散电容和环境的电磁噪声有关。振荡器可以工作在3种不同的模式下,每一种模式都有一个优化的频率范围,如表4-4所示。

表4-4 使用外部晶体振荡器时工作模式的配置

注:此选项只能用于陶瓷谐振器,不适用于晶体。

表4-5列出了熔丝位CKSEL[0]及SUT[1..0]用于选择的启动时间。

表4-5 使用外部晶体振荡器时启动时间的选择

注1:这些选项不适用晶体,只适用于陶瓷谐振器,只能用于工作频率不太接近于最大频率,而且启动时的频率稳定性对于应用而言不重要的情况。

注2:这些选项是为陶瓷谐振器设计的,可以保证启动时频率足够稳定。如果工作频率不太接近于最大频率,而且启动时的频率稳定性对于应用而言不重要时,这些选项也适用于晶体。

(4)外部低频晶体振荡器:为了使用32.768kHz钟表晶体作为器件的时钟源,必须将熔丝位CKSEL设置为“1001”以选择低频晶体振荡器。外部低频晶体振荡器的连接也可采用如图4-6所示的方式。通过对熔丝位CKOPT的编程,用户可以使能XTAL1和XTAL2的内部电容(内部电容的标定数值为36pF),从而去除外部电容。选择了这个振荡器之后,启动时间由熔丝位SUT确定,如表4-6所示。

表4-6 使用外部低频晶体振荡器时启动时间的选择

注:这些选项只能用于启动时的频率稳定性对应用而言不重要的情况。

(5)外部RC振荡器:对于时间不敏感的应用可以使用如图4-7所示的外部RC振荡器。频率可以通过方程f=1/(3RC)进行粗略的估计。电容C至少要为22pF。通过编程熔丝位CKOPT,用户可以使能XTAL1和GND之间的片内36pF电容,从而省去外部电容。

振荡器可以工作在4个不同的模式下,每个模式有自己的优化频率。工作模式通过熔丝位CKSEL[3..0]选取,如表4-7所示。

图4-7 外部RC振荡器的连接图

选择了这个振荡器后,启动时间由熔丝位SUT确定,如表4-8所示。注意,当SUT[1..0]为“11”时,只能用于工作频率不太接近于最大频率时的情况。

表4-7 使用外部RC振荡器时的频率范围的选择

表4-8 使用外部RC振荡器时启动时间的选择

(6)标定的片内RC振荡器:标定的片内RC振荡器提供了固定的1.0MHz,2.0MHz,4.0MHz或8.0MHz时钟。这些频率都是在5V、25℃条件下的标定值。这些固定频率的时钟也可以作为系统时钟,只要按照表4-9所示对熔丝位CKSEL进行编程即可。选择这些固定频率时钟(此时不能对CKOPT进行编程)之后就无须外部器件了。复位时硬件将标定字节加载到OSCCAL寄存器中,自动完成对RC振荡器的标定。在5V、25℃和频率为1.0 MHz的条件下,这种标定可以提供在标称频率的±1%范围内的精度。当使用这个振荡器作为系统时钟时,看门狗仍然使用自己的看门狗定时器作为溢出复位的依据。

表4-9 片内RC振荡器的熔丝位编程值

注:出厂时的设置。

选择了这个振荡器之后,启动时间由熔丝位SUT确定,如表4-10所示。XTAL1和XTAL2要保持为空。

表4-10 内部RC振荡器的启动时间的选择

注:出厂时的设置。

振荡器标定寄存器OSCCAL定义如下所示。

CAL7~CAL0(bit7~bit0)为振荡器标定数值。

将标定数值写入寄存器OSCCAL中可以对内部振荡器进行调节,以消除由生产工艺所带来的振荡器频率偏差。复位时,1MHz的标定数据(标识数据的高字节,地址为0x00)会自动加载到OSCCAL寄存器中。如果需要片内RC振荡器工作于其他频率,标定数据必须人工加载:首先通过编程器读取标识数据,然后将标定数据保存到Flash或E2PROM之中。这些数据可以先通过软件读取,然后再加载到OSCCAL寄存器中。当OSCCAL为“0x00”时,振荡器以最低频率工作;当对其写不为“0”的数据时,内部振荡器的频率将增长;写入0xFF时,即得到最高频率。标定的振荡器用来访问E2PROM和Flash定时。有写E2PROM和Flash的操作时,不要将频率标定到超过标称频率的10%,否则写操作有可能失败。要注意振荡器只对1.0MHz、2.0MHz、4.0MHz和8.0MHz这4种频率进行了标定,其他频率则无法保证,如表4-11所示。

表4-11 片内RC振荡器的频率范围

(7)外部时钟源:为了从外部时钟源驱动芯片,XTAL1必须按如图4-8所示的方法进行连接。同时,熔丝位CKSEL必须编程为“0000”。若熔丝位CKOPT也被编程,用户就可以使用内部的XTAL1和GND之间的36pF电容了。选择了这个外部时钟源之后,启动时间由熔丝位SUT确定,如表4-12所示。

图4-8 外部时钟源的连接图

为了保证MCU能够稳定工作,不能突然改变外部时钟源的振荡频率。工作频率突变超过2%时将会产生异常现象。应该在MCU保持复位状态时改变外部时钟的振荡频率。

表4-12 外部时钟源的启动时间的选择

(8)定时/计数器振荡器:对于拥有定时器/振荡器引脚(TOSC1和TOSC2)的AVR微处理器而言,晶体可以直接与这两个引脚连接,无须外部电容。此振荡器针对32.768kHz的钟表晶体做了优化。建议不在TOSC1引脚输入振荡信号。

2)电源管理—睡眠模式睡眠模式可以使应用程序关闭MCU中没有使用的模块,从而降低功耗。AVR具有不同的睡眠模式,允许用户根据自己的应用要求进行设置。进入睡眠模式的条件是先置位寄存器MCUCR的SE,然后执行SLEEP指令。具体哪一种模式(空闲模式、ADC噪声抑制模式、掉电模式、省电模式、Standby模式或扩展Standby模式)由MCUCR的SM2、SM1和SM0决定,如表4-13所示。使能的中断可以将进入睡眠模式的MCU唤醒。经过启动时间,外加4个时钟周期后,MCU就可以运行中断服务程序了,然后会返回到SLEEP的下一条指令。唤醒时不会改变寄存器文件和SRAM的内容。如果在睡眠过程中发生了复位,则MCU唤醒后从中断向量开始执行。

表4-13 休眠模式的选择

注:仅在使用外部晶振或谐振器时,在Standby模式下才能使用。

ATmega16控制寄存器MCUCR包含了电源管理的控制位,各位的定义如下所示。

(1)SM2~SM0(bit7、bit5、bit4):休眠模式选择位。

(2)SE(bit6):休眠使能。为了使MCU在执行SLEEP指令后进入休眠模式,SE必须置“1”。为了确保进入休眠模式,建议在SLEEP指令的前1条指令将SE置“1”。MCU一旦唤醒会立即清除SE位。

3)复位系统 ATmega16有5个复位源:上电复位、外部复位、看门狗复位、掉电检测复位和JTAG复位。复位时所有的I/O寄存器都被设置为初始值,程序从复位向量处开始执行。所有的复位信号消失之后,芯片内部的1个延迟计数器被激活,将内部复位的时间延长。这种处理方式使得在MCU正常工作之前有一定的时间让电源达到稳定的电平。

MCUCSR为MCU控制和状态寄存器,它提供了有关引起MCU复位的复位源的信息,各位的定义如下所示。

(1)JTD(bit7):禁止/允许JTAG接口。此位为“0”时,如果JTAGEN熔丝位被编程则JTAG接口使能;如果此位为“1”,则JTAG接口禁止。

(2)ISC2(bit6):外部中断2(INT2)触发方式选择位。此位为“0”时,INT2下降沿中断;如果此位为“1”,INT2上升沿中断。

(3)JTRF(bit4):JTAG复位标志。通过JTAG指令AVR_RESET可以使JTAG复位寄存器置位,引发MCU复位,并使JTRF置“1”。上电复位将使其清“0”,也可以通过软件清“0”。

(4)WDRF(bit3):看门狗复位标志。看门狗复位发生时置“1”。上电复位将使其清“0”,也可以通过软件清“0”。

(5)BORF(bit2):掉电检测复位标志。掉电检测复位发生时置“1”。上电复位将使其清“0”,也可以通过软件清“0”。

(6)EXTRF(bit1):外部复位标志。外部复位发生时置“1”。上电复位将使其清“0”,也可以通过软件清“0”。

(7)PORF(bit0):上电复位标志。上电复位发生时置“1”,只能通过软件清“0”。