datasheet

ATmega 16单片机的寄存器

2016-10-09来源: eefocus关键字:ATmega  16单片机  寄存器

ATmega 16单片机的EEPROM存储器的相关寄存器(三)

 
 
 

EEPROM存储器的相关寄存器

1.EEARH、EEARL——EEPROM地址寄存器

2.EEDR——EEPROM数据寄存器

3.EECR——EEPROM控制寄存器

—— —— —— —— EERIE EEMWE EEWE EERE

位 7..4——Res:保留
保留位,读操作返回值为零。
位 3——EERIE:EEPROM中断准备好使能
若SREG的I为"1",则置位EERIE将使能EEPROM准备好中断。清零EERIE则禁止此中断。当I=EERIE=1且EEWE清零时,则单片机产生一个中断表示写操作完成。
位2——EEMWE:EEPROM主机写使能
EEMWE决定了EEWE置位是否可以启动EEPROM写操作。当EEMWE为"1"时,在4个时钟周期内置位EEWE将把数据写入EEPROM的指定地址。若EEMWE为"0“,则操作EEWE不起作用。EEMWE置位后4个周期,硬件对其清零。

位 1——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写"1",同时清零EEWE
(6).在置位EEMWE的4个周期内,置位EEWE

注意:在EEMWE置位后的2.5-4ms后,EEEWE被硬件清零,用户可以通过查询此位判断写操作是否完成。如果在步骤5和6之间发生了中断,写操作将失败。因为此时EEPROM写使能操作将超时。如果一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR或EEDR寄存器可能被修改,引起EEPROM操作失败。建议此时关闭全局中断标志I。

 

 

ATmega 16 单片机的模拟比较器的相关寄存器(四)
 
 
 

1.SFIOR——特殊功能IO寄存器

ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10

位3——ACME:模拟比较器多路复用器使能
当此位为逻辑"1”,且ADC处于关闭状态(ADCSRA寄存器的ADEN为"0”)时,ADC多路复用器为模拟比较器选择负极输入。当此位为"0”时,AIN1连接到比较器的负极输入端。
2.ACSR——模拟比较器控制和状态寄存器

ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0

位7——ACD:模拟比较器禁用
ACD置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。这可以减少器件工作模式及空闲模式下的功耗。改变ACD位时,必须清零ACSR寄存器的ACIE位来禁止模拟比较器中断。否则ACD改变时可能会产生中断。
位6——ACBG:选择模拟比较器的能隙基准源
ACBG置位后,模拟比较器的正极输入由能隙基准源所取代。否则,AIN0连接到模拟比
较器的正极输入。能隙基准电压在1.15-1.35V之间,典型值为1.23V。

位 5——ACO:模拟比较器输出
模拟比较器的输出经过同步后直接连到ACO。同步机制引入了1-2个时钟周期的延时。
位4——ACI:模拟比较器中断标志
当比较器的输出事件触发了由ACIS1及ACIS0定义的中断模式时,ACI置位。如果ACIE和SREG寄存器的全局中断标志I也置位,那么模拟比较器中断服务程序即得以执行,同时ACI被硬件清零。ACI也可以通过写"1”来清零。
位 3——ACIE:模拟比较器中断使能
当ACIE位被置"1”且状态寄存器中的全局中断标志I也被置位时,模拟比较器中断被激活。否则中断被禁止。
位 2——ACIC:模拟比较器输入捕捉使能
ACIC置位后允许通过模拟比较器来触发T/C1的输入捕捉功能。此时比较器的输出被直接连接到输入捕捉的前端逻辑,从而使得比较器可以利用T/C1输入捕捉中断逻辑的噪声抑制器及触发沿选择功能。ACIC为"0”时模拟比较器及输入捕捉功能之间没有任何联系。为了使比较器可以触发T/C1的输入捕捉中断,定时器中断屏蔽寄存器TIMSK的TICIE1必须置位。
位 1:0–ACIS[1:0]:模拟比较器中断模式选择
这两位确定触发模拟比较器中断的事件。需要改变设置时,必须清零ACSR寄存器中的中断使能位ACIE以禁止中断,避免修改设置时产生不必要的中断。

ACIS1 ACIS0 中断模式
0 0 比较器输出变化即可触发中断
0 1 保留
1 0 比较器输出的下降沿产生中断
1 1 比较器输出的上升沿产生中断

 

 

 

 

ATmega 16 单片机的A/D转换器的相关寄存器(五)
 
 
 

1.ADMUX——ADC多工选择寄存器

REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0

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

REFS1 REFS0 参考电压选择
0 0 AREF,内部Vref关闭
0 1 AVCC,AREF引脚外加滤波电容
1 0 保留
1 1 2.56V的片内基准电压源,AREF引脚外加滤波电容

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

位4:0–MUX[4:0]:模拟通道与增益选择位
通过这几位的设置,可以对连接到ADC的模拟输入进行选择。也可对差分通道增益进行选择。如果在转换过程中改变这几位的值,那么只有到转换结束(ADCSRA寄存器的ADIF置位)后新的设置才有效。
MUX[4..0] 单端输入 正差分输入 负差分输入 增益
00000 ADC0
00001 ADC1
00010 ADC2
00011 ADC3 N/A
00100 ADC4
00101 ADC5
00110 ADC6
00111 ADC7
01000 ADC0 ADC0 10x
01001 ADC1 ADC0 10x
01010 ADC0 ADC0 200x
01011 ADC1 ADC0 200x
01100 ADC2 ADC2 10x
01101 ADC3 ADC2 10x
01110 ADC2 ADC2 200x
01111 ADC3 ADC2 200x
10000 ADC0 ADC1 1x
10001 ADC1 ADC1 1x
10010 N/A ADC2 ADC1 1x
10011 ADC3 ADC1 1x
10100 ADC4 ADC1 1x
10101 ADC5 ADC1 1x
10110 ADC6 ADC1 1x
10111 ADC7 ADC1 1x
11000 ADC0 ADC2 1x
11001 ADC1 ADC2 1x
11010 ADC2 ADC2 1x
11011 ADC3 ADC2 1x
11100 ADC4 ADC2 1x
11101 ADC5 ADC2 1x
11110 1.22 V(V) N/A
11111 0 V(GND)

2.ADCSRA——ADC控制和状态寄存器A

ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0

位7——ADEN:ADC使能
ADEN置位即启动ADC,否则ADC功能关闭。在转换过程中关闭ADC将立即中止正在进行的转换。
位 6——ADSC:ADC开始转换
在单次转换模式下,ADSC置位将启动一次ADC转换。在连续转换模式下,ADSC置位将启动首次转换。第一次转换(在ADC启动之后置位ADSC,或者在使能ADC的同时置位ADSC)需要25个ADC时钟周期,而不是正常情况下的13个。第一次转换执行ADC初始化的工作。在转换进行过程中读取ADSC的返回值为"1”,直到转换结束。ADSC清零不产生任何动作。
位5——ADATE:ADC自动触发使能
ADATE置位将启动ADC自动触发功能。触发信号的上跳沿启动ADC转换。触发信号源通过SFIOR寄存器的ADC触发信号源选择位ADTS设置。
位4——ADIF:ADC中断标志
在ADC转换结束,且数据寄存器被更新后,ADIF置位。如果ADIE及SREG中的全局中断使能位I也置位,ADC转换结束中断服务程序即得以执行,同时ADIF硬件清零。此外,还可以通过向此标志写1来清ADIF。要注意的是,如果对ADCSRA进行读-修改-写操作,那么待处理的中断会被禁止。这也适用于SBI及CBI指令。
位 3——ADIE:ADC中断使能
若ADIE及SREG的位I置位,ADC转换结束中断即被使能。
位 2:0——ADPS[2:0]:ADC预分频器选择位
由这3位来确定XTAL与ADC输入时钟与CPU时钟之间的分频因子。

ADPS2 ADPS1 ADPS0 分频因子
0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128

3.ADCL、ADCH——ADC数据寄存器

4.SFIOR——特殊功能IO寄存器

ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10

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

ADTS2 ADTS1 ADTS0 触发源
0 0 0 连续转换模式
0 0 1 模拟比较器
0 1 0 外部中断请求0
0 1 1 定时器/计数器0比较匹配
1 0 0 定时器/计数器0溢出
1 0 1 定时器/计数器比较匹配B
1 1 0 定时器/计数器1溢出
1 1 1 定时器/计数器1捕捉事件

 

 

 

 

ATmega 16 单片机的TWI接口的相关寄存器(六)
 
 
 

1.TWBR——TWI比特率寄存器

TWBR为比特率发生器分频因子。比特率发生器是一个分频器,在主机模式下产生SCL时钟频率。当TWI工作于从机模式时,不需要设定比特率寄存器或预分频系数,但从机的CPU频率必须大于TWI时钟线SCL频率的16倍。

f

f=—————————————

16+2*TWBR*4(TWPS)

注意:为了保持伟输的稳定,TWI工作在主机模式时TWBR的值不小于10。

2.TWCR——TWI控制寄存器

TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE

TWCR用来控制TWI操作。它用来使能TWI,通过施加START到总线上来启动主机访问,产生接收器应答,产生STOP状态,以及在写入数据到TWDR寄存器时控制总线的暂停等。这个寄存器还可以给出在TWDR无法访问期间,试图将数据写入到TWDR而引起的写入冲突信息。

位 7——TWINT:TWI中断标志
当TWI完成当前工作,希望应用程序介入时TWINT置位。若SREG的I标志以及TWCR寄存器的TWIE标志也置位,则MCU执行TWI中断例程。当TWINT置位时,SCL信号的低电平被延长。TWINT标志的清零必须通过软件写"1”来完成。执行中断时硬件不会自动将其改写为"0”。要注意的是,只要这一位被清零,TWI立即开始工作。因此,在清零TWINT之前一定要首先完成对地址寄存器TWAR,状态寄存器TWSR,以及数据寄存器TWDR的访问。
位 6——TWEA:使能TWI应答
TWEA标志控制应答脉冲的产生。若TWEA置位,出现如下条件时接口发出ACK脉冲:
(1).器件的从机地址与主机发出的地址相符合
(2).TWAR的TWGCE置位时接收到广播呼叫
(3).在主机/从机接收模式下接收到一个字节的数据
(4).将TWEA清零可以使器件暂时脱离总线。置位后器件重新恢复地址识别。
位 5——TWSTA:TWI START状态标志
当CPU希望自己成为总线上的主机时需要置位TWSTA。TWI硬件检测总线是否可用。若总线空闲,接口就在总线上产生START状态。若总线忙,接口就一直等待,直到检测到一个STOP状态,然后产生START以声明自己希望成为主机。发送START之后软件必须清零TWSTA。
位 4——TWSTO:TWI STOP状态标志
在主机模式下,如果置位TWSTO,TWI接口将在总线上产生STOP状态,然后TWSTO自动清零。在从机模式下,置位TWSTO可以使接口从错误状态恢复到未被寻址的状态。此时总线上不会有STOP状态产生,但TWI返回一个定义好的未被寻址的从机模式且释放SCL与SDA为高阻态。

位 3——TWWC:TWI写碰撞标志
当TWINT为低时写数据寄存器TWDR将置位TWWC。当TWINT为高时,每一次对TWDR的写访问都将更新此标志。
位 2——TWEN:TWI使能
TWEN位用于使能TWI操作与激活TWI接口。当TWEN位被写为"1”时,TWI引脚将I/O引脚切换到SCL与SDA引脚,使能波形斜率限制器与尖峰滤波器。如果该位清零,TWI接口模块将被关闭,所有TWI传输将被终止。
位1——Res:保留
保留,读返回值为”0”。
位 0——TWIE:使能TWI中断
当SREG的I以及TWIE置位时,只要TWINT为"1”,TWI中断就激活。
3.TWSR——TWI状态寄存器

位 [7..3]——TWS:TWI状态
这5位用来反映TWI逻辑和总线的状态。不同的状态代码将会在后面的部分描述。注意从TWSR读出的值包括5位状态值与2位预分频值。检测状态位时设计者应屏蔽预分频位为"0”。这使状态检测独立于预分频器设置。

位 2——Res:保留
保留,读返回值为"0”。
位[ 1..0]——TWPS:TWI预分频位
这两位可读/写,用于控制比特率预分频因子。

TWPS1 TWPS0 预分频器值
0 0 1
0 1 4
1 0 16
1 1 64
4.TWDR——TWI数据寄存器

位 [7..0[——TWD:TWI数据寄存器
根据状态的不同,其内容为要发送的下一个字节,或是接收到的数据。

5.TWAR——TWI地址寄存器

位[7..1]——TWA:TWI从机地址寄存器
其值为从机地址。
位0——TWGCE:使能TWI广播识别
置位后MCU可以识别TWI总线广播。

 

 

 

 ATmega 16 单片机的WDT定时器的相关寄存器(七)

 

1.WDTCR——看门狗定时器控制寄存器

– – – WDTOE WDE WDP2 WDP1 WDP0

位[7..5]——Res:保留位
ATmega16保留位,读操作返回值为零。
位 4——WDTOE:看门狗修改使能
清零WDE时必须置位WDTOE,否则不能禁止看门狗。一旦置位,硬件将在紧接的4个时钟周期之后将其清零。

位 3——WDE:使能看门狗
WDE为"1“时,看门狗使能,否则看门狗将被禁止。只有在WDTOE为"1“时WDE才能清零。以下为关闭看门狗的步骤:
(1).在同一个指令内对WDTOE和WDE写"1“,即使WDE已经为"1“
(2).在紧接的4个时钟周期之内对WDE写"0”
位 [2..0]——WDP2,WDP1,WDP0::看门狗定时器预分频器2,1和0
WDP2、WDP1和WDP0决定看门狗定时器的预分频系数。

WDP2 WDP1 WDP0 看门狗振荡器周期 VCC=3.0V时典型的溢出周期 VCC=5.0V时典型的溢出周期
0 0 0 16K(16,384) 17.1 ms 16.3 ms
0 0 1 32K(32,768) 34.3 ms 32.5 ms
0 1 0 64K(65,536) 68.5 ms 65 ms
0 1 1 128K(131,072) 0.14 s 0.13 s
1 0 0 256K(262,144) 0.27 s 0.26 s
1 0 1 512K(524,288) 0.55 s 0.52 s
1 1 0 1,024K(1,048,576) 1.1 s 1.0 s
1 1 1 2,048K(2,097,152) 2.2 s 2.1 s

 

 

 

 

ATmega 16 单片机的中断系统的相关寄存器(八)
 
 
 

复位和中断向量
向量号 程序地址 中断源 中断定义
1 0x000 RESET 外部引脚电平引发的,上电的,掉电检测的,看门狗,及JTAG AVR复位
2 0x002 INT0 外部中断请求0中断
3 0x004 INT1 外部中断请求1中断
4 0x006 TIMER2 COMP定时器/计数器2比较匹配中断
5 0x008 TIMER2 OVF定时器/计数器2溢出中断
6 0x00A TIMER1 CAPT定时器/计数器1事件捕捉中断
7 0x00C TIMER1 COMPA定时器/计数器1比较匹配A中断
8 0x00E TIMER1 COMPB定时器/计数器1比较匹配B中断
9 0x010 TIMER1 OVF定时器/计数器1溢出中断
10 0x012 TIMER0 OVF定时器/计数器0溢出中断
11 0x014 SPI_STC SPI串行传输结束中断
12 0x016 USART_RXC USART接收结束中断
13 0x018 USART_UDRE USART数据寄存器空
14 0x01A USART_TXC USART发送结束中断
15 0x01C ADC ADC转换结束中断
16 0x01E EE_RDY EEPROM就绪中断
17 0x020 ANA_COMP 模拟比较器中断
18 0x022 TWI 两线串行接口中断
19 0x024 INT2 外部中断请求2中断
20 0x026 TIMER0_COMP 定时器/计数器0比较匹配中断
21 $028 SPM_RDY 保存程序存储器内容就绪

复位和中断向量位置的确定
BOOTRST IVSEL 复位地址 中断向量起始地址
1 0 0x0000 0x0002
1 1 0x0000 Boot区复位地址+0x0002
0 0 Boot Reset Address 0x0002
0 1 Boot Reset Address Boot区复位地址+0x0002

1.MCUCR——MCU控制寄存器

SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00

位3,2——ISC11,ISC10:中断触发方式控制1 位1与位0
外部中断1由引脚INT1激发,如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话。在检测边沿前MCU首先采样INT1引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。

ISC11 ISC10 说明
0 0 INT1为低电平时产生中断请求
0 1 INT1引脚上任意的逻辑电平变化都将引发中断
1 0 INT1的下降沿产生异步中断请求
1 1 INT1的上升沿产生异步中断请求

位1,0–ISC01,ISC00:中断0触发方式控制位 1与位0
外部中断0由引脚INT0激发,如果SREG寄存器的I标志位和相应的中断屏蔽位置位的话。在检测边沿前MCU首先采样INT0引脚上的电平。如果选择了边沿触发方式或电平变化触发方式,那么持续时间大于一个时钟周期的脉冲将触发中断,过短的脉冲则不能保证触发中断。如果选择低电平触发方式,那么低电平必须保持到当前指令执行完成。

ISC01 ISC00 说明
0 0 INT0为低电平时产生中断请求
0 1 INT0引脚上任意的逻辑电平变化都将引发中断
1 0 INT0的下降沿产生异步中断请求
1 1 INT0的上升沿产生异步中断请求

2.MCUCSR——MCU控制与状态寄存器

JTD ISC2 – JTRF WDRF BORF EXTRF PORF

位6——ISC2:中断2触发方式控制
异步外中断2由外部引脚INT2激活,如果SREG寄存器的I标志和GICR寄存器相应的中断屏蔽位置位的话。若ISC2写0,INT2的下降沿激活中断。若ISC2写1,INT2的上升沿激活中断。INT2的边沿触发方式是异步的。只要INT2引脚上产生宽度大于Table 36所示数据的脉冲就会引发中断。若选择了低电平中断,低电平必须保持到当前指令完成,
然后才会产生中断。而且只要将引脚拉低,就会引发中断请求。改变ISC2时有可能发生中断。因此建议首先在寄存器GICR里清除相应的中断使能位INT2,然后再改变ISC2。最后,不要忘记在重新使能中断之前通过对GIFR寄存器的相应中断标志位INTF2写'1’其清零。

3.GICR——通用中断控制寄存器

INT1 INT0 INT2 – – – IVSEL IVCE

位7——INT1:使能外部中断请求1
当INT1为'1’,而且状态寄存器SREG的I标志置位,相应的外部引脚中断就使能了。MCU通用控制寄存器–MCUCR的中断敏感电平控制1位1/0(ISC11与ISC10)决定中断是由上升沿、下降沿,还是INT1电平触发的。只要使能,即使INT1引脚被配置为输出,只要引脚电平发生了相应的变化,中断将产生。
位6——INT0:使能外部中断请求0
当INT0为'1’,而且状态寄存器SREG的I标志置位,相应的外部引脚中断就使能了。MCU通用控制寄存器–MCUCR的中断敏感电平控制0位1/0(ISC01与ISC00)决定中断是由上升沿、下降沿,还是INT0电平触发的。只要使能,即使INT0引脚被配置为输出,只要引脚电平发生了相应的变化,中断将产生。

位 5——INT2:使能外部中断请求2
当INT2为'1’,而且状态寄存器SREG的I标志置位,相应的外部引脚中断就使能了。MCU通用控制寄存器–MCUCR的中断敏感电平控制2位1/0(ISC2与ISC2)决定中断是由上升沿、下降沿,还是INT2电平触发的。只要使能,即使INT2引脚被配置为输出,只要引脚电平发生了相应的变化,中断将产生。

4.GIFR——通用中断标志寄存器

INTF1 INTF0 INTF2 – – – – –

位 7——INTF1:外部中断标志1
INT1引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF1。如果SREG的位I以及GICR寄存器相应的中断使能位INT1为”1”,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入”1”来清零。
位6——INTF0:外部中断标志0
INT0引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF0。如果SREG的位I以及GICR寄存器相应的中断使能位INT0为”1”,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入”1”来清零。
位 5——INTF2:外部中断标志2
INT2引脚电平发生跳变时触发中断请求,并置位相应的中断标志INTF2。如果SREG的位I以及GICR寄存器相应的中断使能位INT2为”1”,MCU即跳转到相应的中断向量。进入中断服务程序之后该标志自动清零。此外,标志位也可以通过写入”1”来清零。注意,当INT2中断禁用进入某些休眠模式时,该引脚的输入缓冲将禁用。这会导致INTF2标志设置信号的逻辑变化。

 

 

 

 

 

ATmega 16 单片机的SPI的相关寄存器(九)
 
 
 

1.SPCR——SPI控制寄存器

SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0

位 7——SPIE:使能SPI中断
置位后,只要SPSR寄存器的SPIF和SREG寄存器的全局中断使能位置位,就会引发SPI中断。
位 6——SPE:使能SPI
SPE置位将使能SPI。进行任何SPI操作之前必须置位SPE。
位 5——DORD:数据次序
DORD置位时数据的LSB首先发送;否则数据的MSB首先发送。
位 4——MSTR:主/从选择
MSTR置位时选择主机模式,否则为从机。如果MSTR为"1”,SS配置为输入,但被拉低,则MSTR被清零,寄存器SPSR的SPIF置位。用户必须重新设置MSTR进入主机模式。

位3——CPOL:时钟极性
CPOL置位表示空闲时SCK为高电平;否则空闲时SCK为低电平。CPOL功能总结如下:

CPOL 起始沿 结束沿
0 上升沿 下降沿
1 下降沿 上升沿

位 2——CPHA:时钟相位
CPHA决定数据是在SCK的起始沿采样还是在SCK的结束沿采样。

CPHA 起始沿 结束沿
0 采样 设置
1 设置 采样

位1,0——SPR1,SPR0:SPI时钟速率选择1与0
确定主机的SCK速率。SPR1和SPR0对从机没有影响。SCK和振荡器的时钟频率fosc关系如下表所示:

SPI2X SPR1 SPR0 SCK频率
0 0 0 fosc/4
0 0 1 fosc/16
0 1 0 fosc/64
0 1 1 fosc/128
1 0 0 fosc/2
1 0 1 fosc/8
1 1 0 fosc/32
1 1 1 fosc/64

2.SPSR——SPI状态寄存器

SPIF WCOL – – – – – SPI2X

位7——SPIF:SPI中断标志
串行发送结束后,SPIF置位。若此时寄存器SPCR的SPIE和全局中断使能位置位,SPI中断即产生。如果SPI为主机,SS配置为输入,且被拉低,SPIF也将置位。进入中断服务程序后SPIF自动清零。或者可以通过先读SPSR,紧接着访问SPDR来对SPIF清零。
位 6——WCOL:写碰撞标志
在发送当中对SPI数据寄存器SPDR写数据将置位WCOL。WCOL可以通过先读SPSR,紧接着访问SPDR来清零。
位5..1——Res:保留
保留位,读操作返回值为零。
位0——SPI2X:SPI倍速
置位后SPI的速度加倍。若为主机,则SCK频率可达CPU频率的一半。若为从机,只能保证fosc/4。

3.SPDR——SPI数据寄存器

 

相对于串行数据,SCK的相位和极性有4种组合。CPHA和CPOL控制组合的方式。每一位数据的移出和移入发生于SCK不同的信号跳变沿,以保证有足够的时间使数据稳定。说明如下:

起始沿 结束沿 SPI模式
CPOL=0,CPHA=0 采样(上升沿) 采样(下降沿) 0
CPOL=0,CPHA=1 设置(上升沿) 采样(下降沿) 1
CPOL=1,CPHA=0 采样(下降沿) 采样(上升沿) 2
CPOL=1,CPHA=1 采样(下降沿) 采样(上升沿) 3

 

 

 

 

ATmega 16 单片机的USART的相关寄存器(十)
 
 
 

通用同步和异步串行接收器和转发器(USART)是一个高度灵活的串行通讯设备。主要特点为:
全双工操作(独立的串行接收和发送寄存器)
异步或同步操作
主机或从机提供时钟的同步操作
高精度的波特率发生器
支持5,6,7,8,或9个数据位和1个或2个停止位
硬件支持的奇偶校验操作
数据过速检测
帧错误检测
噪声滤波,包括错误的起始位检测,以及数字低通滤波器
三个独立的中断:发送结束中断,发送数据寄存器空中断,以及接收结束中断
多处理器通讯模式
倍速异步通讯模式

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

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.UCSRA——USART控制和状态寄存器A

RXC TXC UDRE FE DOR PE U2X MPCM

位7——RXC:USART接收结束
接收缓冲器中有未读出的数据时RXC置位,否则清零。接收器禁止时,接收缓冲器被刷新,导致RXC清零。RXC标志可用来产生接收结束中断(见对RXCIE位的描述)。
位 6——TXC:USART发送结束
发送移位缓冲器中的数据被送出,且当发送缓冲器(UDR)为空时TXC置位。执行发送结束中断时TXC标志自动清零,也可以通过写1进行清除操作。TXC标志可用来产生发送结束中断(见对TXCIE位的描述)。
位 5——UDRE:USART数据寄存器空
UDRE标志指出发送缓冲器(UDR)是否准备好接收新数据。UDRE为1说明缓冲器为空,已准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断(见对UDRIE位的描述)。复位后UDRE置位,表明发送器已经就绪。
位 4——FE:帧错误
如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个停止位为0,那么FE置位。这一位一直有效直到接收缓冲器(UDR)被读取。当接收到的停止位为1时,FE标志为0。对UCSRA进行写入时,这一位要写0。
位3——DOR:数据溢出
数据溢出时DOR置位。当接收缓冲器满(包含了两个数据),接收移位寄存器又有数据,若此时检测到一个新的起始位,数据溢出就产生了。这一位一直有效直到接收缓冲器(UDR)被读取。对UCSRA进行写入时,这一位要写0。
位 2——PE:奇偶校验错误
当奇偶校验使能(UPM1=1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时UPE置位。这一位一直有效直到接收缓冲器(UDR)被读取。对UCSRA进行写入时,这一位要写0。
位 1——U2X:倍速发送
这一位仅对异步操作有影响。使用同步操作时将此位清零。此位置1可将波特率分频因子从16降到8,从而有效的将异步通信模式的传输速率加倍。
位 0–MPCM:多处理器通信模式
设置此位将启动多处理器通信模式。MPCM置位后,USART接收器接收到的那些不包含地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。

3.UCSRB——USART控制和状态寄存器B

RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8

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

位6——TXCIE:发送结束中断使能
置位后使能TXC中断。当TXCIE为1,全局中断标志位SREG置位,UCSRA寄存器的TXC亦为1时可以产生USART发送结束中断。
位5——UDRIE:USART数据寄存器空中断使能
置位后使能UDRE中断。当UDRIE为1,全局中断标志位SREG置位,UCSRA寄存器的UDRE亦为1时可以产生USART数据寄存器空中断。
位 4——RXEN:接收使能
置位后将启动USART接收器。RxD引脚的通用端口功能被USART功能所取代。禁止接收器将刷新接收缓冲器,并使FE、DOR及PE标志无效。
位 3——TXEN:发送使能
置位后将启动将启动USART发送器。TxD引脚的通用端口功能被USART功能所取代。TXEN清零后,只有等到所有的数据发送完成后发送器才能够真正禁止,即发送移位寄存器与发送缓冲寄存器中没有要传送的数据。发送器禁止后,TxD引脚恢复其通用I/O功能。
位 2——UCSZ2:字符长度
UCSZ2与UCSRC寄存器的UCSZ1:0结合在一起可以设置数据帧所包含的数据位数(字符长度)。
位 1——RXB8:接收数据位8
对9位串行帧进行操作时,RXB8是第9个数据位。读取UDR包含的低位数据之前首先要读取RXB8。
位 0——TXB8:发送数据位8
对9位串行帧进行操作时,TXB8是第9个数据位。写UDR之前首先要对它进行写操作。

4.UCSRC——USART控制和状态寄存器C

URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL

UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。

位 7——URSEL:寄存器选择
通过该位选择访问UCSRC寄存器或UBRRH寄存器。当读UCSRC时,该位为1;当写UCSRC时,URSEL为1。
位6——UMSEL:USART模式选择
通过这一位来选择同步或异步工作模式。

UMSEL 模式
0 异步操作
1 同步操作

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

UPM1 UPM0 奇偶模式
0 0 禁止
0 1 保留
1 0 偶校验
1 1 奇校验

位 3——USBS:停止位选择
通过这一位可以设置停止位的位数。接收器忽略这一位的设置。

USBS 停止位位数
0 1
1 2

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

UCSZ2 UCSZ1 UCSZ0 字符长度
0 0 0 5位
0 0 1 6位
0 1 0 7位
0 1 1 8位
1 0 0 保留
1 0 1 保留
1 1 0 保留
1 1 1 9位

位 0——UCPOL:时钟极性
这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL设置了输出数据的改变和输入数据采样,以及同步时钟XCK之间的关系。

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

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

UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。

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

位 14:12——保留位
这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH时将这些位清零。
位 11:0——UBRR1[1:0]:USART波特率寄存器
这个12位的寄存器包含了USART的波特率信息。其中UBRRH包含了USART波特率高4位,UBRRL包含了低8位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRL将立即更新波特率分频器。


关键字:ATmega  16单片机  寄存器

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016100930249.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR ADC编程
下一篇:ATmega 16单片机的定时器/计数器相关寄存器(二)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Atmega48-88-168熔丝位设置方法

         本文以Atmega168PA+PROGISP为例说明Atmega48-88-168熔丝位的设置方法,参考设计电路图如下图所示,外接7.3728M无源晶振。     1、启动PROGISP软件,正确连接下载器和目标板,选择Atmega168PA,点击“RD”按钮,一切正常的话,应在提示栏中看到正确提示。        2、 点击“...”按钮,打开“Fuse&Lock”对话框,选择“向导方式”。       3、勾选如下
发表于 2019-07-13
Atmega48-88-168熔丝位设置方法

Atmega168 外部10M晶振熔丝位设置方法

    本日志介绍 Atmega168外部10M晶振熔丝位设置方法。    图1:Boot Flash 1024;使能串行下载;看门狗使能          图2:电压低于2.7V复位           图3:外部晶振8M以上,启动速度最慢;没有Flash加密;没有Boot Loader 
发表于 2019-07-13
Atmega168 外部10M晶振熔丝位设置方法

Atmega168 延时函数晶振频率的设置方法

    本文介绍,在Atmel Studio环境中,更改延时函数(宏)的晶振频率的方法。    在Atmel Studio中,可以使用_delay_us(x)宏和_delay_ms(x)进行精准延时,但是在使用这2个宏之前必须设置当前的晶振频率,本日志介绍其设置方法。    1、在项目上点击右键,选择属性     2、在属性栏中,选择工具链,然后选择“Symbols”,然后将F_CPU宏,更改为相应的晶振频率即可。     
发表于 2019-07-13
Atmega168 延时函数晶振频率的设置方法

ATmega16定时器1的时间设定

在Atmel Studio 7环境下编写程序感觉比较舒服。目的:根据设定的时间触发中断,触发一次,变量累加一次;用到中断,所以一开始需要#include变量:unsigned char  time = 0;定时器1配置:void ConfigTimer1(unsigned int set){TCCR1B |= (1<<2);//256分频      比如12M ,就是12000000/256  tmp = 65536-set;//set=( 晶振频率/分频) * 定时时间)TCNT1H = (unsigned char)(tmp>>
发表于 2018-10-07

Atmega16中使用modbus协议

调试工具:Modbus Poll编程软件:Atmel Studio 7理解:PC中的Modbus Poll是主机,而AVR芯片作为从机此处有两种串行传输模式:RTU和ASCII此处使用了RTU模式,这种模式的主要优点是较高的数据密度,在相同的波特率下比ASCII 模式有更高的吞吐率。每个报文必须以连续的字符流传送。//以下是必要的函数void usart_init(uint baud)//波特率{UCSRA = 0X00;UCSRB = 0X00;                
发表于 2018-10-07

Atmega8a的采样(查询法)

];//存温度#define get while(!(ADCSRA & (1 << ADIF)))//若转化完成,ADIF=1========================================atmega8和16不同,16的采样可以由定时器触发
发表于 2018-10-07
Atmega8a的采样(查询法)

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved