精atmega16寄存器笔记整理汇编.docx
《精atmega16寄存器笔记整理汇编.docx》由会员分享,可在线阅读,更多相关《精atmega16寄存器笔记整理汇编.docx(57页珍藏版)》请在冰豆网上搜索。
![精atmega16寄存器笔记整理汇编.docx](https://file1.bdocx.com/fileroot1/2023-2/25/0f146003-a2be-4214-800c-d6a2c0505ced/0f146003-a2be-4214-800c-d6a2c0505ced1.gif)
精atmega16寄存器笔记整理汇编
1、中断寄存器
中断
是指微处理器在程序执行期间响应外部的事务请求,暂停当前的处理器工作转而处理外部事件,外部事件处理完成之后返回原来工作暂停的地方继续执行程序。
Atmega16具有21个中断源,每个中断源都有独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己独立的使能位。
如果中断位I和中断向量使能位都置位,则中断发生,中断标志位置位,并执行中断服务程序。
中断向量表见表2,处于越低地址的中断具有更高优先级。
表2中断向量表向量号
程序地址
中断源
描述
1
0x00
RESET
外部引脚电平引发的复位,上电复位,掉电
检测复位,看门狗复位,以及JTAGAVR复位
2
0x02
INT0
外部中断请求0
3
0x04
INT1
外部中断请求1
4
0x06
TIMER2COMP
定时器/计数器2比较匹配
5
0x08
TIMER2OVF
定时器/计数器2溢出
6
0x0a
TIMER1CAPT
定时器/计数器1事件捕捉
7
0x0c
TIMER1COMPA
定时器/计数器1比较匹配A
8
0x0e
TIMER1COMPB
定时器/计数器1比较匹配B
9
0x10
TIMER1OVF
定时器/计数器1溢出
10
0x12
TIMER0OVF
定时器/计数器0溢出
11
0x14
SPI,STC
SPI串行传输结束
12
0x16
USART,RXC
USART,Rx结束
13
0x18
USART,UDRE
USART数据寄存器空
14
0x1a
USART,TXC
USART,Tx结束
15
0x1c
ADC
ADC转换结束
16
0x1e
EE_RDY
EEPROM就绪
17
0x20
ANA_COMP
模拟比较器
18
0x22
TWI
两线串行接口
19
0x24
INT2
外部中断请求2
20
0x26
TIMER0COMP
定时器/计数器0比较匹配
21
0x28
SPM_RDY
保存程序存储器内容就绪
<一>全局中断控制位
1、状态寄存器SREG
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
I
T
H
S
V
N
Z
C
I:
全局中断使能位。
在I置位后,单独的中断使能由不同的中断寄存器控制。
若I为0,则禁止中断。
<二>外部中断?
2.MCU控制寄存器MCUCR
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
SM2
SE
SM1
SM0
ISC11
ISC10
ISC01
ISC00
SE:
MCU休眠使能位
SM1~SM0:
MCU休眠模式选择
SM2
SM1
SM0
休眠模式
0
0
0
空闲
0
0
1
ADC噪声抑制模式
0
1
0
掉电模式
0
1
1
省电模式
1
0
0
保留
1
0
1
保留
1
1
0
Standby
(1)模式
1
1
1
扩展Standby
(1)模式
ISC11~ISC10:
外部中断INT1的中断检测方式
ISC11
ISC10
INT1中断
0
0
低电平中断
0
1
INT1引脚上任意的逻辑电平变化都将引发中断
1
0
下降沿中断
1
1
上升沿中断
ISC01~ISC00:
外部中断INT0的中断检测方式
ISC01
ISC00
INT0中断
0
0
低电平中断
0
1
INT1引脚上任意的逻辑电平变化都将引发中断
1
0
下降沿中断
1
1
上升沿中断
3.通用中断屏蔽寄存器GICR
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
INT1
INT0
INT2
-
-
-
IVSEL
IVCE
INT1:
使能外部中断请求1
INT0:
使能外部中断请求0
INT2:
使能外部中断请求2
4.通用中断标志寄存器GIFR
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
INTF1
INTF0
INTF2
-
-
-
IVSEL
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
bit6
bit5
bit4
bit3
bit2
bit1
bit0
FOC0
WGM00
COM01
COM00
WGM01
CS02
CS01
CS00
FOC0:
强制输出比较位
FOC0仅在WGM00指明非PWM模式时才有效。
但是,为了保证与未来器件的兼容性,在使用PWM时,写TCCR0要对其清零。
对其写1后,波形发生器将立即进行比较操作。
比较匹配输出引脚OC0将按照COM01:
0的设置输出相应的电平。
要注意FOC0类似一个锁存信号,真正对强制输出比较起作用的是COM01:
0的设置。
FOC0不会引发任何中断,也不会在利用OCR0作为TOP的CTC模式下对定时器进行清零的操作。
读FOC0的返回值永远为0。
WGM01WGM01波形产生模式
这几位控制计数器的计数序列,计数器的最大值TOP,以及产生何种波形。
T/C支持的模式有:
普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM模式。
模式
WGM01
WGM00
T/C的工作模式
TOP
OCR0的更新时间
TOV0的置位时刻
0
0
0
普通
0xFF
立即更新
MAX
1
0
1
相位修正PWM
0xFF
TOP
BOTTOM
2
1
0
CTC
OCR0
立即更新
MAX
3
1
1
快速PWM
0xFF
TOP
MAX
COM01COM00比较匹配输出模式(位5和位4—COM:
比较匹配输出模式。
这决定了比较匹配发生时,输出管脚OC0的电平。
当然,管脚首先要配置为输出。
触发电平除了和下表的配置有关外,还和WGM确定的工作模式相关。
)
这些位决定了比较匹配发生时输出引脚OC0的电平。
如果COM01:
0中的一位或全部都置位,OC0以比较匹配输出的方式进行工作。
同时其方向控制位要设置为1以使能输出驱动器。
当OC0连接到物理引脚上时,COM01:
0的功能依赖于WGM01:
0的设置。
下表给出了当WGM01:
0设置为普通模式或CTC模式时COM01:
0的功能。
比较输出模式,非PWM模式
COM01
COM00
说明
0
0
正常的端口操作,不与OC0相连接
0
1
比较匹配发生时OC0取反
1
0
比较匹配发生时OC0清零
1
1
比较匹配发生时OC0置位
比较输出模式,快速PWM模式
COM01
COM00
说明
0
0
正常的端口操作,不与OC0相连接
0
1
保留
1
0
比较匹配发生时OC0A清零,计数到TOP时OC0置位
1
1
比较匹配发生时OC0A置位,计数到TOP时OC0清零
注意:
一个特殊情况是OCR0等于TOP,且COM01置位。
此时比较匹配将被忽略,而计数到TOP时OC0的动作继续有效。
比较输出模式,相位修正PWM模式
COM01
COM00
说明
0
0
正常的端口操作,不与OC0相连接
0
1
保留
1
0
在升序计数时发生比较匹配将清零OC0,降序计数时发生比较匹配将置位OC0
1
1
在升序计数时发生比较匹配将置位OC0,降序计数时发生比较匹配将清零OC0
注意:
一个特殊情况是OCR0等于TOP,且COM01置位。
此时比较匹配将被忽略,而计数到TOP时OC0的动作继续有效。
CS00CS01CS02时钟选择(用于选择定时\计数器0工作的时钟源。
这也是AVR和51的不同之处,51的定时计数器只能用机器周期的12分频来工作,而AVR可以任意设置分频。
)
用于选择T/C的时钟源
CS02
CS01
CS00
说明
0
0
0
无时钟,T/C不工作
0
0
1
clkI/O/1(没有预分频)
0
1
0
clkI/O/8(来自预分频器)
0
1
1
clkI/O/64(来自预分频器)
1
0
0
clkI/O/256(来自预分频器)
1
0
1
clkI/O/1024(来自预分频器)
1
1
0
时钟由T0引脚输入,下降沿触发
1
1
1
时钟由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
bit6
bit5
bit4
bit3
bit2
bit1
bit0
OCF2
TOV2
ICF1
OCF1A
OCF1B
TOV1
OCF0
TOV0
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匹配中断使能
(当该位被设为"1”,且状态寄存器中的I位被设为"1”时,使能T/C1的输出比较B匹配中断使能。
一旦TIFR上的OCF1B置位,CPU即开始执行T/C1输出比较B匹配中断服务程序。
)
OCIE1A:
——输出比较A匹配中断使能
(当该位被设为"1”,且状态寄存器中的I位被设为"1”时,T/C1的输出比较A匹配中断使能。
一旦TIFR上的OCF1A置位,CPU即开始执行T/C1输出比较A匹配中断服务程序。
)
TICIE1:
——T/C1输入捕捉中断使能
(当该位被设为"1”,且状态寄存器中的I位被设为"1”时,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都置位时,中断服务程序得到执行。
)
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匹配成功时,该位被设为"1”。
强制输出比较(FOC1B)不会置位OCF1B。
执行强制输出比较匹配B中断服务程序时OCF1B自动清零。
也可以对其写入逻辑"1”来清除该标志位。
)
OCF1A:
——T/C1输出比较A匹配标志位
(当TCNT1与OCR1A匹配成功时,该位被设为"1”。
强制输出比较(FOC1A)不会置位OCF1A。
执行强制输出比较匹配A中断服务程序时OCF1A自动清零。
也可以对其写入逻辑"1”来清除该标志位。
)
ICF1:
——T/C1输入捕捉标志位
(外部引脚ICP1出现捕捉事件时ICF1置位。
此外,当ICR1作为计数器的TOP值时,一旦计数器值达到TOP,ICF1也置位。
执行输入捕捉中断服务程序时ICF1自动清零。
也可以对其写入逻辑"1”来清除该标志位。
)
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
bit4
bit3
bit2
bit1
bit0
ADTS2
ADTS1
ADTS0
–
ACME
PUD
PSR2
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
bit6
bit5
bit4
bit3
bit2
bit1
bit0
COM1A1
COM1A0
COM1B1
COM1B0
FOC1A
FOC1B
WGM11
WGM10
COM1A1,COM1A0通道A的比较输出模式
COM1B1,COM1B0通道B的比较输出模式
COM1A1,COM1A0与COM1B1,COM1B0分别控制OC1A与OC1B状态。
如果COM1A1:
0(COM1B1:
0)的一位或两位被写入"1”,OC1A(OC1B)输出功能将取代I/O端口功能。
此时OC1A(OC1B)相应的输出引脚数据方向控制必须置位以使能输出驱动器。
OC1A(OC1B)与物理引脚相连时,COM1x1:
0的功能由WGM13:
0的设置决定
比较输出模式,非PWM
COM1A1/COM1B1
COM1A0/COM1B0
说明
0
0
普通端口操作,非OC1A/OC1B功能
0
1
比较匹配时OC1A/OC1B电平取反
1
0
比较匹配时清零OC1A/OC1B(输出低电平)
1
1
比较匹配时置位OC1A/OC1B(输出高电平)
比较输出模式,快速PWM
COM1A1/COM1B1
COM1A0/COM1B0
说明
0
0
普通端口操作,非OC1A/OC1B功能
0
1
WGM13:
0=15:
比较匹配时OC1A取反,OC1B不占用物理引脚。
WGM13:
0为其它值时为普通端口操作,非OC1A/OC1B功能
1
0
比较匹配时清零OC1A/OC1B,OC1A/OC1B在TOP时置位
1
1
比较匹配时置位OC1A/OC1B,OC1A/OC1B在TOP时清零
注意:
当OCR1A/OCR1B等于TOP且COM1A1/COM1B1置位时,比较匹配被忽略,OC1A/OC1B的置位/清零操作有效。
比较输出模式,相位修正及相频修正PWM模式
COM1A1/COM1B1
COM1A0/COM1B0
说明
0
0
普通端口操作,非OC1A/OC1B功能
0
1
WGM13:
0=9或14:
比较匹配时OC1A取反