(精)atmega16寄存器笔记整理

更新时间:2024-05-28 16:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、中断寄存器

中断

是指微处理器在程序执行期间响应外部的事务请求,暂停当前的处理器工作转而处理外部事件,外部事件处理完成之后返回原来工作暂停的地方继续执行程序。

Atmega16具有21个中断源,每个中断源都有独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己独立的使能位。如果中断位I和中断向量使能位都置位,则中断发生,中断标志位置位,并执行中断服务程序。中断向量表见表2,处于越低地址的中断具有更高优先级。

表2 中断向量表 向量号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

程序地址 中断源 描述 外部引脚电平引发的复位,上电复位,掉电 检测复位,看门狗复位,以及JTAG AVR 复位 外部中断请求0 外部中断请求1 定时器/计数器2比较匹配 定时器/计数器2溢出 定时器/计数器1事件捕捉 定时器/计数器1比较匹配 A 定时器/计数器1比较匹配B 定时器/计数器1溢出 定时器/计数器0溢出 SPI 串行传输结束 USART,Rx 结束 USART数据寄存器空 USART,Tx 结束 ADC 转换结束 EEPROM 就绪 模拟比较器 两线串行接口 外部中断请求2 定时器/ 计数器0 比较匹配 保存程序存储器内容就绪 0x00 0x02 0x04 0x06 0x08 0x0a 0x0c 0x0e 0x10 0x12 0x14 0x16 0x18 0x1a 0x1c 0x1e 0x20 0x22 0x24 0x26 0x28 RESET INT0 INT1 TIMER2 COMP TIMER2 OVF TIMER1 CAPT TIMER1 COMPA TIMER1 COMPB TIMER1 OVF TIMER0 OVF SPI,STC USART, RXC USART, UDRE USART, TXC ADC EE_RDY ANA_COMP TWI INT2 TIMER0 COMP SPM_RDY <一> 全局中断控制位 1、状态寄存器SREG

bit7 I bit6 T bit5 H bit4 S bit3 V bit2 N bit1 Z bit0 C I:全局中断使能位。 在I置位后,单独的中断使能由不同的中断寄存器控制。若I为0,则禁止中断。

<二>外部中断?

2.MCU控制寄存器MCUCR

bit7 SM2 bit6 SE bit5 SM1 bit4 SM0 bit3 ISC11 bit2 ISC10 bit1 ISC01 bit0 ISC00 SE:MCU休眠使能位

SM1~SM0:MCU休眠模式选择 SM2 0 0 0 0 1 1 1 1 SM1 0 0 1 1 0 0 1 1 SM0 0 1 0 1 0 1 0 1 休眠模式 空闲 ADC 噪声抑制模式 掉电模式 省电模式 保留 保留 Standby(1) 模式 扩展Standby(1) 模式 ISC11~ISC10:外部中断INT1的中断检测方式 ISC11 ISC10 0 0 1 1 ISC01~ISC00:外部中断INT0的中断检测方式 0 1 0 1 INT1中断 低电平中断 INT1 引脚上任意的逻辑电平变化都将引发中断 下降沿中断 上升沿中断 ISC01 0 0 1 1 ISC00 0 1 0 1 INT0中断 低电平中断 INT1 引脚上任意的逻辑电平变化都将引发中断 下降沿中断 上升沿中断 3.通用中断屏蔽寄存器GICR bit7 INT1 bit6 INT0 bit5 INT2 bit4 - bit3 - bit2 - bit1 IVSEL bit0 IVCE INT1:使能外部中断请求1 INT0:使能外部中断请求0 INT2:使能外部中断请求2

4.通用中断标志寄存器GIFR bit7 bit6 bit5 INTF1 INTF0 INTF2 bit4 - bit3 - bit2 - bit1 IVSEL bit0 IVCE INTF1:外部中断标志

INT1引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF1。如果SREG的位I以及GICR

寄存器相应的中断使能位INT1为‖1‖,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入‖1‖ 来清零。

INTF0:外部中断标志

INT0引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF0。如果SREG的位I以及GICR寄存器相应的中断使能位INT0为‖1‖,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入‖1‖ 来清零。 INTF2:外部中断标志

INT2引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF1。如果SREG的位I以及GICR寄存器相应的中断使能位INT2为‖1‖,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入‖1‖ 来清零。

<三>定时器/计数器

AVR的三个定时/计数器。他们分别是T/C0、T/C1、T/C2,其中 T/C0和T/C2是8位定时/计数器, T/C1是16位定时/计数器。

如T/C0工作模式: 1、普通模式

2、CTC模式

3、快速PWM模式和

4、相位修正PWM模式

这4种工作模式,每种模式分别对应相应的功能。

普通模式: 这是较为简单的模式,在此模式中,计数器不停的累加,直到计数器溢出(0xff)。溢出之后的下一个指令周期里,计数器会回到最小值(0x00)开始累加,计数器标志位(TOV0)置位。此时的TOV0不会自动清零,只有在总中断和T/C0中断开启,进入中断服务子函数时,TOV0才会自动清零。 CTC模式: 所谓CTC模式也就是输出比较模式。在普通模式,计数器会一直累加到最大值256,而在输出比较模式(CTC),另一寄存器(OCR0)可以决定最大值的大小。在达到OCR0设定值后,还能产生中断,触发改变相应管脚(PB3:OC0)的逻辑电平。利用这一特点,多用来产生需要的波形。后面会编写一个方波产生的例子来说明。由于CTC模式没有双缓冲功能,在计数器以无预分频器或很低的预分频器工作的时候将TOP 更改为接近BOTTOM 的数值时要小心。如果写入的OCR0 数值小于当前TCNT0 的数值,计数器将丢失一次比较匹配。多小才要注意,要看代码的效率决定。

快速PWM模式: PWM翻译过来就是\脉宽调制模式\。此模式同样用于生成波形。与输出比较模式区别的是:在输出比较模式中,当TCNT0到达OCR0时,TCNT0清零,相应管脚逻辑电平改变,从而产生波形变化;在PWM模式中,TCNT0的值是从0X00到0XFF,管脚逻辑电平变化的地方是TCNT0的值与OCR0相等时,但此时并不对TCNT0进行清0操作。 相位修正PWM模式: 和\快速PWM模式\作用相似。不同是,计数器从0X00到0XFF,然后从0XFF到0X00计数,产生对称的双向斜波。

1. 定时器0 以及定时器共同相关寄存器

(1)T/C 控制寄存器TCCR0 (主要作用:确定工作模式)

bit7 FOC0 bit6 bit5 bit4 bit3 bit2 CS02 bit1 CS01 bit0 CS00 WGM00 COM01 COM00 WGM01 FOC0: 强制输出比较位

FOC0仅在WGM00指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,在使用PWM 时,写TCCR0 要对其清零。对其写1 后,波形发生器将立即进行比较操作。比较匹配输出引脚 OC0 将按照COM01:0 的设置输出相应的电平。要注意FOC0 类似一个锁存信号,真正对强制输出比较起作用的是COM01:0 的设置。

FOC0不会引发任何中断,也不会在利用OCR0作为TOP的CTC模式下对定时器进行清零的操作。 读FOC0 的返回值永远为0。

WGM01 WGM01 波形产生模式

这几位控制计数器的计数序列,计数器的最大值TOP,以及产生何种波形。T/C 支持的模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM 模式。 模式 0 1 2 3 WGM01 0 0 1 1 WGM00 0 1 0 1 T/C 的工作模式 普通 相位修正PWM CTC 快速PWM TOP 0xFF 0xFF OCR0 0xFF OCR0的更新时间 立即更新 TOP 立即更新 TOP TOV0 的置位时刻 MAX BOTTOM MAX MAX COM01 COM00 比较匹配输出模式(位5和位4—COM:比较匹配输出模式。这决定了比较匹配发生时,输出管脚OC0的电平。当然,管脚首先要配置为输出。触发电平除了和下表的配置有关外,还和WGM确定的工作模式相关。)

这些位决定了比较匹配发生时输出引脚OC0 的电平。如果COM01:0 中的一位或全部都置位, OC0 以比较匹配输出的方式进行工作。同时其方向控制位要设置为1 以使能输出驱动器。

当OC0 连接到物理引脚上时, COM01:0 的功能依赖于WGM01:0 的设置。下表给出了当WGM01:0 设置为普通模式或CTC 模式时COM01:0 的功能。 比较输出模式,非PWM 模式 COM01 0 0 1 1 COM01 0 0 1 1 COM00 0 1 0 1 COM00 0 1 0 1 说明 正常的端口操作,不与OC0 相连接 比较匹配发生时OC0 取反 比较匹配发生时OC0 清零 比较匹配发生时OC0 置位 说明 正常的端口操作,不与OC0 相连接 保留 比较匹配发生时OC0A 清零,计数到TOP 时OC0 置位 比较匹配发生时OC0A 置位,计数到TOP 时OC0 清零 比较输出模式,快速PWM 模式 注意:一个特殊情况是OCR0 等于TOP,且COM01 置位。此时比较匹配将被忽略,而计数到TOP 时OC0 的动作继续有效。

比较输出模式,相位修正PWM 模式 COM01 0 0 1 1 COM00 0 1 0 1 说明 正常的端口操作,不与OC0 相连接 保留 在升序计数时发生比较匹配将清零OC0 ,降序计数时发生比较匹配将置位OC0 在升序计数时发生比较匹配将置位OC0 ,降序计数时发生比较匹配将清零 OC0 注意: 一个特殊情况是OCR0 等于TOP,且COM01 置位。此时比较匹配将被忽略,而计数到TOP 时OC0 的动作继续有效。

CS00 CS01 CS02 时钟选择(用于选择定时\\计数器0工作的时钟源。这也是AVR和51的不同之处,51的定时计数器只能用机器周期的12分频来工作,而AVR可以任意设置分频。)

用于选择T/C 的时钟源

CS02 0 0 0 0 1 1 1 1 CS01 0 0 1 1 0 0 1 1 CS00 0 1 0 1 0 1 0 1 说 明 无时钟, T/C 不工作 clkI/O/1 ( 没有预分频) clkI/O/8 ( 来自预分频器) clkI/O/64 ( 来自预分频器) clkI/O/256 ( 来自预分频器) clkI/O/1024 ( 来自预分频器) 时钟由T0 引脚输入,下降沿触发 时钟由T0 引脚输入,上升沿触发 如果T/C0 使用外部时钟,即使T0 被配置为输出,其上的电平变化仍然会驱动记数器。利用这一特性可通过软件控制记数。

(2)T/C 寄存器TCNT0

(T/C0计数寄存器—TCNT0.T/C0工作时,就是此8位寄存器的值在不断的加1变化。可对其进行读写操作。)

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 TCNT0[7:0] 通过T/C 寄存器可以直接对计数器的8 位数据进行读写访问。对TCNT0 寄存器的写访问将在下一个时钟阻止比较匹配。在计数器运行的过程中修改TCNT0 的数值有可能丢失一次TCNT0 和OCR0 的比较匹配

(3)输出比较寄存器OCR0

(输出比较寄存器包含一个8 位的数据,不间断地与计数器数值TCNT0 进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC0 引脚上产生波形。8位寄存器,不断与TCNT0进行比较操作,在产生输出比较中断,改变OC0上的逻辑电平时,都要用到此寄存器)

(4)T/C中断屏蔽寄存器TIMSK ,

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 (5)T/C中断标志寄存器TIFR bit7 OCF2 TOIE0: ——T/C0 溢出中断使能

(当TOIE0 和状态寄存器的全局中断使能位I 都为‖1‖ 时,T/C0 的溢出中断使能。当T/C0发生溢出, 即TIFR 中的TOV0 位置位时,中断服务程序得以执行)。

OCIE0: T/C0 输出比较匹配中断使能 (当OCIE0 和状态寄存器的全局中断使能位I 都为‖1‖ 时,T/C0 的输出比较匹配中断使能。当T/C0 的比较匹配发生,即TIFR 中的OCF0 置位时,中断服务程序得以执行。)

TOIE1: ——T/C1 溢出中断使能

(当TOIE1 和状态寄存器的全局中断使能位I 都为‖1‖ 时,T/C1 的溢出中断使能。当T/C1发生溢出,即TIFR 中的TOV1 位置位时,中断服务程序得以执行)

OCIE1B: ——T/C1 输出比较 B 匹配中断使能

(当该位被设为\,且状态寄存器中的I 位被设为\时,使能T/C1 的输出比较B 匹配中断使能。

一旦TIFR 上的OCF1B 置位,CPU 即开始执行T/C1 输出比较B 匹配中断服务程序。)

OCIE1A: ——输出比较 A 匹配中断使能

(当该位被设为\,且状态寄存器中的I 位被设为\时, T/C1 的输出比较A 匹配中断使能。一旦

TIFR 上的OCF1A 置位,CPU 即开始执行T/C1 输出比较A 匹配中断服务程序。)

TICIE1: ——T/C1 输入捕捉中断使能

(当该位被设为\,且状态寄存器中的I 位被设为\时, T/C1 的输入捕捉中断使能。一旦TIFR 的ICF1 置位,CPU 即开始执行T/C1 输入捕捉中断服务程序。)

TOIE2: ——T/C2 溢出中断使能 (当TOIE2 和状态寄存器的全局中断使能位I 都为‖1‖ 时,T/C2 的溢出中断使能。当T/C2发生溢出,即TIFR 中的TOV2 位置位时,中断服务程序得以执行。)

OCIE2: ——T/C2 输出比较匹配中断使能

(当OCIE2 和状态寄存器的全局中断使能位I 都为‖1‖ 时,T/C2 的输出比较匹配中断使能。当T/C2 的比较匹配发生,即TIFR 中的OCF2 置位时,中断服务程序得以执行。 )

OCF0: ——输出比较标志0 (当T/C0 与OCR0( 输出比较寄存器0) 的值匹配时,OCF0 置位。此位在中断服务程序里硬件清零,也可以对其写1 来清零。当SREG 中的位I、OCIE0(T/C0 比较匹配中断使能) 和OCF0 都置位时,中断服务程序得到执行。 )

bit6 TOV2 bit5 ICF1 bit4 bit3 bit2 OCF1A OCF1B TOV1 bit1 OCF0 bit0 TOV0

TOV0: ——T/C0 溢出标志

(当T/C0 溢出时, TOV0 置位。执行相应的中断服务程序时此位硬件清零。此外, TOV0也可以通过写1 来清零。当SREG 中的位I、TOIE0(T/C0 溢出中断使能) 和TOV0 都置位时,中断服务程序得到执行。在相位修正PWM 模式中,当T/C0 在0x00 改变记数方向时, TOV0 置位。)

TOV1: ——T/C1 溢出标志

(该位的设置与T/C1 的工作方式有关。工作于普通模式和CTC 模式时,T/C1 溢出时TOV1置位。对工作在其它模式下的TOV1 标志位置位)

OCF1B: ——T/C1 输出比较 B 匹配标志位

(当TCNT1 与OCR1B 匹配成功时,该位被设为\。强制输出比较(FOC1B) 不会置位OCF1B。执行强制输出比较匹配B 中断服务程序时OCF1B 自动清零。也可以对其写入逻辑\来清除该标志位。)

OCF1A: ——T/C1 输出比较 A 匹配标志位

(当TCNT1 与OCR1A 匹配成功时,该位被设为\。强制输出比较(FOC1A) 不会置位OCF1A。执行强制输出比较匹配A 中断服务程序时OCF1A 自动清零。也可以对其写入逻辑\来清除该标志位。)

ICF1: ——T/C1 输入捕捉标志位

(外部引脚ICP1 出现捕捉事件时ICF1 置位。此外,当ICR1 作为计数器的TOP 值时,一旦计数器值

达到TOP, ICF1 也置位。执行输入捕捉中断服务程序时ICF1 自动清零。也可以对其写入逻辑\来清除该标志位。)

OCF2: ——输出比较标志2

(当T/C0 与OCR0( 输出比较寄存器0) 的值匹配时,OCF0 置位。此位在中断服务程序里硬件清零,

也可以对其写1 来清零。当SREG 中的位I、OCIE0(T/C0 比较匹配中断使能) 和OCF0 都置位时,中断服务程序得到执行。)

TOV2: ——T/C2 溢出标志

(当T/C2 溢出时, TOV2 置位。执行相应的中断服务程序时此位硬件清零。此外, TOV2也可以通过写1 来清零。当SREG 中的位I、TOIE2(T/C2 溢出中断使能) 和TOV2 都置位时,中断服务程序得到执行。在相位修正PWM 模式中,当T/C2 在0x00 改变记数方向时, TOV2 置位。)

(6)特殊功能IO寄存器SFIOR

bit7 bit6 bit5 ADTS2 ADTS1 ADTS0 bit4 – bit3 ACME bit2 PUD bit1 PSR2 bit0 PSR10 PSR10 置位时T/C1,T/C0的预分频器复位,操作完后,这一位由硬件自动清零,该位写0无效,T/C1,T/C0共用同一预分频器,预分频器复位对两个定时器都有影响,该位总是读为0

PSR2 当该位置1, T/C2 预分频器复位。操作完成后,该位被硬件清零。该位写0 无效。若内部CPU 时钟作为T/C2 时钟,该位读为0。当T/C2 工作在异步模式时,直到预分频器复位该位保持为1。

2、定时器1

(1)T/C1 控制寄存器A(TCCR1A)

bit7 COM1A1 bit6 bit5 bit4 bit3 bit2 bit1 WGM11 bit0 WGM10 COM1A0 COM1B1 COM1B0 FOC1A FOC1B COM1A1 ,COM1A0通道A 的比较输出模式 COM1B1 ,COM1B0 通道B 的比较输出模式

COM1A1 ,COM1A0与COM1B1 ,COM1B0分别控制OC1A与OC1B状态。如果COM1A1:0(COM1B1:0)的一位或两位被写入\, OC1A(OC1B) 输出功能将取代I/O 端口功能。此时OC1A(OC1B)相应的输出引脚数据方向控制必须置位以使能输出驱动器。

OC1A(OC1B) 与物理引脚相连时,COM1x1:0 的功能由WGM13:0 的设置决定 比较输出模式,非PWM COM1A1/COM1B1 COM1A0/COM1B0 0 0 1 1 COM1A1/COM1B1 0 0 0 1 0 1 COM1A0/COM1B0 0 1 说明 普通端口操作,非OC1A/OC1B 功能 比较匹配时OC1A/OC1B 电平取反 比较匹配时清零OC1A/OC1B( 输出低电平) 比较匹配时置位 OC1A/OC1B ( 输出高电平) 说明 普通端口操作,非OC1A/OC1B 功能 WGM13:0 = 15: 比较匹配时OC1A 取反 , OC1B 不占用物理引脚。WGM13:0 为其它值时为普通端口操作,非OC1A/OC1B 功能 比较匹配时清零OC1A/OC1B, OC1A/OC1B在TOP 时置位 比较匹配时置位 OC1A/OC1B, OC1A/OC1B在TOP 时清零 比较输出模式,快速 PWM 1 1 0 1 注意: 当OCR1A/OCR1B 等于TOP且COM1A1/COM1B1置位时,比较匹配被忽略,OC1A/OC1B 的置位/ 清零操作有效。

比较输出模式,相位修正及相频修正 PWM 模式 COM1A1/COM1B1 COM1A0/COM1B0 0 0 0 1 说明 普通端口操作,非OC1A/OC1B 功能 WGM13:0 = 9 或14: 比较匹配时OC1A 取反, OC1B 不占用物理引脚。 WGM13:0为其它值时 为普通端口操作,非OC1A/OC1B 功能 升序记数时比较匹配将清零OC1A/OC1B,降 序记数时比较匹配将置位OC1A/OC1B 升序记数时比较匹配将置位OC1A/OC1B,降序 记数时比较匹配将清零OC1A/OC1B 1 1 0 1 注意: OCR1A/OCR1B 等于TOP 且COM1A1/COM1B1 置位是一个特殊情况。

FOC1A: 通道A 强制输出比较 FOC1B: 通道B 强制输出比较

FOC1A/FOC1B只有当WGM13:0指定为非PWM模式时被激活。为与未来器件兼容,工作在PWM 模式下对TCCR1A 写入时,这两位必须清零。当FOC1A/FOC1B 位置1 ,立即强制波形产生单元进行比较匹配。COM1x1:0 的设置改变 OC1A/OC1B 的输出。注意FOC1A/FOC1B 位作为选通信号。COM1x1:0 位的值决定强制比较的效果。 在CTC 模式下使用OCR1A 作为TOP 值, FOC1A/FOC1B 选通即不会产生中断也不好清除定时器,FOC1A/FOC1B 位总是读为0

WGM11,WGM11 波形发生模式

这两位与位于TCCR1B 寄存器的WGM13:2 相结合,用于控制计数器的计数序列——计数器计数的上限值和确定波形发生器的工作模式。T/C 支持的工作模式有:普通模式( 计数器),比较匹配时清零定时器(CTC) 模式,及三种脉宽调制(PWM) 模式。

波形产生的位描述

WGM1模式 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 WGM12 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 WGM11 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 WGM10 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 定时器/ 计数器工作模式 普通模式 8位相位修正PWM 9位相位修正PWM 10位相位修正PWM CTC 8位快速PWM 9位快速PWM 10位快速PWM 相位与频率修正WPM 相位与频率修正PWM 相位修正PWM 相位修正PWM CTC 保留– 快速PWM 快速PWM 计数 上限值 TOP 0xFFFF 0x00FF 0x01FF 0x03FF OCR1A 0x00FF 0x01FF 0x03FF ICR1 OCR1A ICR1 OCR1A ICR1 – ICR1 OCR1A TOP TOP OCR1x 更新 时刻 立即 更新 TOP TOP TOP 立即更新MAX TOP TOP TOP BOTTOM BOTTOM TOP TOP TOV1 置位时TOV1 置位时刻 MAX BOTTOM BOTTOM BOTTOM 4 TOP TOP TOP BOTTOM BOTTOM BOTTOM BOTTOM 立即更新MAX – TOP TOP

(2)T/C1 控制寄存器B(TCCR1B) bit7 bit6 ICNC1 ICES1 bit5 – bit4 WGM13 bit3 WGM12 bit2 CS12 bit1 CS11 bit0 CS10 ICNC1: 输入捕捉噪声抑制器

置位ICNC1 将使能输入捕捉噪声抑制功能。此时外部引脚ICP1 的输入被滤波。其作用是从ICP1 引脚

连续进行4 次采样。如果4 个采样值都相等,那么信号送入边沿检测器。因此使能该功能使得输入捕捉被延迟了4 个时钟周期。

ICES1: 输入捕捉触发沿选择

该位选择使用ICP1 上的哪个边沿触发捕获事件。ICES1 为\选择的是下降沿触发输入捕捉; ICES1 为\选择的是逻辑电平的上升沿触发输入捕捉。

按照ICES1 的设置捕获到一个事件后,计数器的数值被复制到ICR1 寄存器。捕获事件还会置为ICF1。如果此时中断使能,输入捕捉事件即被触发。

当ICR1 用作TOP 值( 见TCCR1A 与TCCR1B 寄存器中WGM13:0 位的描述) 时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。

Bit 5 – 保留位

该位保留。为保证与将来器件的兼容性,写TCCR1B 时,该位必须写入\。

WGM13:2: 波形发生模式 (见TCCR1A 寄存器中的描述。)

CS12:0: 时钟选择

时钟选择位描述

CS02 0 0 0 0 1 1 1 1 CS01 0 0 1 1 0 0 1 1 CS00 0 1 0 1 0 1 0 1 说 明 无时钟源 clkI/O/1 clkI/O/8 clkI/O/64 clkI/O/256 clkI/O/1024 外部T1 外部T1 选择使用外部时钟源后,即使T1 引脚被定义为输出,其1 引脚上的逻辑信号电平变化仍然会驱动T/C1 计数,这个特性允许用户通过软件来控制计数

(3)T/C1(TCNT1H 与TCNT1L)

bit7 bit6 bit5 bit4 bit3 TCNT1[15:8] TCNT1[7:0] bit2 bit1 bit0 TCNT1H与TCNT1L组成了T/C1的数据寄存器TCNT1。通过它们可以直接对定时器/计数器单元的16 位计数器进行读写访问。为保证CPU 对高字节与低字节的同时读写,必须使用一个8 位临时高字节寄存器TEMP。TEMP 是所有的16 位寄存器共用的 。在计数器运行期间修改TCNT1的内容有可能丢失一次TCNT1与OCR1x的比较匹配操作。写TCNT1 寄存器将在下一个定时器周期阻塞比较匹配。

(4)输出比较寄存器1A(OCR1AH与OCR1AL)

bit7 bit6 bit5 bit4 bit3 OCR1A[15:8] OCR1A[7:0] bit2 bit1 bit0

(5)输出比较寄存器1B(OCR1BH与OCR1BL)

bit7 bit6 bit5 bit4 bit3 OCR1B[15:8] OCR1B[7:0] bit2 bit1 bit0 该寄存器中的16 位数据与TCNT1 寄存器中的计数值进行连续的比较,一旦数据匹配,将产生一个输出比较中断,或改变OC1x 的输出逻辑电平。

输出比较寄存器长度为16 位。为保证CPU 对高字节与低字节的同时读写,必须使用一个8 位临时高字节寄存器TEMP。TEMP 是所有的16 位寄存器共用的,

(6)输入捕捉寄存器1(ICR1H 与ICR1L)

bit7 bit6 bit5 bit4 bit3 ICR1[15:8] ICR1[7:0] bit2 bit1 bit0 当外部引脚ICP1(或T/C1的模拟比较器)有输入捕捉触发信号产生时,计数器TCNT1中的值写入ICR1 中。ICR1 的设定值可作为计数器的TOP 值。

输入捕捉寄存器长度为16 位。为保证CPU 对高字节与低字节的同时读写,必须使用一个8 位临时高字节寄存器TEMP。TEMP 是所有的16 位寄存器共用的。

3、定时器2

(1)T/C 控制寄存器TCCR2

bit7 bit6 bit5 bit4 bit3 FOC2 WGM20 COM21 COM20 WGM21

FOC2: 强制输出比较位

FOC2仅在WGM指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,在使用PWM 时,写TCCR2要对其清零。对其写1 后,波形发生器将立即进行比较操作。比较匹配输出引脚 OC2 将按照COM21:0 的设置输出相应的电平。要注意FOC2类似一个锁存信号,真正对强制输出比较起作用的是COM21:0 的设置。

FOC2不会引发任何中断,也不会在利用OCR2作为TOP的CTC模式下对定时器进行清零的操作。 读FOC2 的返回值永远为0。

WGM21:0: 波形产生模式

这几位控制计数器的计数序列,计数器的最大值TOP,以及产生何种波形。T/C 支持的模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM 模式。 波形产生模式的位定义

bit2 CS22 bit1 CS21 bit0 CS20 模式 WGM21 WGM20 T/C 的工作模式 0 1 2 3 0 0 1 1 0 1 0 1 OCR2的更 TOV2 的置位时刻 新时间 普通 0xFF 立即更新 MAX 相位修正PWM 0xFF TOP BOTTOM CTC OCR0 立即更新 MAX 快速PWM 0xFF TOP MAX TOP COM21:0: 比较匹配输出模式

这些位决定了比较匹配发生时输出引脚OC2 的电平。如果COM21:0 中的一位或全部都置位, OC2 以比较匹配输出的方式进行工作。同时其方向控制位要设置为1 以使能输出驱动器。

当OC2 连接到物理引脚上时, COM21:0 的功能依赖于WGM21:0 的设置。下表给出了当WGM21:0 设置为普通模式或CTC 模式时COM21:0 的功能。

比较输出模式,非PWM 模式 COM21 0 0 1 1 COM21 0 0 1 1 COM20 0 1 0 1 COM20 0 1 0 1 说明 正常的端口操作,不与OC2相连接 比较匹配发生时OC2取反 比较匹配发生时OC2清零 比较匹配发生时OC2置位 说明 正常的端口操作,不与OC2相连接 保留 比较匹配发生时OC2清零,计数到TOP 时OC2置位 比较匹配发生时OC2置位,计数到TOP 时OC2清零 比较输出模式,快速PWM 模式 注意:一个特殊情况是OCR2 等于TOP,且COM21 置位。此时比较匹配将被忽略,而计数到TOP 时OC2 的动作继续有效。

比较输出模式,相位修正PWM 模式 COM21 0 0 1 1 效。

COM20 0 1 0 1 说明 正常的端口操作,不与OC2相连接 保留 在升序计数时发生比较匹配将清零OC2 ,降序计数时发生比较匹配将置位OC2 在升序计数时发生比较匹配将置位OC2 ,降序计数时发生比较匹配将清零 OC2 注意: 一个特殊情况是OCR2 等于TOP,且COM21 置位。此时比较匹配将被忽略,而计数到TOP 时OC2的动作继续有 CS02:0: 时钟选择 CS22 0 0 0 0 1 1 1 1 CS21 0 0 1 1 0 0 1 1 CS20 0 1 0 1 0 1 0 1 说 明 无时钟, T/C 不工作 clkI/O/1 ( 没有预分频) clkI/O/8 ( 来自预分频器) clkI/O/64 ( 来自预分频器) clkI/O/256 ( 来自预分频器) clkI/O/1024 ( 来自预分频器) 时钟由T0 引脚输入,下降沿触发 时钟由T0 引脚输入,上升沿触发 如果T/C2 使用外部时钟,即使T2被配置为输出,其上的电平变化仍然会驱动记数器。利用这一特性可通过软件控制记数。

(2)T/C 寄存器TCNT2

bit7 bit6 bit5 bit4 bit3 TCNT2[7:0] bit2 bit1 bit0 通过T/C 寄存器可以直接对计数器的8 位数据进行读写访问。对TCNT2 寄存器的写访问将在下一个时钟阻止比较匹配。在计数器运行的过程中修改TCNT2的数值有可能丢失一次TCNT2 和OCR2 的比较匹配。

(3)输出比较寄存器OCR2

bit7 bit6 bit5 bit4 bit3 OCR2[7:0] bit2 bit1 bit0 输出比较寄存器包含一个8 位的数据,不间断地与计数器数值TCNT2 进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC2 引脚上产生波形。

(4)异步状态寄存器ASSR

bit7 – bit6 – bit5 – bit4 – bit3 AS2 bit2 TCN2UB bit1 OCR2UB bit0 TCR2UB AS2: 异步 T/C2

AS2为\时T/C2由I/O时钟clkI/O驱动;AS2为\时T/C2由连接到TOSC1引脚的晶体振荡

器驱动。改变AS2 有可能破坏TCNT2、OCR2 与TCCR2 的内容。

TCN2UB: T/C2 更新中

T/C2工作于异步模式时,写TCNT2将引起TCN2UB置位。当TCNT2从暂存寄存器更新完毕后 TCN2UB 由硬件清零。TCN2UB 为0表明TCNT2 可以写入新值了。

OCR2UB: 输出比较寄存器2 更新中

T/C2工作于异步模式时,写OCR2将引起OCR2UB置位。当OCR2从暂存寄存器更新完毕后OCR2UB 由硬件清零。OCR2UB 为0 表明OCR2 可以写入新值了。

TCR2UB: T/C2 控制寄存器更新中

T/C2工作于异步模式时,写TCCR2将引起TCR2UB置位。当TCCR2从暂存寄存器更新完毕后TCR2UB 由硬件清零。TCR2UB 为0 表明TCCR2 可以写入新值了。

如果在更新忙标志置位的时候写上述任何一个寄存器都将引起数据的破坏,并引发不必要的中断。 读取TCNT2、OCR2 和TCCR2 的机制是不同的。读取TCNT2 得到的是实际的值,而OCR2 和TCCR2 则是从暂存寄存器中读取的。

定时器/ 计数器2 的异步操作T/C2 工作于异步模式时要考虑如下几点:

警告:在同步和异步模式之间的转换有可能造成TCNT2、OCR2 和TCCR2 数据的损毁。 安全的步骤应该是:

",. 清零OCIE2 和TOIE2 以关闭T/C2 的中断 ",. 设置AS2 以选择合适的时钟源

",. 对TCNT2、OCR2 和TCCR2 写入新的数据 ",. 切换到异步模式:等待TCN2UB、OCR2UB 和TCR2UB 清零 ",. 清除T/C2 的中断标志 ",. 需要的话使能中断

",. 振荡器最好使用32.768 kHz手表晶振。给TOSC1 提供外部时钟,可能会造成T/C2 工作错误。系统主时钟必须比晶振高4 倍以上。 ",. 写TCNT2,OCR2和TCCR2时数据首先送入暂存器,两个TOSC1时钟正跳变后才锁存到对应到的寄存器。

在数据从暂存器写入目的寄存器之前不能执行新的数据写入操作。3 个寄存器具有各自独立的暂存器,因此写TCNT2 并不会干扰OCR2 的写操作。异步状态寄存器ASSR 用来检查数据是否已经写入到目的寄存器。为0则MCU 就进入了休眠模式,那么比较匹配中断永远不会发生, MCU 也永远无法唤醒了。 ",. 如果要用T/C2作为省电模式或扩展Standby模式的唤醒条件,必须注意重新进入这些休眠模式的过程。中

断逻辑需要一个TOSC1 周期进行复位。如果从唤醒到重新进入休眠的时间小于一个TOSC1 周期,中断将不再发生,器件也无法唤醒。如果用户怀疑自己程序是否满足这一条件,可以采取如下方法: ",. 对TCCR2、TCNT2 或OCR2 写入合适的数据 ",. 等待ASSR 相应的更新忙标志清零 ",. 进入省电模式或扩展Standby 模式 ",. 若选择了异步工作模式,T/C2 的 32.768 kHz 振荡器将一直工作,除非进入掉电模式 或 Standby 模式。用户应该注意,此振荡器的稳定时间可能长达1 秒钟。因此,建议用户在器件上电复位,或从掉电/Standby

模式唤醒时至少等待1 秒钟后再使用T/C2。同时,由于启动过程时钟的不稳定性,唤醒时所有的T/C2 寄存器的内容都可能不正确,不论使用的是晶体还是外部时钟信号。用户必须重新给这些寄存器赋值。 ",. 使用异步时钟时省电模式或扩展Standby 模式的唤醒过程:中断条件满足后,在下一个定时器时钟唤醒过程

启动。也就是说,在处理器可以读取计数器的数值之前计数器至少又累加了一个时钟。唤醒后MCU 停止4 个时钟,接着执行中断服务程序。中断服务程序结束之后开始执行SLEEP 语句之后的程序。

",. 从省电模式唤醒之后的短时间内读取TCNT2 可能返回不正确的数据。因为TCNT2 是由异步的TOSC 时钟驱动的,而读取TCNT2 必须通过一个与内部I/O 时钟同步的寄存器来完成。同步发生于每个TOSC1 的上

升沿。从省电模式唤醒后I/O 时钟重新激活,而读到的TCNT2 数值为进入休眠模式前的值,直到下一个TOSC1 上升沿的到来。从省电模式唤醒时TOSC1 的相位是完全不可预测的,而且与唤醒时间有关。因此,读取TCNT2 的推荐序列为:

",. 写一个任意数值到OCR2 或TCCR2 ",. 等待相应的更新忙标志清零

",. 读TCNT2 ",. 在异步模式下,中断标志的同步需要3 个处理器周期加一个定时器周期。在处理器可以读取引起中断标志置位

的计数器数值之前计数器至少又累加了一个时钟。输出比较引脚的变化与定时器时钟同步,而不是处理器时钟。

(5)特殊功能IO寄存器SFIOR bit7 bit6 bit5 ADTS2 ADTS1 ADTS0

PSR2: 预分频复位T/C2

当该位置1, T/C2 预分频器复位。操作完成后,该位被硬件清零。该位写0 无效。若内部CPU 时钟作为T/C2 时钟,该位读为0。当T/C2 工作在异步模式时,直到预分频器复位该位保持为1。

bit4 – bit3 ACME bit2 PUD bit1 PSR2 bit0 PSR10 三、串行外设接口SPI

1. SPI 控制寄存器SPCR

bit7 SPIE bit6 SPE bit5 bit4 DORD MSTR bit3 CPOL bit2 CPHA bit1 SPR1 bit0 SPR0 SPIE: 使能SPI 中断

置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全局中断使能位置位,就会引发SPI 中断。 SPE: 使能SPI

SPE 置位将使能SPI。进行任何SPI 操作之前必须置位SPE。

DORD: 数据次序

DORD 置位时数据的LSB 首先发送;否则数据的MSB 首先发送。

MSTR: 主/ 从选择 MSTR置位时选择主机模式,否则为从机。如果MSTR为\,SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位。用户必须重新设置MSTR 进入主机模式。

CPOL: 时钟极性

CPOL 置位表示空闲时SCK 为高电平;否则空闲时SCK 为低电平。 CPOL 功能 CPOL 0 1 起始沿结束沿 上升沿下降沿 下降沿上升沿 CPOL 0 1 SPR1, SPR0: SPI 时钟速率选择1 与0

确定主机的SCK 速率。SPR1 和SPR0 对从机没有影响。SCK 和振荡器的时钟频率fosc 关系如下表所示:

SCK 和振荡器频率的关系 SPI2X 0 0 0 0 1 1 1 1 SPR1 0 0 1 1 0 0 1 1 SPR0 0 1 0 1 0 1 0 1 SCK fosc/4 fosc/16 fosc/64 fosc/128 fosc/2 fosc/8 fosc/32 fosc/64

2.SPI 状态寄存器SPSR

bit7 SPIF bit6 WCOL bit5 – bit4 – bit3 – bit2 – bit1 – bit0 SPI2X SPIF: SPI 中断标志

串行发送结束后,SPIF 置位。若此时寄存器SPCR 的SPIE 和全局中断使能位置位,SPI中断即产生。如果SPI 为主机, SS 配置为输入,且被拉低, SPIF 也将置位。进入中断服务程序后SPIF自动清零。或者可以通过先读SPSR,紧接着访问SPDR来对SPIF清零。

WCOL: 写碰撞标志 在发送当中对SPI 数据寄存器SPDR写数据将置位WCOL。WCOL可以通过先读SPSR,紧接着访问

SPDR 来清零。

Bit 5..1 – Res: 保留 保留位,读操作返回值为零。

SPI2X: SPI 倍速

置位后SPI 的速度加倍。若为主机,则SCK 频率可达CPU 频率的一半。若为从机,只能保证fosc /4。 ATmega16的SPI接口同时还用来实现程序和EEPROM的下载和上载。

3. SPI 数据寄存器SPDR

bit7 bit6 bit5 MSB bit4 bit3 bit2 bit1 LSB bit0 SPI 数据寄存器为读/写寄存器,用来在寄存器文件和SPI移位寄存器之间传输数据。写寄存器将启动数据传输,读寄存器将读取寄存器的接收缓冲器。

4.数据模式

相对于串行数据, SCK 的相位和极性有4 种组合。CPHA 和CPOL 控制组合的方式。SPI数据传输格式。每一位数据的移出和移入发生于SCK不同的信号跳变沿,以保证有足够的时间使数据稳定。 CPOL 与CPHA 功能 模式 CPOL = 0 CPOL = 0 CPOL = 1 CPOL = 1

起始沿结束沿SPI CPHA = 0 采样 ( 上升沿) 采样 ( 下降沿) 0 CPHA = 1 设置 ( 上升沿) 采样 ( 下降沿) 1 CPHA = 0 采样 ( 下降沿) 采样(上升沿)2 CPHA = 1 采样 ( 下降沿) 采样 ( 上升沿) 3 四、USART (通用同步和异步串行接收器和转发器)

通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特点为: ",. 全双工操作( 独立的串行接收和发送寄存器) ",. 异步或同步操作 ",. 主机或从机提供时钟的同步操作 ",. 高精度的波特率发生器

",. 支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位 ",. 硬件支持的奇偶校验操作 ",. 数据过速检测 ",. 帧错误检测

",. 噪声滤波,包括错误的起始位检测,以及数字低通滤波器 ",. 三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断 ",. 多处理器通讯模式 ",. 倍速异步通讯模式

1. USART I/O 数据寄存器UDR

bit7 bit6 bit5 bit4 bit3 RXB[7:0] TXB[7:0] bit2 bit1 bit0 USART 发送数据缓冲寄存器和USART 接收数据缓冲寄存器共享相同的I/O 地址,称为USART 数据寄存器或UDR。将数据写入UDR 时实际操作的是发送数据缓冲器存器 (TXB),读UDR 时实际返回的是接收数据缓冲寄存器(RXB) 的内容。

在5、6、7 比特字长模式下,未使用的高位被发送器忽略,而接收器则将它们设置为0。只有当UCSRA寄存器的UDRE标志置位后才可以对发送缓冲器进行写操作。如果UDRE没有置位,那么写入UDR 的数据会被USART 发送器忽略。当数据写入发送缓冲器后,若移位寄存器为空,发送器将把数据加载到发送移位寄存器。然后数据串行地从TxD 引脚输出。

接收缓冲器包括一个两级FIFO,一旦接收缓冲器被寻址FIFO 就会改变它的状态。因此不要对这一存储单元使用读- 修改- 写指令(SBI 和CBI)。使用位查询指令(SBIC 和SBIS) 时也要小心,因为这也有可能改变FIFO 的状态。

2. USART 控制和状态寄存器A(UCSRA)

bit7 RXC bit6 TXC bit5 UDRE bit4 FE bit3 DOR bit2 PE bit1 U2X bit0 MPCM RXC: USART 接收结束

接收缓冲器中有未读出的数据时RXC 置位,否则清零。接收器禁止时,接收缓冲器被刷新,导致RXC 清零。RXC 标志可用来产生接收结束中断( 见对RXCIE 位的描述)。

TXC: USART 发送结束

发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位。执行发送结束中断时TXC 标志自动清零,也可以通过写1 进行清除操作。TXC 标志可用来产生发送结束中断( 见对TXCIE 位的描述)。 UDRE: USART 数据寄存器空

UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE为1说明缓冲器为空,已准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断(见对UDRIE位的描述)。复位后UDRE 置位,表明发送器已经就绪。

FE: 帧错误

如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个停止位为0,那么FE 置

位。这一位一直有效直到接收缓冲器(UDR) 被读取。当接收到的停止位为1 时, FE 标志为0。对UCSRA 进行写入时,这一位要写0。 DOR: 数据溢出

数据溢出时DOR 置位。当接收缓冲器满( 包含了两个数据),接收移位寄存器又有数据,若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器 (UDR) 被读取。对UCSRA 进行写入时,这一位要写0。 PE: 奇偶校验错误

当奇偶校验使能(UPM1 = 1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时UPE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。对UCSRA 进行写入时,这一位要写0。 U2X: 倍速发送

这一位仅对异步操作有影响。使用同步操作时将此位清零。此位置1可将波特率分频因子从16降到8,从而有效的将异步通信模式的传输速率加倍。 MPCM: 多处理器通信模式

设置此位将启动多处理器通信模式。MPCM置位后,USART 接收器接收到的那些不包含地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。

3. USART控制和状态寄存器B(UCSRB) bit7 bit6 bit5 bit4 RXCIE TXCIE UDRIE RXEN bit3 bit2 bit1 TXEN UCSZ2 RXB8 bit0 TXB8 RXCIE: 接收结束中断使能

置位后使能RXC中断。当RXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的RXC亦为1时可以产生USART接收结束中断。

TXCIE: 发送结束中断使能

置位后使能TXC中断。当TXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的TXC亦为1时可以产生USART发送结束中断。

UDRIE: USART 数据寄存器空中断使能

置位后使能UDRE中断。当UDRIE 为1,全局中断标志位SREG置位,UCSRA寄存器的UDRE 亦

为1时可以产生USART数据寄存器空中断。

RXEN: 接收使能

置位后将启动USART接收器。RxD 引脚的通用端口功能被USART功能所取代。禁止接收器将刷新接收缓冲器,并使 FE、DOR及PE标志无效。

TXEN: 发送使能

置位后将启动将启动USART发送器。TxD引脚的通用端口功能被USART功能所取代。TXEN 清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传

送的数据。发送器禁止后,TxD引脚恢复其通用I/O功能。

UCSZ2: 字符长度

UCSZ2与UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符长度)。

RXB8: 接收数据位8

对9位串行帧进行操作时,RXB8 是第9个数据位。读取UDR包含的低位数据之前首先要读取RXB8。

TXB8: 发送数据位8

对9位串行帧进行操作时,TXB8是第9个数据位。写UDR之前首先要对它进行写操作。

4. USART控制和状态寄存器C(UCSRC) bit7 bit6 bit5 bit4 URSEL UMSEL UPM1 UPM0 bit3 USBS bit2 bit1 bit0 UCSZ1 UCSZ0 UCPOL UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问。

URSEL: 寄存器选择

通过该位选择访问UCSRC寄存器或UBRRH寄存器。当读UCSRC时,该位为1 ;当写UCSRC时,URSEL为1。

UMSEL: USART 模式选择

通过这一位来选择同步或异步工作模式。 UMSEL设置 UMSEL 0 1 模式 异步操作 同步操作 UPM1:0: 奇偶校验模式

这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数据,发送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与UPM0 所设置的值进行比较。如果不匹配,那么就将UCSRA 中的PE 置位。

UPM 设置 UPM1 0 0 1 1 UPM0 0 1 0 1 奇偶模式 禁止 保留 偶校验 奇校验 USBS: 停止位选择

通过这一位可以设置停止位的位数。接收器忽略这一位的设置。 USBS 设置 USBS 0 1 停止位位数 1 2 UCSZ1:0: 字符长度

UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。 UCSZ 设置 UCSZ2 UCSZ1 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1 UCSZ0 0 1 0 1 0 1 0 1 字符长度 5 6 7 8 保留 保留 保留 9 UCPOL: 时钟极性

这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据的改变和输入数

据采样,以及同步时钟XCK 之间的关系。

UCPOL 设置 UCPOL 0 1 发送数据的改变(TxD引脚的输出) XCK上升沿XCK XCK下降沿XCK 接收数据的采样(RxD 引脚的输入) 下降沿 上升沿

5. USART波特率寄存器(UBRRL和UBRRH)

bit15 URSEL bit14 – bit13 – bit12 – bit11 bit10 bit9 UBRR[11:8] bit8 UBRR[7:0] UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问。

URSEL: 寄存器选择

通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UBRRH时,该位为0;当写UBRRH时, URSEL为0。

Bit 14:12 – 保留位

这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH时将这些位清零。

UBRR11:0: USART 波特率寄存器

这个12位的寄存器包含了USART的波特率信息。其中UBRRH包含了USART波特率高4 位,UBRRL包含了低8位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRL 将立即更新波特率分频器。

五、两线串行接口TWI

?

", 简单,但是强大而灵活的通讯接口,只需要两根线 ",. 支持主机和从机操作 ",. 器件可以工作于发送器模式或接收器模式 ",. 7位地址空间允许有128个从机 ",. 支持多主机仲裁 ",. 高达400kHz 的数据传输率 ",. 斜率受控的输出驱动器 ",. 可以抑制总线尖峰的噪声抑制器

",. 完全可编程的从机地址以及公共地址

",. 睡眠时地址匹配可以唤醒AVR 两线接口TWI很适合于典型的处理器应用。TWI协议允许系统设计者只用两根双向传输线就可以将128个不同的设备互连到一起。这两根线一是时钟SCL,一是数据SDA。外部硬件只需要两个上拉电阻,每根线上一个。所有连接到总线上的设备都有自己的地址。TWI协议解决了总线仲裁的问题。

1. TWI比特率寄存器TWBR

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 TWBR7 TWBR6 TWBR5 TWBR4 TWBR3 TWBR2 TWBR1 TWBR0 TWBR为比特率发生器分频因子。比特率发生器是一个分频器,在主机模式下产生SCL时钟频率。

2. TWI控制寄存器TWCR

bit7 TWINT bit6 TWEA bit5 bit4 bit3 bit2 TWEN bit1 – bit0 TWIE TWSTA TWSTO TWWC TWCR用来控制TWI操作。它用来使能TWI,通过施加START到总线上来启动主机访问,产生接收器应答,产生STOP状态,以及在写入数据到TWDR 寄存器时控制总线的暂停等。这个寄存器还可以给出在TWDR无法访问期间,试图将数据写入到TWDR而引起的写入冲突信息。 TWINT: TWI 中断标志

当TWI完成当前工作,希望应用程序介入时TWINT置位。若SREG的I标志以及TWCR寄存器的TWIE标志也置位,则MCU执行TWI中断例程。当TWINT置位时, SCL信号的低电平被延长。TWINT标志的清零必须通过软件写\来完成。执行中断时硬件不会自动将其改写为\。要注意的是,只要这一位被清零,TWI立即开始工作。因此,在清零TWINT之前一定要首先完成对地址寄存器TWAR,状态寄

存器TWSR,以及数据寄存器TWDR 的访问。

TWEA: 使能TWI 应答

TWEA标志控制应答脉冲的产生。若TWEA置位,出现如下条件时接口发出ACK脉冲:

",. 器件的从机地址与主机发出的地址相符合 ",. TWAR的TWGCE置位时接收到广播呼叫 ",. 在主机/从机接收模式下接收到一个字节的数据

将TWEA清零可以使器件暂时脱离总线。置位后器件重新恢复地址识别。

TWSTA: TWI START 状态标志

当CPU希望自己成为总线上的主机时需要置位TWSTA。TWI硬件检测总线是否可用。若总线空闲,接口就在总线上产生START状态。若总线忙,接口就一直等待,直到检测到一个STOP状态 ,然后产生

START以声明自己希望成为主机。发送START之后软件必须清零TWSTA。

TWSTO: TWI STOP 状态标志

在主机模式下,如果置位TWSTO,TWI 接口将在总线上产生STOP状态,然后TWSTO自动清零。在从机模式下,置位TWSTO可以使接口从错误状态恢复到未被寻址的状态。此时总线上不会有STOP状态

产生,但TWI返回一个定义好的未被寻址的从机模式且释放SCL与SDA为高阻态.

TWWC: TWI 写碰撞标志

当TWINT为低时写数据寄存器TWDR将置位TWWC。当TWINT为高时,每一次对TWDR的写访问都将更新此标志。 TWEN: TWI使能

TWEN位用于使能TWI操作与激活TWI接口。当TWEN位被写为\时,TWI引脚将I/O引脚切换到SCL与SDA引脚,使能波形斜率限制器与尖峰滤波器。如果该位清零, TWI接口模块将被关闭,所有TWI传输将被终止。 Res: 保留

保留,读返回值为‖0‖。

TWIE: 使能TWI中断

当SREG的I以及TWIE置位时,只要TWINT 为\, TWI中断就激活。

3. TWI状态寄存器TWSR

bit7 TWS7 bit6 TWS6 bit5 TWS5 bit4 TWS4 bit3 TWS3 bit2 – bit1 bit0 TWPS1 TWPS0 这5位用来反映TWI逻辑和总线的状态。不同的状态代码将会在后面的部分描述。注意从TWSR读出的值包括5位状态值与2位预分频值。检测状态位时设计者应屏蔽预分频位为\。这使状态检测独立于预分频器设置。在无特殊声明的情况下,在手册中使用该方法。 Res: 保留

保留,读返回值为\。

TWPS: TWI预分频位

这两位可读/写,用于控制比特率预分频因子。 TWI 比特率预分频器 TWPS1 TWPS0 0 0 1 1 bit7 TWD7 bit6 TWD6 bit5 TWD5 bit4 TWD4 0 1 0 1 bit3 TWD3 bit2 TWD2 预分频器值 1 4 16 64 bit1 TWD1 bit0 TWD0 4. TWI 数据寄存器TWDR 在发送模式, TWDR包含了要发送的字节;在接收模式, TWDR包含了接收到的数据。当TWI 接口没有进行移位工作(TWINT 置位) 时这个寄存器是可写的。 在第一次中断发生之前用户不能够初始化数据寄存器。只

要TWINT置位,TWDR的数据就是稳定的。在数据移出时,总线上的数据同时移入寄存器。TWDR总是包含了总线上出现的最后一个字节,除非MCU是从掉电或省电模式被TWI中断唤醒。此时TWDR的内容没有定义。总线仲裁失败时,主机将切换为从机,但总线上出现的数据不会丢失。ACK的处理由TWI逻辑自动管理, CPU不能直接访问ACK。

TWD: TWI 数据寄存器

根据状态的不同,其内容为要发送的下一个字节,或是接收到的数据。

5. TWI( 从机) 地址寄存器TWAR

bit7 TWA6 bit6 TWA5 bit5 TWA4 bit4 TWA3 bit3 TWA2 bit2 TWA1 bit1 TWA0 bit0 TWGCE TWAR的高7位为从机地址。工作于从机模式时,TWI将根据这个地址进行响应。主机模式不需要此地址。在多主机系统中, TWAR 需要进行设置以便其他主机访问自己。TWAR的LSB 用于识别广播地址 (0x00)。器件内有一个地址比较器。一旦接收到的地址和本机地址一致,芯片就请求中断。 TWA: TWI 从机地址寄存器其值为从机地址。 TWGCE: 使能TWI 广播识别

置位后MCU 可以识别TWI 总线广播。

六、模数转换器

1. ADC 多工选择寄存器ADMUX

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 REFS1:0: 参考电压选择

通过这几位可以选择参考电压。如果在转换过程中改变了它们的设置,只有等到当前转换结束(ADCSRA寄存器的ADIF置位)之后改变才会起作用。如果在AREF引脚上施加了外部参考电压,内部参考电压就不能被选用了。

ADC 参考电压选择 REFS1 0 0 1 1 REFS0 0 1 0 1 参考电压选择 AREF, AVCC, 保留 2.56V ADLAR: ADC 转换结果左对齐

ADLAR影响ADC转换结果在ADC数据寄存器中的存放形式。ADLAR置位时转换结果为左对齐,否则为右对齐。ADLAR 的改变将立即影响ADC 数据寄存器的内容,不论是否有转换正在进行。

MUX4:0: 模拟通道与增益选择位

输入通道与增益选择 通过这几位的设置,可以对连接到ADC 的模拟输入进行选择。也可对差分通道增 益进行选择。如果在转换过程中改变这几位的值,那么只有到转换结束 (ADCSRA 寄存器的ADIF 置位) 后新的设置才有效。

输入通道与增益选择 MUX4..0 单端输入正差 MUX4..0 单端输入正差 MUX4..0 分输入负差分输入增益 分输入负差分输入增益 00000 ADC0 ADC1 ADC2 00001 00010 00011 00100 00101 00110 00111 ADC0 01001 01010(1) 01011(1) 01100 01101 01110(1) 01111(1) 10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111

ADC5 1.22V 0V N/A ADC0 ADC1 ADC0 ADC1 ADC2 ADC3 ADC2 ADC3 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 ADC0 ADC1 ADC2 ADC3 ADC4 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 ADC0 ADC0 ADC0 ADC0 ADC2 ADC2 ADC2 ADC2 ADC1 ADC1 ADC2 ADC1 ADC1 ADC1 ADC1 ADC1 ADC2 ADC2 ADC2 ADC2 ADC2 ADC2 N/A 10x 10x 200x 200x 10x 10x 200x 200x 1x 1x ADC1 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x

2、ADC 控制和状态寄存器A(ADCSRA) bit7 ADEN bit6 bit5 bit4 ADSC ADATE ADIF bit3 bit2 bit1 bit0 ADIE ADPS2 ADPS1 ADPS0 ADEN: ADC使能

ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC将立即中止正在进行的转换。 ADSC: ADC开始转换

在单次转换模式下,ADSC置位将启动一次ADC转换。在连续转换模式下,ADSC置位将启动首次转换。

第一次转换(在ADC启动之后置位ADSC,或者在使能ADC的同时置位ADSC)需要25个ADC 时钟周期,而不是正常情况下的13 个。第一次转换执行ADC初始化的工作。在转换进行过程中读取ADSC

的返回值为\,直到转换结束。ADSC 清零不产生任何动作。

ADATE: ADC自动触发使能

ADATE置位将启动ADC自动触发功能。触发信号的上跳沿启动ADC转换。触发信号源通过SFIOR寄存器的ADC触发信号源选择位ADTS设置。

ADIF: ADC中断标志

在ADC转换结束,且数据寄存器被更新后, ADIF置位。如果ADIE及SREG中的全局中断使能位I也置位,ADC 转换结束中断服务程序即得以执行,同时ADIF硬件清零。此外,还可以通过向此标志写1来清ADIF。要注意的是,如果对ADCSRA进行读-修改-写操作,那么待处理的中断会被禁止。这也适用于SBI及CBI指令。 ADIE: ADC 中断使能

若ADIE及SREG 的位I置位, ADC转换结束中断即被使能。

ADPS2:0: ADC 预分频器选择位

由这几位来确定XTAL 与ADC 输入时钟之间的分频因子。

ADC 预分频选择 ADPS2 0 0 0 0 1 1 1 1

ADPS1 0 0 1 1 0 0 1 1 ADPS0 0 1 0 1 0 1 0 1 分频因子 2 2 4 8 16 32 64 128 3、ADC 数据寄存器(ADCL及ADCH)

ADLAR = 0 bit15 – ADC7 bit14 – ADC6 bit13 – ADC5 bit12 – ADC4 bit11 – ADC3 bit10 – ADC2 bit9 ADC9 ADC1 bit8 ADC8 ADC0

ADLAR = 1 bit15 ADC9 ADC1

bit14 ADC8 ADC0 bit13 ADC7 – bit12 ADC6 – bit11 ADC5 – bit10 ADC4 – bit9 ADC3 – bit8 ADC2 – ADC转换结束后,转换结果存于这两个寄存器之中。如果采用差分通道,结果由2的补码形式表示。 读取ADCL之后,ADC数据寄存器一直要等到ADCH也被读出才可以进行数据更新。因此,如果转换结果为左对齐,且要求的精度不高于8比特,那么仅需读取ADCH就足够了。否则必须先读出ADCL再读ADCH。

ADMUX寄存器的ADLAR及MUXn 会影响转换结果在数据寄存器中的表示方式。如果ADLAR 为1,那么结果为左对齐;反之(系统缺省设置),结果为右对齐。 ADC9:0: ADC转换结果

4.特殊功能IO寄存器SFIOR

bit7 ADTS2 bit6 ADTS1 bit5 ADTS0 bit4 – bit3 ACME bit2 PUD bit1 PSR2 bit0 PSR10 ADTS2:0: ADC 自动触发源

若ADCSRA寄存器的ADATE置位,ADTS的值将确定触发ADC转换的触发源;否则,ADTS的设置没有意义。被选中的中断标志在其上升沿触发ADC转换。从一个中断标志清零的触发源切换到中断标志置位的触发源会使触发信号产生一个上升沿。如果此时ADCSRA寄存器的ADEN 为1,ADC转换即被启动。切换到连续运行模式(ADTS[2:0]=0)时,即使ADC中断标志已经置位也不会产生触发事件。 ADC 自动触发源选择 ADTS2 ADTS1 ADTS0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 触发源 连续转换模式 模拟比较器 外部中断请求0 定时器/ 定时器/ 定时器/ 定时器/ 定时器/ Res: 保留位

这一位保留。为了与以后的器件相兼容,在写SFIOR时这一位应写0。

七、 模拟比较器

1. 特殊功能IO寄存器SFIOR

bit7 ADTS2 bit6 ADTS1 bit5 ADTS0 bit4 – bit3 ACME bit2 PUD bit1 PSR2 bit0 PSR10 ACME: 模拟比较器多路复用器使能

当此位为逻辑\,且ADC处于关闭状态(ADCSRA 寄存器的ADEN为\时,ADC多路复用器为模拟比较器选择负极输入。当此位为\时, AIN1连接到比较器的负极输入端。更详细描述的请参见 P191― 模拟比较器多工输入‖ 。

2. 模拟比较器控制和状态寄存器ACSR

bit7 ACD bit6 ACBG bit5 ACO bit4 ACI bit3 ACIE bit2 ACIC bit1 ACIS1 bit0 ACIS0 ACD: 模拟比较器禁用 ACD置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。这可以减少器件工作模式及空闲模式下的功耗。改变ACD位时,必须清零ACSR寄存器的ACIE位来禁止模拟比较器中断。否则ACD改变时可能会产生中断。

ACBG: 选择模拟比较器的能隙基准源

ACBG置位后,模拟比较器的正极输入由能隙基准源所取代。否则,AIN0连接到模拟比较器的正极输入。 ACO: 模拟比较器输出

模拟比较器的输出经过同步后直接连到ACO。同步机制引入了1-2 个时钟周期的延时。

ACI: 模拟比较器中断标志

当比较器的输出事件触发了由ACIS1及ACIS0定义的中断模式时,ACI置位。如果ACIE和SREG寄存器的全局中断标志I也置位,那么模拟比较器中断服务程序即得以执行,同时ACI被硬件清零。ACI也可以通过写\来清零。 ACIE: 模拟比较器中断使能

当ACIE位被置\且状态寄存器中的全局中断标志I也被置位时,模拟比较器中断被激活。否则中断被禁止。 ACIC: 模拟比较器输入捕捉使能

ACIC置位后允许通过模拟比较器来触发T/C1的输入捕捉功能。此时比较器的输出被直接连接到输入捕捉

的前端逻辑,从而使得比较器可以利用T/C1输入捕捉中断逻辑的噪声抑制器及触发沿选择功能。ACIC为\时模拟比较器及输入捕捉功能之间没有任何联系。为了使比较器可以触发T/C1 的输入捕捉中断,定时器中断屏蔽寄存器TIMSK的TICIE1必须置位。

ACIS1, ACIS0: 模拟比较器中断模式选择

这两位确定触发模拟比较器中断的事件。Table79给出了不同的设置。 ACIS1/ACIS0 设置 ACIS1 ACIS0 0 0 1 1 0 1 0 1 中断模式 比较器输出变化即可触发中断 保留 比较器输出的下降沿产生中断 比较器输出的上升沿产生中断 需要改变ACIS1/ACIS0时,必须清零ACSR寄存器的中断使能位来禁止模拟比较器中断。否则有可能在改变这两位时产生中断。

3. 模拟比较器多工输入

可以选择ADC7..0之中的任意一个来代替模拟比较器的负极输入端。ADC复用器可用来完成这个功能。当然,为了使用这个功能首先必须关掉ADC。如果模拟比较器复用器使能位(SFIOR 中的ACME)被置位,且ADC也已经关掉(ADCSRA 寄存器的ADEN为0),则可以通过ADMUX 寄存器的MUX2..0来选择替代模拟比较器负极输入的管脚。如果ACME清零或ADEN置位,则模拟比较器的负极输入为AIN1。 模拟比较器复用输入

ACME 0 1 1 1 1 1 1 1 1 1 ADEN x 1 0 0 0 0 0 0 0 0 MUX2..0 xxx xxx 000 001 010 011 100 101 110 111 模拟比较器负极输入 AIN1 AIN1 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7

九. EEPROM 数据存储器

1. EEPROM 地址寄存器(EEARH和EEARL)

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 Res: 保留

保留位,读操作返回值为零。 EEAR8..0: EEPROM 地址

EEPROM地址寄存器– EEARH和EEARL指定了512字节的EEPROM空间。EEPROM地址是线性的,从0 到511。EEAR的初始值没有定义。在访问EEPROM之前必须为其赋予正确的数据。

2. EEPROM数据寄存器EEDR

bit7 MSB bit6 bit5 bit4 bit3 bit2 bit1 bit0 LSB EEDR7.0: EEPROM 数据

对于EEPROM写操作, EEDR是需要写到EEAR单元的数据;对于读操作,EEDR 是从地址EEAR读取的数据。

3. EEPROM控制寄存器EECR

bit7 – bit6 – bit5 – bit4 – bit3 EERIE bit2 bit1 bit0 EERE EEMWE EEWE Res: 保留

保留位,读操作返回值为零。

EERIE: 使能EEPROM 准备好中断

若SREG 的I 为\,则置位EERIE 将使能EEPROM 准备好中断。清零EERIE 则禁止此中断。当EEWE 清零时EEPROM 准备好中断即可发生。

EEMWE: EEPROM 主机写使能

EEMWE决定了EEWE置位是否可以启动EEPROM写操作。当EEMWE为\时,在4个时钟周期内置位EEWE将把数据写入EEPROM的指定地址;若EEMWE为\,则操作EEWE不起作用。EEMWE置位后4个周期,硬件对其清零。见EEPROM 写过程中对EEWE 位的描述。

EEWE: EEPROM写使能

EEWE为EEPROM写操作的使能信号。当EEPROM数据和地址设置好之后,需置位EEWE以便将数据写入EEPROM。此时EEMWE必须置位,否则EEPROM写操作将不会发生。写时序如下(第3步和第4步的次序并不重要):

",. 等待EEWE位变为零 ",. 等待SPMCSR中的SPMEN位变为零 ",. 将新的EEPROM地址写入EEAR(可选)

",. 将新的EEPROM数据写入EEDR(可选) ",. 对EECR寄存器的EEMWE写\,同时清零EEWE

",. 在置位EEMWE的4个周期内,置位EEWE

在CPU写Flash存储器的时候不能对EEPROM进行编程。在启动EEPROM写操作之前软件必须检查Flash写操作是否已经完成。仅在软件包含引导程序并允许CPU对Flash进行编程时才有用。

注意:如果一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR或EEDR寄存器可能被修改,

引起EEPROM 操作失败。建议此时关闭全局中断标志I。经过写访问时间之后,EEWE 硬件清零。用户可以凭借这一位判断写时序是否已经完成。EEWE 置位后,CPU 要停止两个时钟周期才会运行下一条指令。 EERE: EEPROM 读使能

EERE为EEPROM读操作的使能信号。当EEPROM地址设置好之后,需置位EERE以便将数据读入

EEAR。EEPROM 数据的读取只需要一条指令,且无需等待。读取EEPROM后CPU要停止4个时钟周期才可以执行下一条指令。

用户在读取EEPROM时应该检测EEWE。如果一个写操作正在进行,就无法读取EEPROM,也无法改变寄存器EEAR。

本文来源:https://www.bwwdw.com/article/m137.html

Top