AVRATmega16中文说明书Word格式文档下载.docx
- 文档编号:21631899
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:41
- 大小:794.63KB
AVRATmega16中文说明书Word格式文档下载.docx
《AVRATmega16中文说明书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《AVRATmega16中文说明书Word格式文档下载.docx(41页珍藏版)》请在冰豆网上搜索。
负数标志
说明算术或逻辑操作结果为负。
•Bit1–Z:
零标志
说明算术或逻辑操作结果为零。
•Bit0–C:
进位标志
说明算术或逻辑操作发生了进位。
详见指令集的说明
利用CLI指令来禁止中断时,中断禁止当即生效。
没有中断能够在执行CLI指令后发生,即便它是在执行CLI指令的同时发生的。
下面的例子说明了如安在写EEPROM时利用那个指令来避免中断发生以幸免对EEPROM内容的可能破坏。
汇编代码例程
inr16,SREG;
保留SREG
cli;
禁止中断
sbiEECR,EEMWE;
启动EEPROM写操作
sbiEECR,EEWE
outSREG,r16;
恢复SREG(I位)
C代码例程
charcSREG;
cSREG=SREG;
/*保留SREG*/
/*禁止中断*/
_CLI();
EECR|=(1<
<
EEMWE);
/*启动EEPROM写操作*/
EEWE);
SREG=cSREG;
/*恢复SREG(I位)*/
利用SEI指令使能中断时,紧跟其后的第一条指令在执行任何中断之前必然会第一取得执行。
sei;
置位全局中断使能标志
sleep;
进入休眠模式,等待中断发生
;
注意:
在执行任何被挂起的中断之前MCU将第一进入休眠模式
_SEI();
/*置位全局中断使能标志*/
_SLEEP();
/*进入休眠模式,等待中断发生*/
/*注意:
在执行任何被挂起的中断之前MCU将第一进入休眠模式*/
X、Y、Z寄放器寄放器R26-R31除用作通用寄放器外,还能够作为数据间接寻址用的地址指针。
这三个间接寻址寄放器示于Figure5。
堆栈指针
堆栈指针要紧用来保留临时数据、局部变量和中断/子程序的返回地址。
堆栈指针老是指向堆栈的顶部。
要注意AVR的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。
若是在挪用或中断后读程序计数器,未用位(15:
13)应屏蔽。
堆栈指针指向数据SRAM堆栈区。
在此聚集了子程序堆栈和中断堆栈。
挪用子程序和使能中断之前必需概念堆栈空间,且堆栈指针必需指向高于0x60的地址空间。
利用PUSH
指令将数据推入堆栈时指针减一;
而子程序或中断返回地址推入堆栈时指针将减二。
使
用POP指令将数据弹出堆栈时,堆栈指针加一;
而用RET或RETI指令从子程序或中断
返回时堆栈指针加二。
AVR的堆栈指针由I/O空间中的两个8位寄放器实现。
实际利用的位数与具体器件有关。
请注意某些AVR器件的数据区过小,用SPL就足够了。
现在将不给出SPH寄放器。
EEPROM地址寄放器-EEARH和EEARL
•Bits15..9–Res:
保留
保留位,读操作返回值为零。
•Bits8..0–EEAR8..0:
EEPROM地址
EEPROM地址寄放器–EEARH和EEARL指定了512字节的EEPROM空间。
EEPROM地址是线性的,从0到511。
EEAR的初始值没有概念。
在访问EEPROM之前必需为其给予正确的数据。
EEPROM数据寄放器-EEDR
•Bits7..0–:
EEPROM数据
关于EEPROM写操作,EEDR是需要写到EEAR单元的数据;
关于读操作,EEDR是从地址EEAR读取的数据。
EEPROM操纵寄放器-EECR
•Bits7..4–Res:
保留位,读操作返回值为零。
•Bit3–EERIE:
使能EEPROM预备好中断
假设SREG的I为"
1"
,那么置位EERIE将使能EEPROM预备好中断。
清零EERIE那么禁止其中断。
当EEWE清零时EEPROM预备好中断即可发生。
•Bit2–EEMWE:
EEPROM主机写使能
EEMWE决定了EEWE置位是不是能够启动EEPROM写操作。
当EEMWE为"
时,在4个时钟周期内置位EEWE将把数据写入EEPROM的指定地址;
假设EEMWE为"
0“,那么操作EEWE不起作用。
EEMWE置位后4个周期,硬件对其清零。
见EEPROM写进程中对EEWE位的描述。
•Bit1–EEWE:
EEPROM写使能
EEWE为EEPROM写操作的使能信号。
当EEPROM数据和地址设置好以后,需置位EEWE以便将数据写入EEPROM。
现在EEMWE必需置位,不然EEPROM写操作将可不能发生。
写时序如下(第3步和第4步的顺序并非重要):
1.等待EEWE位变成零
2.等待SPMCSR中的SPMEN位变成零
3.将新的EEPROM地址写入EEAR(可选)
4.将新的EEPROM数据写入EEDR(可选)
5.对EECR寄放器的EEMWE写"
,同时清零EEWE
6.在置位EEMWE的4个周期内,置位EEWE
在CPU写Flash存储器的时候不能对EEPROM进行编程。
在启动EEPROM写操作之前软件必需检查Flash写操作是不是已经完成。
步骤
(2)仅在软件包括引导程序并许诺CPU对Flash进行编程时才有效。
若是CPU永久都可不能写Flash,步骤
(2)可省略。
请参见P234“支持引导装入程序–在写的同时能够读(RWW,Read-While-Write)的自我编程能力”。
注意:
若是在步骤5和6之间发生了中断,写操作将失败。
因为现在EEPROM写使能操作将超时。
若是一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR或EEDR寄放器可能被修改,引发EEPROM操作失败。
建议现在关闭全局中断标志I。
通过写访问时刻以后,EEWE硬件清零。
用户能够凭借这一名判定写时序是不是已经完成。
EEWE置位后,CPU要停止两个时钟周期才会运行下一条指令。
•Bit0–EERE:
EEPROM读使能
EERE为EEPROM读操作的使能信号。
当EEPROM地址设置好以后,需置位EERE以便将数据读入EEAR。
EEPROM数据的读取只需要一条指令,且无需等待。
读取EEPROM后CPU要停止4个时钟周期才能够执行下一条指令。
用户在读取EEPROM时应该检测EEWE。
若是一个写操作正在进行,就无法读取EEPROM,也无法改变寄放器EEAR。
通过校准的片内振荡器用于EEPROM按时。
Table1为CPU访问EEPROM的典型时刻。
下面的代码别离用汇编和C函数说明如何实现EEPROM的写操作。
在此假设中断可不能在执行这些函数的进程当中发生。
同时还假设软件没有BootLoader。
假设BootLoader存在,那么EEPROM写函数还需要等待正在运行的SPM命令的终止。
EEPROM_write:
等待上一次写操作终止
sbicEECR,EEWE
rjmpEEPROM_write;
设置地址寄放器(r18:
r17)
outEEARH,r18
outEEARL,r17;
将数据写入数据寄放器(r16)
outEEDR,r16;
置位EEMWE
sbiEECR,EEMWE;
置位EEWE以启动写操作
sbiEECR,EEWE
ret
voidEEPROM_write(unsignedintuiAddress,unsignedcharucData)
{
/*等待上一次写操作终止*/
while(EECR&
(1<
EEWE));
/*设置地址和数据寄放器*/
EEAR=uiAddress;
EEDR=ucData;
/*置位EEMWE*/
/*置位EEWE以启动写操作*/
}
下面的例子说明如何用汇编和C函数来读取EEPROM,在此假设中断可不能在执行这些函数的进程当中发生。
EEPROM_read:
rjmpEEPROM_read;
设置EERE以启动读操作
sbiEECR,EERE;
自数据寄放器读取数据
inr16,EEDR
unsignedcharEEPROM_read(unsignedintuiAddress)
{/*等待上一次写操作终止*/
/*设置地址寄放器*/
/*设置EERE以启动读操作*/
EERE);
/*自数据寄放器返回数据*/
returnEEDR;
电源治理及睡眠模式
睡眠模式能够使应用程序关闭MCU中没有利用的模块,从而降低功耗。
AVR具有不同的睡眠模式,许诺用户依照自己的应用要求实施剪裁。
进入眠眠模式的条件是置位寄放器MCUCR的SE,然后执行SLEEP指令。
具体哪一种模式(空闲模式、ADC噪声抑制模式、掉电模式、省电模式、Standby模式和扩展Standby模式)由MCUCR的SM二、SM1和SM0决定,如Table13所示。
使能的中断能够将进入眠眠模式的MCU唤醒。
通过启动时刻,外加4个时钟周期后,MCU就能够够运行中断例程了。
然后返回到SLEEP的下一条指令。
唤醒时可不能改变寄放器文件和SRAM的内容。
若是在睡眠进程中发生了复位,那么MCU唤醒后从中断向量开始执行。
P22Figure11介绍了ATmega16不同的时钟系统及其散布。
此图在选择适合的睡眠模式时超级有效。
MCU操纵寄放器-MCUCRMCU操纵寄放器包括了电源治理的操纵位。
•Bits7,5,4–SM2..0:
休眠模式选择位2、1和0
如Table13所示,这些位用于选择具体的休眠模式。
•Bit6–SE:
休眠使能
为了使MCU在执行SLEEP指令后进入休眠模式,SE必需置位。
为了确保进入休眠模
式是程序员的成心行为,建议仅在SLEEP指令的前一条指令置位SE。
MCU一旦唤醒立
即清除SE。
空闲模式当
SM2..0为000时,SLEEP指令将使MCU进入空闲模式。
在此模式下,CPU停止运行,而LCD操纵器、SPI、USART、模拟比较器、ADC、USI、按时器/计数器、看门狗和中断系统继续工作。
那个休眠模式只停止了clkCPU和clkFLASH,其他时钟那么继续工作。
象按时器溢出与USART传输完成等内外部中断都能够唤醒MCU。
若是不需要从模拟比较器中断唤醒MCU,为了减少功耗,能够切断比较器的电源。
方式是置位模拟比较器操纵和状态寄放器ACSR的ACD。
若是ADC使能,进入此模式后将自动启动一次转换。
ADC噪声抑制模式
当SM2..0为001时,SLEEP指令将使MCU进入噪声抑制模式。
在此模式下,CPU停止运行,而ADC、外部中断、两线接口地址配置、按时器/计数器0和看门狗继续工作。
那个睡眠模式只停止了clkI/O、clkCPU和clkFLASH,其他时钟那么继续工作。
此模式提高了ADC的噪声环境,使得转换精度更高。
ADC使能的时候,进入此模式将自动启动一次AD转换。
ADC转换终止中断、外部复位、看门狗复位、BOD复位、两线接口地址匹配中断、按时器/计数器2中断、SPM/EEPROM预备好中断、外部中断INT0或INT1,或外部中断INT2能够将MCU从ADC噪声抑制模式唤醒。
掉电模式
当SM2..0为010时,SLEEP指令将使MCU进入掉电模式。
在此模式下,外部晶体停振,而外部中断、两线接口地址匹配及看门狗(若是使能的话)继续工作。
只有外部复位、看门狗复位、BOD复位、两线接口地址匹配中断、外部电平中断INT0或INT1,或外部中断INT2能够使MCU离开掉电模式。
那个睡眠模式停止了所有的时钟,只有异步模块能够继续工作。
当利用外部电平中断方式将MCU从掉电模式唤醒时,必需维持外部电平必然的时刻。
具
体请参见P65“外部中断”。
从施加掉电唤醒条件到真正唤醒有一个延迟时刻,现在刻用于时钟从头启动并稳固下来。
唤醒周期与由熔丝位CKSEL概念的复位周期是一样的,如P23“时钟源”所示。
省电模式
当SM2..0为011时,SLEEP指令将使MCU进入省电模式。
这一模式与掉电模式只有
一点不同:
若是按时器/计数器2为异步驱动,即寄放器ASSR的AS2置位,那么按时器/计数器2在睡眠时继续运行。
除掉电模式的唤醒方式,按时器/计数器2的溢出中断和比较匹配中断也能够将MCU从休眠方式唤醒,只要TIMSK使能了这些中断,而且SREG的全局中
断使能位I置位。
若是异步按时器不是异步驱动的,建议利用掉电模式,而不是省电模式。
因为在省电模式下,假设AS2为0,那么MCU唤醒后异步按时器的寄放器数值是没有概念的。
那个睡眠模式停止了除clkASY之外所有的时钟,只有异步模块能够继续工作。
Standby模式
当SM2..0为110时,SLEEP指令将使MCU进入Standby模式。
这一模式与掉电模式唯一的不同的地方在于振荡器继续工作。
其唤醒时刻只需要6个时钟周期。
扩展Standby模式
当SM2..0为111时,SLEEP指令将使MCU进入扩展的Standby模式。
这一模式与省掉电模式唯一的不同的地方在于振荡器继续工作。
MCU操纵和状态寄放器-MCUCSR
MCU操纵和状态寄放器提供了有关引发MCU复位的复位源的信息。
•Bit4–JTRF:
JTAG复位标志
通过JTAG指令AVR_RESET能够使JTAG复位寄放器置位,并引发MCU复位,并使
JTRF置位。
上电复位将使其清零,也能够通过写”0”来清除。
•Bit3–WDRF:
看门狗复位标志
看门狗复位发生时置位。
•Bit2–BORF:
掉电检测复位标志
掉电检测复位发生时置位。
•Bit1–EXTRF:
外部复位标志
外部复位发生时置位。
•Bit0–PORF:
上电复位标志
上电复位发生时置位。
只能通过写”0”来清除。
为了利用这些复位标志来识别复位条件,用户应该及早读取此寄放器的数据,然后将其复位。
若是在其他复位发生之前将此寄放器复位,那么后续复位源能够通过检查复位标志来了
解。
看门狗按时器操纵寄放器-WDTCR
•Bits7..5–Res:
保留位
ATmega16保留位,读操作返回值为零。
•Bit4–WDTOE:
看门狗修改使能
清零WDE时必需置位WDTOE,不然不能禁止看门狗。
一旦置位,硬件将在紧接的4个时钟周期以后将其清零。
请参考有关WDE的说明来禁止看门狗。
•Bit3–WDE:
使能看门狗
WDE为"
1“时,看门狗使能,不然看门狗将被禁止。
只有在WDTOE为"
1“时WDE才能清零。
以下为关闭看门狗的步骤:
1.在同一个指令内对WDTOE和WDE写"
1“,即便WDE已经为"
1“
2.在紧接的4个时钟周期之内对WDE写"
0”
•Bits2..0–WDP2,WDP1,WDP0:
看门狗按时器预分频器2,1和0
WDP二、WDP1和WDP0决定看门狗按时器的预分频器,如Table17所示.
下面的例子别离用汇编和C语言实现了关闭WDT的操作。
在此假定中断处于用户操纵之
下(比如禁止全局中断),因此在执行下面程序时中断可不能发生。
WDT_off:
WDT复位
WDR;
置位WDTOE和WDE
inr16,WDTCR
orir16,(1<
WDTOE)|(1<
WDE)
outWDTCR,r16;
关闭WDT
ldir16,(0<
outWDTCR,r16
voidWDT_off(void)
{/*WDT复位*/
_WDR();
/*置位WDTOE和WDE*/
WDTCR|=(1<
WDTOE)|(1<
WDE);
/*关闭WDT*/
WDTCR=0x00;
通用中断操纵寄放器-GICR
•Bit1–IVSEL:
中断向量选择
当IVSEL为"
0“时,中断向量位于Flash存储器的起始地址;
1“时,中断向
量转移到Boot区的起始地址。
实际的Boot区起始地址由熔丝位BOOTSZ确信。
具体请参考P234“支持引导装入程序–在写的同时能够读(RWW,Read-While-Write)的自我编程能力”。
为了避免无心识地改变中断向量表,修改IVSEL时需要遵循如下进程:
1.置位中断向量修改使能位IVCE
2.在紧接的4个时钟周期里将需要的数据写入IVSEL,同时对IVCE写”0”
执行上述序列时中断自动被禁止。
其实,在置位IVCE时中断就被禁止了,并一直维持到写IVSEL操作以后的下一条语句。
若是没有IVSEL写操作,那么中断在置位IVCE以后的4个时钟周期维持禁止。
需要注意的是,尽管中断被自动禁止,但状态寄放器的位I的值并非受此操作的阻碍。
Note:
假设中断向量位于Boot区,且Boot锁定位BLB02被编程,那么执行应用区的程序时中断被禁止;
假设中断向量位于应用区,且Boot锁定位BLB12被编程,那么执行Boot区的程序时中断被禁止。
有关Boot锁定位的细节请参见P234“支持引导装入程序–在写的同时能够读
(RWW,Read-While-Write)的自我编程能力”。
•Bit0–IVCE:
中断向量修改使能
改变IVSEL时IVCE必需置位。
在IVCE或IVSEL写操作以后4个时钟周期,IVCE被硬件清零。
如前面所述,置位IVCE将禁止中断。
代码如下:
汇编代码例程:
Move_interrupts:
;
使能中断向量的修改
ldir16,(1<
IVCE)
outGICR,r16;
将中断向量转移到boot区
IVSEL)
outGICR,r16
voidMove_interrupts(void)
{/*使能中断向量的修改*/
GICR=(1<
IVCE);
/*将中断向量转移到boot区*/
IVSEL);
ATmega16的引脚
每一个端口都有三个I/O存储器地址:
数据寄放器–PORTx、数据方向寄放器–DDRx和端
口输入引脚–PINx。
数据寄放器和数据方向寄放器为读/写寄放器,而端口输入引脚为只读寄放器。
可是需要专门注意的是,对PINx寄放器某一名写入逻辑"
1“将造成数据寄放器相应位的数据发生"
0“与““的交替转变。
当寄放器MCUCR的上拉禁止位PUD置位时所有端口引脚的上拉电阻都被禁止。
配置引脚
每一个端口引脚都具有三个寄放器位:
DDxn、PORTxn和PINxn,如P63“/O端口寄放器
的说明”所示。
DDxn位于DDRx寄放器,PORTxn位于PORTx寄放器,PINxn位于
PINx寄放器。
DDxn用来选择引脚的方向。
DDxn为"
1“时,Pxn配置为输出,不然配置为输入。
引脚配置为输入时,假设PORTxn为"
1“,上拉电阻将使能。
若是需要关闭那个上拉电阻,能够将PORTxn清零,或将那个引脚配置为输出。
复位时各引脚为高阻态,即便现在并无时钟在运行。
引脚配置为输出时,假设PORTxn为"
1“,输出高电平
(1),不然低电平(0)。
在(高阻态)三态({DDxn,PORTxn}=0b00)输出高电平({DDxn,PORTxn}=0b11)两种状态之间进行切换时,上拉电阻使能({DDxn,PORTxn}=0b01)或输出低电平({DDxn,PORTxn}=0b10)这两种模式必然会有一个发生。
通常,上拉电阻使能是完全能够同意的,因为高阻环境不在意是强高电平输出仍是上拉输出。
若是利用情形不是如此子,能够通过置位SFIOR寄放器的PUD来禁止所有端口的上拉电阻。
在上拉输入和输出低电平之间切换也有一样的问题。
用户必需选择高阻态({DDxn,PORTxn}=0b00)或输出高电平({DDxn,PORTxn}=0b10)作为中间步骤。
Table20总结了引脚的操纵信号。
不论如何配置DDxn,都能够通过读取PINxn寄放器来取得引脚电平。
下面的例子演示了如何置位端口B的引脚0和1,清零引脚2和3,和将引脚4到7设置为输入,而且为引脚6和7设置上拉电阻。
然
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVRATmega16 中文说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)