$10($0030) $11($0031) $12($0032) $13($0033) $14($0034) $15($0035) $16($0036) $17($0037) $18($0038) $19($0039) $1A($003A) $1B($003B) $1C($003C) $1D($003D) $1E($003E) $1F($003F) $20($0040) $21($0041) $22($0042) $23($0043) $24($0044) $25($0045) $26($0046) $27($0047) $28($0048) $29($0049) $2A($004A) $2B($004B) $2C($004C) $2D($004D) $2E($004E) $2F($004F) $30($0050) $31($0051) $32($0052) $33($0053) $34($0054) $35($0055) $36($0056) $37($0057) $38($0058) $39($0059) PIND DDRD PORTD PINC DDRC PORTC PINB DDRB PORTB (Reserved) (Reserved) (Reserved) EECR EEDR EEARL EEARH UCSRC UBRRH WDTCR ASSR OCR2 TCNT2 TCCR2 ICR1L ICR1H OCR1BL OCR1BH OCR1AL OCR1AH TCNT1L TCNT1H TCCR1B TCCR1A SFIOR OSCCAL TCNT0 TCCR0 MCUCSR MCUCR TWCR SPMCR TIFR TIMSK D端口输入脚 D端口数据方向寄存器 D端口数据寄存器 C端口输入脚 C端口数据方向寄存器 C端口数据寄存器 B端口输入脚 B端口数据方向寄存器 B端口数据寄存器 保留 保留 保留 E2PROM控制寄存器 E2PROM数据寄存器 E2PROM地址寄存器低8位 E2PROM地址寄存器高8位 USART控制状态寄存器C USART波特率寄存器高4位 看门狗定时器控制寄存器 异步模式状态寄存器 T/C2输出比较寄存器 T/C2计数器 T/C2控制寄存器 T/C1输入捕获寄存器低8位 T/C1输入捕获寄存器高8位 T/C1输出比较寄存器B低8位 T/C1输出比较寄存器B高8位 T/C1输出比较寄存器A低8位 T/C1输出比较寄存器A高8位 T/C1计数器低8位 T/C1计数器高8位 T/C1控制寄存器B T/C1控制寄存器A 特殊功能I/O寄存器 内部RC振荡器校准值寄存器 T/C0计数器 T/C0控制寄存器 MCU控制和状态寄存器 MCU控制寄存器 I2C总线控制寄存器 写程序存储器控制寄存器 T/C中断标志寄存器 T/C中断屏蔽寄存器 $3A($005A) $3B($005B) $3C($005C) $3D($005D) $3E($005E) $3F($005F) GIFR GICR (Reserved) SPL SPH SREG 通用中断控制寄存器 通用中断控制寄存器 保留 堆栈指针寄存器低8位 堆栈指针寄存器高8位 状态寄存器 §2.5 时钟电路和复位电路
一、时钟源
单片机在执行指令时,通常将一条指令分解为若干基本的微操作,这些微操作对应的脉冲信号在时间上的先后次序,称为单片机的时序。
为了保证同步工作,单片机内部电路应在唯一的时钟信号控制下,严格地按照时序进行工作。
Atmega8共有5种源,如图2—7所示。
外部晶振CPU时钟clkCPU外部RC振荡器外部低频晶振外部时钟内部 RC晶振时钟源选择器I/O时钟clkI/O主时钟时钟控制器Flash时钟clkFLASHADC时钟clkADC异步定时器时钟clkASY
图2—7 Atmega8时钟系统
具体的Atmega8应用系统采用哪种时钟源,可以通过利用广州双龙MCU下载程序V1.3.4对Atmega8内部的熔丝位CKSEL进行编程设置,如表2—6。
表2—5 Atmega8时钟源选择 可选择的时钟源 外部晶振 外部RC振荡器 外部低频晶振 外部时钟 内部RC振荡 熔丝位CKSEL3,2,1,0 1111—1010 1000—0101 1001 0000 0100—0001 例如:采用8.000MHz内部RC振荡器,我们可以利用V1.3.4进行如图2—8所示设置。
图2—8
注意:在图2—8中,打“√”表示相应的CKSEL被编程,且为“0”。 1.外部晶振
Atmega8的XTAL1和XTAL2分别为片内振荡器的反向放大器的输入、输出端,可在外部连接石英晶体(对频率要求不高时可接陶瓷晶体),构成稳定的自激振荡器,产生一个与石英晶体固有频率相等的时钟信号,如图2—9。
C2XTAL2C1XTAL1GNDATmega8
图2—9 外部晶振连接图
图中晶振频率可以在0.4—16MHz之间选择。C1、C2通常选则容量为12~22pF的NPO电容,且使两者的容量相等。另外,为了保证振荡器的稳定性,在设计电路板时,晶体、电容尽可能靠近芯片,以减少分布电容的影响。
使用外部晶振,可以通过熔丝位CKOPT选择两种不同的工作方式:当熔丝位CKOPT被编程时,外部晶振振荡器输出一个满幅的振荡信号,使系统适合在高噪声环境下工作,或需要把从XTAL2的时钟信号作为时钟信号输出;当熔丝位CKOPT未4被编程时,外部晶振振荡器输出一个小摆幅的振荡信号,此时相应减少了功率消耗。但此方式的工作频率范围受限,而且振荡器的输出不能作为外部时钟驱动使用。
外部晶振振荡器的每种工作方式又有不同的三种模式,可以通过熔丝位
CKSEL(3、2、1)不同的编程组合来选择,具体情况参见表2—6。
表2—6 外部晶振振荡器不同工作模式 工作 方式 1 熔 丝 位 工作频率范C1、C2(使用石 围(MHz) 英晶体,pF) CKOPT CKSEL(3、2、1)仅使用于陶瓷振荡器 1 101 0.4~0.9 1 110 0.9~3.0 12~22 1 111 3.0~8.0 12~22 0 0 101、110、111 ≤1.0 12~22 2.外部时钟源 在由多个单片机组成的系统中,为了保证各单片机之间时钟信号的同步,应当引入唯一的公用外部脉冲作为各单片机的时钟脉冲。
Atmega8采用外部时钟源时,连接方法如图2—10,而且要将熔丝位CKSEL编程为“0000”。另外,通过对熔丝位CKOPT编程,可以使芯片内部XTAL1与地之间的36pF有效。
NCXTAL2外部时钟信号XTAL1GNDATmega8
图2—10外部时钟源接法
3.可校准的内部RC振荡器
Atmega8中集成了可校准的内部RC振荡电路,它可以提供固定的1.0、2.0、4.0或8.0MHz时钟信号,对频率要求不高时,可以作为系统时钟源,从而使得系统硬件配置变得简单。我们可以通过对熔丝位CKSEL编程来选用内部RC振荡器作为系统时钟(熔丝位CKOPT应处于未编程状态),见表2—7。
表2—7 使用内部RC振荡器的不同工作模式 熔丝位CKSEL(3、2、1、0) 0001 0010 0011 0100 工作频率(MHz) 1.0 2.0 4.0 8.0 注意:Atmega8芯片出厂时设置为0001 由Atmega8构成的单片机系统除了可以选择以上三种时钟源外,还可以采用外部RC振荡器或外部低频晶振作为系统时钟源,具体使用方法参照相关的技术文件。
二、单片机的复位电路
复位功能类似预备铃的作用,预备铃一响,大家就自动进入教室,在这段时间里,老师还没有开始上课。对于单片机来说,复位的时候,CPU也没有开始执行程序,只是做准备工作。
Atmega8单片机有4个复位源:上电复位、外部复位、看门狗复位和电源电压检测BOD复位。下面我们详细介绍Atmega8的上电复位功能。
上电复位脉冲(POR)由Atmega8芯片内部的电源检测电路产生,检测电平门限见表2—8。当系统电源电压VCC低于上电复位门限电平VPOT,产生内部复位脉冲,使MCU复位。
表2—8 Atmega8复位特性
符 号 参 数 上电复位门限电压(上升沿) 条 件 最小值 典型值 最大值 单位 VPOT 1.4 2.3 V 上电复位门限电压(下降沿) 1.3 2.3 V VRST 复位引脚门限电压 0.1 0.9 V 复位引脚需要的最小脉宽 tRST 50 ns BODLEVEL=1 VBOT 掉电复位门限电压 2.5 2.7 3.2 V BODLEVEL=0 3.7 4.0 4.5 V TBOD 掉电检测的低电压最小宽度 BODLEVEL=1 2 us BODLEVEL=0 2 us VHYST 掉电检测迟滞电压 130 mV 当系统上电电压达到上电复位门限电平VPOT时,启动Atmega8芯片内部一个延时计数器,由它决定Atmega8上电后保持复位状态的时间,如图2—11。
VPOT系统电源电压Vcc VRST复位引脚电平t延时延迟时间内部复位脉冲
图2—11 MCU上电复位(复位引脚接到系统电源VCC)
由上面的介绍可知,由于Atmega8特有的上电复位功能,在它构成的单片机系统中,我们可以不用外设复位电路,只要将其复位引脚直接接到电源端即可,从而简化了硬件电路,这也是单片机发展的方向。
Atmega8其它三种复位源,请大家参考相关的技术资料。