ATmega16寄存器详述
发布时间:2024-11-10
发布时间:2024-11-10
ATmega16芯片各寄存器汇总
1.产品特性
高性能、低功耗的8位AVR®微处理器先进的RISC结构
131条指令–大多数指令执行时间为单个时钟周期32个8位通用工作寄存器全静态工作
工作于16MHz时性能高达16MIPS
只需两个时钟周期的硬件乘法器非易失性程序和数据存储器
16K字节的系统内可编程Flash,擦写寿命10,000次,具有多重密码保护锁定(LOCK)
功能。
具有独立锁定位的可选Boot代码区,通过片上Boot程序实现系统内编程,真正的
同时读写操作。
512字节的EEPROM,擦写寿命100,000次,可用于保存系统的设定参数、固定
表格和掉电后的数据的保存。即方便了使用,减小了系统的空间,又大大提高了系统的保密性。
1K字节的片内SRAM,可灵活使用指令运算,适合使用功能很强的C语言编程,
易学、易写、易移植。
可以对锁定位进行编程以实现用户程序的加密
JTAG接口(与IEEE1149.1标准兼容)
符合JTAG标准的边界扫描功能支持扩展的片内调试功能
通过JTAG接口实现对Flash、EEPROM、熔丝位和锁定位的编程
外设特点
两个具有独立预分频器和比较器功能的8位定时器/计数器一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器四通道PWM8路10位ADC
8个单端通道
TQFP封装的7个差分通道
2个具有可编程增益(1x,10x,或200x)的差分通道
面向字节的两线接口TWI
1
ATmega16芯片各寄存器汇总
两个可编程的串行USART
可工作于主机/从机模式的SPI串行接口
具有独立片内振荡器的可编程看门狗定时器WDT,可防止程序走飞,提高产品的
抗干扰能力。
片内模拟比较器
特殊的处理器特点
上电复位以及可编程的掉电检测片内经过标定的RC振荡器片内/片外中断源
6种睡眠模式:空闲模式、ADC噪声抑制模式、省电模式、掉电模式、Standby模
式以及扩展的Standby模式
I/O和封装
32个可编程的I/O口,具有大电流10~20mA(输出电流)或40mA(吸电流)的特
点,可直接驱动LED、SSR或继电器。
40引脚PDIP封装,44引脚TQFP封装,与44引脚MLF封装。
工作电压
ATmega16L:2.7-5.5VATmega16:4.5-5.5V
速度等级
0~8MHzATmega16L0~16MHzATmega16
2.引脚说明
2
ATmega16芯片各寄存器汇总
3
ATmega16芯片各寄存器汇总
4
ATmega16芯片各寄存器汇总
3.I/O端口3.1I/O端口特性
共有PA~PD四组通用I/O口,每组I/O都是8位寄存器。
作为通用数字I/O使用时,所有AVRI/O端口都具有真正的读-修改-写功能。输出缓冲器具有对称的驱动能力,可以输出或吸收大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。并有保护二极管与VCC和地相连。
3.2通用I/O引脚配置
每个端口都有三个I/O存储器地址:数据寄存器PORTx、数据方向寄存器DDRx和端口输入引脚PINx。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚为只读寄存器。但是需要特别注意的是,对PINx寄存器某一位写入逻辑“1”将造成数据寄存器相应位的数据发生“0”与“1”的交替变化。当寄存器SFIOR的上拉禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。端口引脚配置见表。
5
ATmega16芯片各寄存器汇总
3.3I/O寄存器地址表
ATmega16的4个8位的端口都有各自对应的3个I/O端口寄存器,它们占用了I/O空间的12个地址。
4PA口寄存器3.3.4
◎数据方向寄存器DDRA
6
ATmega16芯片各寄存器汇总
◎数据寄存器PORTA
◎输入引脚地址PINA
3.5PB口寄存器3.5
◎数据方向寄存器DDRB
◎数据寄存器PORTB
7
ATmega16芯片各寄存器汇总
◎输入引脚地址PINB
6PC口寄存器3.3.6
◎数据方向寄存器DDRC
◎数据寄存器PORTC
◎输入引脚地址PINC
8
ATmega16芯片各寄存器汇总
7PD口寄存器3.3.7
◎数据方向寄存器DDRD
◎数据寄存器PORTD
◎输入引脚地址PIND
DDRX是方向寄存器,可读可写。在写操作时用于制定PX口是作为输入口还是输出口;在读操作时,从DDRX寄存器读出来的是端口的方向设定值。DDRX寄存器的初始值为0x00。
PORTX是数据寄存器,可读写。在写操作时,从PORTX写入的数据存入内部锁存器,以确定端口的工作状态或者将写入的数据送到外部数据总线。PORTX寄存器的初始值为0x00。
PINX用来访问端口X的逻辑值,且只允许读操作。从PINX读入的数据只是X口引脚的逻辑状态。其初始值为高阻态。8寄存器头文件3.3.8
/*PortA*/
9
ATmega16芯片各寄存器汇总
#definePINA
(*(volatileunsignedchar*)0x39)
#defineDDRA(*(volatileunsignedchar*)0x3A)#definePORTA(*(volatileunsignedchar*)0x3B)/*PortB*/#definePINB
(*(volatileunsignedchar*)0x36)
#defineDDRB(*(volatileunsignedchar*)0x37)#definePORTB(*(volatileunsignedchar*)0x38)/*PortC*/#definePINC
(*(volatileunsignedchar*)0x33)
#defineDDRC(*(volatileunsignedchar*)0x34)#definePORTC(*(volatileunsignedchar*)0x35)/*PortD*/#definePIND
(*(volatileunsignedchar*)0x30)
#defineDDRD(*(volatileunsignedchar*)0x31)#definePORTD(*(volatileunsignedchar*)0x32)/*PortAbits*/#definePORTA7#definePORTA6#definePORTA5#definePORTA4#definePORTA3#definePORTA2#definePORTA1#definePORTA0#definePA7#definePA6#definePA5#definePA4#definePA3#definePA2#definePA1#definePA0
7654321076543210
10
ATmega16芯片各寄存器汇总
#defineDDA6#defineDDA5#defineDDA4#defineDDA3#defineDDA2#defineDDA1#defineDDA0#definePINA7#definePINA6#definePINA5#definePINA4#definePINA3#definePINA2#definePINA1#definePINA0/*PortBbits*/#definePORTB7#definePORTB6#definePORTB5#definePORTB4#definePORTB3#definePORTB2#definePORTB1#definePORTB0#definePB7#definePB6#definePB5#definePB4#definePB3#definePB2#definePB1#definePB0
7654321076543210
11
654321076543210
ATmega16芯片各寄存器汇总
#defineDDB6#defineDDB5#defineDDB4#defineDDB3#defineDDB2#defineDDB1#defineDDB0#definePINB7#definePINB6#definePINB5#definePINB4#definePINB3#definePINB2#definePINB1#definePINB0/*PortCbits*/#definePORTC7#definePORTC6#definePORTC5#definePORTC4#definePORTC3#definePORTC2#definePORTC1#definePORTC0#definePC7#definePC6#definePC5#definePC4#definePC3#definePC2#definePC1#definePC0
7654321076543210
12
654321076543210
ATmega16芯片各寄存器汇总
#defineDDC6#defineDDC5#defineDDC4#defineDDC3#defineDDC2#defineDDC1#defineDDC0#definePINC7#definePINC6#definePINC5#definePINC4#definePINC3#definePINC2#definePINC1#definePINC0/*PortDbits*/#definePORTD7#definePORTD6#definePORTD5#definePORTD4#definePORTD3#definePORTD2#definePORTD1#definePORTD0#definePD7#definePD6#definePD5#definePD4#definePD3#definePD2#definePD1#definePD0
7654321076543210
13
654321076543210
ATmega16芯片各寄存器汇总
#defineDDD6#defineDDD5#defineDDD4#defineDDD3#defineDDD2#defineDDD1#defineDDD0#definePIND7#definePIND6#definePIND5#definePIND4#definePIND3#definePIND2#definePIND1#definePIND0
654321076543210
3.9I/O编程注意事项
设置I/O口的数据方向寄存器,确定其输入/输出方式。配置为输出方式时,设置数据寄存器的初始值。配置为输入方式时,根据情况选择是否使用上拉电阻。
配置为输入方式时,若读取外部引脚的电平,应读取PINxn的值,而不是PORTxn的值。
4.外部中断
中断是指微处理器在程序执行期间响应外部的事务请求,暂停当前的处理器工作转而处理外部事件,外部事件处理完成之后返回原来工作暂停的地方继续执行程序。
Atmega16具有21个中断源,每个中断源都有独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己独立的使能位。如果中断位I和中断向量使能位都置位,则中断发生,中断标志位置位,并执行中断服务程序。中断向量表见表,处于越低地址的中断具有更高优先级。
外部中断通过引脚INT0、INT1与INT2触发。只要使能了中断,即使引脚INT0..2配置为输出,只要电平发生了合适的变化,中断也会触发。
14
ATmega16芯片各寄存器汇总
4.1状态寄存器SREG
I:全局中断使能位
在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。4.2MCU控制寄存器MCUCR
SE:MCU休眠使能位
15
ATmega16芯片各寄存器汇总
外部中断1由引脚INT1激发,如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话。触发方式如上表所示。在检测边沿前MCU首先采样INT1引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。
外部中断0由引脚INT0激发,如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话。触发方式如上表所示。在检测边沿前MCU首先采样INT0引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。
4.3MCU控制与状态寄存器MCUCSR
16