ATMEGA8寄存器和熔丝位介绍及FLASH操作一、ATMEG8寄存器介绍1.1.1.1.状态寄存器(SREGSREGSREGSREG)在I/O空间的地址为:3FH,在数据空间地址为:005FHITHSVNZCBit7——I:全局中断允许位。Bit6——T:位复位存储。Bit5——H:半进位标志位。Bit4——S:符号标志位,S=N⊕V符号标志位S是负数标志位N和2的补码溢出标志位V两者的异或值。Bit3——V:2的补码溢出标志位。Bit2——N:负数标志位。负数标志位表示在一个算数或逻辑操作后的结果是否为负数。Bit1——Z:零值标志位。Bit0——C:进位标志位。2.X、Y、Z地址指针寄存器。寄存器R26-R31除了可能作通用工作寄存器用外,还可两两合并,组成3个16位寄存器X、Y、Z,作为间接寻址操作中的地址指针寄存器使用,这样就可以在整个数据空间实现间接寻址操作。3.3.3.3.堆栈指针寄存器(SPSPSPSP)堆栈指针寄存器用来保存临时数据、局部变量、中断或子程序的返回地址。4.4.4.4.振荡器校准寄存器(OSCCALOSCCALOSCCALOSCCAL)CAL7CAL6CAL5CAL4CAL3CAL2CAL1CAL0用法不详。5.MCU5.MCU5.MCU5.MCU控制寄存器(MCUCRMCUCRMCUCRMCUCR)SESM2SM1SM0ISC11ISC10ISC01ISC00Bit7——SE:休眠使能位为了使MCU执行SLEEP指令后进入休眠模式,SE必须置位。为了确保休眠模式是程序员的有意行为,建议只在SLEEP指令前一条指令置位SE。MCU一旦唤醒立即清除SE。Bit6-4——SM2:0休眠模式选择位000:空闲模式001:ADC噪声抑制模式010:掉电模式011:省电模式100:保留101:保留110:standby模式。只在使用外部晶振或谐振器时有用。Bit3:2——ISC11、ISC10:中断1触发方式控制位00:INT1低电平产生中断请求。01:INT1引脚上任意的逻辑变换将引发中断10:INT1下降沿引发中断请求11:INT1上升沿触中断请求如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话,外部中断1由INT1引脚触发Bit1:0——ISC01、ISC00中断0触发方式控制位00:INT0低电平产生中断请求。01:INT0引脚上任意的逻辑变换将引发中断10:INT0下降沿引发中断请求11:INT0上升沿触中断请求6.MCU6.MCU6.MCU6.MCU状态寄存器(MCUCSRMCUCSRMCUCSRMCUCSR)RESRESRESRESWDRFBORFEXTRFPORFBit7-4——保留Bit3——WDRF:看门狗复位标志位当看门狗复位时,此位被置1。上电复位或用指令写入0时,该位被清除。Bit2——BORF:低电压复位标志位当BOD复位产生时,该位被置1。上电复位或用指令写入0时,该位被清除。Bit1——EXTRF:外部复位标志位当外部复位产生时,该位被置1。上电复位或用指令写入0时,该位被清除。Bit0——PORF:上电复位标志位当上电复位产生时,该位被置1。使用指令写入0时,该位被清除。7.7.7.7.看门狗控制寄存器(WDTCRWDTCRWDTCRWDTCR)地址:21/0041RESRESRESWDCEWDEWDP2WDP1WDP0Bit4——WDCE:看门狗定时器改变允许标志位当要禁止看门狗定时器,该位必须置1,否则看门狗将不会被禁止。一旦WDCE置1后,硬件会在4个时钟周期内自动将该位清零。当需要重新设定看门狗定时器的预置分频参数时,WDCE也必须先置1。Bit3——WDE:看门狗允许标志位当WDE位置1,则使能看门狗定时器。WDE为零时,看门狗定时器功能被禁止。清零WDE的操作,必须在WDCE置1后的4个时钟周期内完成。因此如要禁止看门狗必须按照以下的特定顺序,以防止意外关断看门狗:1.在同一操作中,把WDCE和WDE置1。即使WDE原先已经为1也必须WDE写1。2.在随后的4个时钟周期内,清零WDE,禁止看门狗定时器。Bit2-0——WDP2、WDP1、WDP0:看门狗定时器预分频器设置位WDP2:0用于设置看门狗溢出的时间间隔。看门狗预分频选择WDP2:0WDT脉冲数典型溢出时间(VCC=3V)典型溢出时间(VCC=5V)00016K17.1ms16.3ms00132K34.3ms32.5ms01064K68.5ms65ms011128K0.14s0.13s100256K0.27s0.26s101512K0.55s0.52s1101024K1.1s1.0s1112048K2.2s2.1s8.8.8.8.中断控制寄存器(GICRGICRGICRGICR)地址:3B/005BINT1INT0IVSELIVCEBit0——IVCE:中断向量表移位允许位IVCE位必须被写入1才能允许对IVSEL的更改。在4个时钟周期后,IVSEL位写入后,IVCE位会由硬件自动清零。置位IVSEL位将屏敝中断。Bit1——IVSEL:中断向量表选择位当IVSEL被清零时,中断向量的位置定义在FLASH存储器的起始处。当该会被置1时,中断向量的位置被定义在引导程序载入区的起始处。引导程序载入区在FLASH空间的位置和大小由BOORST熔丝位决定。Bit6——INT0:外部中断请求0使能当INT0位被置1,同时状态寄存器SREG的I位被置1时,外部引脚中断0被使能。MCU通用控制寄存器MCUCR中的中断0方式控制位ISC01和ISC00决定了外部中断0电平的触发方式。即使INT0引脚被配置为输出方式,其上的有效电平的变化仍会触发中断。Bit7——ITN1:外部中断请求1使能当INT1位被置1,同时状态寄存器SREG的I位被置1时,外部引脚中断1被使能。MCU通用控制寄存器MCUCR中的中断1方式控制位ISC11和ISC10决定了外部中断1电平的触发方式。即使INT1引脚被配置为输出方式,其上的有效电平的变化仍会触发中断。复位和中断向量表的位置BOOTRSTIVSELRESET复位起始地址中断向量表起始地址1(未编程)00X0000X0011(未编程)10X000引导载入区起始地址+0X0010(编程)0引导载入区起始地址0X0010(编程)1引导载入区起始地址引导载入区起始地址+0X001为了防止移动中断向量表的误操作,必须遵守一个特殊的写入规程来改变IVSEL位的值。首先,置中断向量表移位使能位IVCE为1。然后,必须在4个时钟周期内将需要的值写入IVSEL位。在写入IVSEL的同时IVCE将由硬件自动清零。在这个执行过程当中,中断将自动被屏蔽。中断在IVCE位被置1的指令周期中将会被屏蔽,并保持屏蔽状态,直到写IVSEL位的指令被执行。如果IVSEL没有被写入,中断屏蔽将保持4个时钟周期。将态寄存器中的I位不受这种自动屏蔽的影响。需要注意的是如果中断向量表被放置在引导载入程序区中,且引导锁定熔丝位BLB02被编程,那么,当执行应用程序区中的程序时,中断将被屏蔽。如果中断向量表被放置在应用程序区,且引导锁定熔丝位BLB12被编程时,那么,在执行引导载入程序区程序时,中断也被屏蔽。9.9.9.9.端口BBBB数据寄存器(PORTBPORTBPORTBPORTB)地址:18/0038PORTB7PORTB6PORTB5PORTB4PORTB3PORTB2PORTB1PORTB010.10.10.10.端口BBBB方向寄存器(DDRBDDRBDDRBDDRB)地址:17/0037DDRB7DDRB6DDRB5DDRB4DDRB3DDRB2DDRB1DDRB011.11.11.11.端口BBBB输入引脚寄存器(PINBPINBPINBPINB)地址:16/0036PINB7PINB6PINB5PINB4PINB3PINB2PINB1PINB012.12.12.12.端口CCCC数据寄存器(PORTCPORTCPORTCPORTC)地址:15/0035PORTC7PORTC6PORTC5PORTC4PORTC3PORTC2PORTC1PORTC013.13.13.13.端口CCCC方向寄存器(DDRCDDRCDDRCDDRC)地址:14/0034DDRC7DDRC6DDRC5DDRC4DDRC3DDRC2DDRC1DDRC014.14.14.14.端口CCCC输入引脚寄存器(PINCPINCPINCPINC)地址:13/0033PINC7PINC6PINC5PINC4PINC3PINC2PINC1PINC015.15.15.15.端口DDDD数据寄存器(PORTDPORTDPORTDPORTD)地址:12/0032PORTD7PORTD6PORTD5PORTD4PORTD3PORTD2PORTD1PORTD016.16.16.16.端口BBBB方向寄存器(DDRDDDRDDDRDDDRD)地址:11/0031DDRD7DDRD6DDRD5DDRD4DDRD3DDRD2DDRD1DDRD017.17.17.17.端口BBBB输入引脚寄存器(PINB)地址:10/0030PIND7PIND6PIND5PIND4PIND3PIND2PIND1PIND018.I/O18.I/O18.I/O18.I/O特殊功能寄存器(SFIORSFIORSFIORSFIOR)地址:30/0050ADHSMACMEPUDPSR2PSR10Bit2——PUD:上拉禁止位当PUD被置1后,所有的IO引脚上拉电阻都无效。在将一个引脚从输入高阻态(DDRxn=0,PORTxn=0)转化为高电平输出状态(DDRxn=1,PORTxn=1)的过程当中,会暂时出现上拉有效输入(DDRxn=0,PORTxn=1)或低电平输出(DDRxn=1,PORTxn=0)的中间过程。通常情况下,应先转化到上拉有效输入状态(DDRxn=0,PORTxn=1),再轮换为高电平输出状态(DDRxn=1,PORTxn=1)。更严格的转换是先将PUD位置1,再进行上述转换。同样,在将一引脚由上拉有效输入(DDRnx=0,PORTxn=1)转化为低电平输出(DDRxn=1,PORTxn=0)过程中也会产生类似的问题。要根据实际情况选择高阻态输入(DDRxn=0,PORTxn=0)或高电平输出(DDRxn=1,PORTxn=1)作为中间转换过程,再转换为低电平输出(DDRxn=1,PORTxn=0)。不管方向寄存器DDRxn为0或1,总是可以通过PINxn来获得外部引脚当前的实际电平。Bit1——PSR2:预分频复位T/C2当该位置1,T/C2预分频器复位。操作完成后,该件被硬件清零。该位写0无效。若内部CPU时钟作为T/C2时钟,该位读为零。当T/C2工作于异步模式时,直到预分频器复位该位保持为1。Bit0——PSR10:预定比例分频器复位当写入1到该位,将复位预定比例分频寄存器,一旦预定比例分频器被复位,硬件自动清零该标志位。而写零到该位将不会产生任何操作。由于预定比例分频器为T/C0和T/C1共享,因此复位预定比例分频器会影响到两个定时器/计数器。读取PSR10位的值总是0。19.19.19.19.通用中断标志寄存器(GIFRGIFRGIFRGIFR)地址:INTF1INTF0Bit7——INTF1:外部中断1中断标志位当INT1引脚上的有效事件触发一个中断请求后,INTF1会被硬件置1。如果SREG寄存器中的I标志和GICR寄存器中的INT1位被置1,MCU将跳到相应的中断向量处开始执行中断服务程序,同时由硬件自动将INTF1标志清零。如果写逻辑1到INTF1,该位将被清零。当INT1被设置为低电平触发方式时,标志INTF1始终为0。Bit6——INTF0:外部中断0中断标志位当INT0引脚上的有效事件触发一个中断请求后,INTF0会被硬件置1。如果SREG寄存器中的I标志和GICR寄存器中的INT0位被置1,MCU将跳到相应的中断向量处开始执行