有关ATMEGA8单片机中EEPROM的问题

有关ATMEGA8单片机中EEPROM的问题,第1张

把写语颤扰扰句eeprom_write(2,0x55)注释掉以后肯定要重新编译又重新烧录(编程),AVR单片机编程相关平台或李链烧录软件大多有EEPROM数据保护选项,如果没有对这些选项进行配置,烧录过程中就会对EEPROM进行擦除,你当然读不出原先的数据了,不茄旦知你用哪个软件平台编辑,ICCAVR、CVAVR或其它,也不知道用哪个烧录软件编程,还有,熔丝位中也有1个配置位与EEPROM关,不知你是否注意到,提供两个图片供参考:

//晶振1MHz

//LED接PB0

//使用定时器1,1024分频,0.5秒中断一次,LED闪烁一次

程序如下:

.include "m8def.inc"

.equ led =0

.equ flash=$60

.org$0000//中断向量表陆念扒

rest:

rjmp START

INT0addre: External Interrupt0 Vector Address

reti

INT1addre: External Interrupt1 Vector Address

reti

OC2addre : Output Compare2 Interrupt Vector Address

reti

OVF2addre: Overflow2 Interrupt Vector Address

reti

ICP1addre: Input Capture1 Interrupt Vector Address

reti

OC1Aaddre: Output Compare1A Interrupt Vector Address

reti

OC1Baddre: Output Compare1B Interrupt Vector Address

reti

OVF1addre: Overflow1 Interrupt Vector Address

rjmpTimer1_ovf

OVF0addre: Overflow0 Interrupt Vector Address

reti

SPIaddre : SPI Interrupt Vector Address

reti

URXCaddre: USART Receive Complete Interrupt Vector Address

reti

UDREaddre: USART Data Register Empty Interrupt Vector Address

reti

UTXCaddre: USART Transmit Complete Interrupt Vector Address

reti

ADCCaddre: ADC Interrupt Vector Address

reti

ERDYaddre: EEPROM Interrupt Vector Address

reti

ACIaddre : Analog Comparator Interrupt Vector Address

reti

TWIaddre : Irq. vector address for Two-Wire Interface

reti

SPMaddre : SPM complete Interrupt Vector Address

reti

SPMRaddre: SPM complete Interrupt Vector Address

reti

.org $20

START:

ldi r16,low(ramend)//设置堆栈指针

out spl,r16

ldi r16,high(ramend)

out sph,r16

clr r16

sts flash,r16

sbi ddrb,led//PB0接led

rcall Timer1_ovf_init//调用初早昌始化函数

MAIN:

lds r16,flash

sbrs r16,0 if the flag is set,jump one low

rjmp main

ldi r16,0x01//LED取反

in r17,pinb

eor r17,r16

out portb,r17

clr r16

sts flash,r16

rjmp main

Timer1_ovf_init:

ldi r16,0xfe

out tcnt1h,r16

ldi r16,0x17

out tcnt1l,r16

inr16,timsk

sbrr16,1<高激<2//开溢出中断

outtimsk,r16

ldi r16,0x05

out tccr1b,r16//开定时器

sei //开中断

ret

Timer1_ovf://定时器2定时0.5S

inr16,sreg

push r16//保存SREG入栈

ldi r16,0xfe

out tcnt1h,r16

ldi r16,0x17

outtcnt1l,r16

clr r16

sbr r16,1<<0//设置标志

sts flash,r16

pop r16

out sreg,r16

reti//中断返回

ATmega8 参数 ATmega8存储器 Flash ROM 8KB SRAM 1024B EEPROM 512B ATmega8性能参数特性 工作频率 0-8MHz (ATmega8L) 0-16MHz (ATmega8) 工作渗隐电压 2.7-5.5V (ATmega8L) 4.5-5.5V (ATmega8) I/O口 23个 16位定时器 / 计数器 1 8位定时器 / 计数器 2 PWM 3 RTC YES SPI 1 UART 1 TWI YES 10位ADC 6(DIP)

8(TQFP / MLF) 模拟比较器 1 WDT 1(带独立片内振荡器) 外部中断 2 睡眠模式 5种 硬件乘法器 YES 片内振荡器 YES 引脚电平中断/唤醒功能 NO 掉电检测 YES 上电复位 YES ATmega8封装与引脚数 PDIP 28PIN QFP 32PIN QFN / MLF 32PIN ATmega8编程与调试方式 编程方式 ISP IAP H/PV 仿真方式 仿真头接入,

模拟式仿真 4 ATmega8(L)

2486N–AVR–07/04

AVR 内核具有丰富的指令集和32 个通用工作寄存器。所有的寄存器都直接与算逻单元

(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结

构大大提高了代码效率,并且具有比普通的CISC 微控制器最高至10 倍的数据吞吐率。

ATmega8 有如下特点:8K 字节的系统内可编程Flash( 具有同时读写的能力,即RWW),

512 字节 EEPROM,1K 字节 SRAM,32 个通用I/O 口线,32 个通用工作寄存器,三个

具有比较模式的灵活的定时器/ 计数器(T/C), 片内/ 外中断,可编程串行USART,面向

字节的两线串行接口, 10 位6 路 (8 路为TQFP 与MLF 封装)ADC,具有片内振荡器的

可编程看门狗定时器,一个SPI 串行端口,以及五种可以通过软件进行选择的省电模式。

工作于空闲模式时CPU 停止工作,而SRAM、T/C、 SPI 端口以及中断系统继续工作;

掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省

电模式下,异步定时器继续运行,允许用户保持一个时间基准,而清喊罩其余功能模块处于休眠

状态; ADC 噪声抑制模式时终止CPU 和除了异步定时器与ADC 以外所有I/O 模块的工

作,以降低ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余

功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力。

本芯片是以Atmel 高密度非易失性存储器技术生产的。片内ISP Flash 允许程序存储器通

过ISP 串行接口,或者通用编程器进行编程,也可以通过运行于AVR 内核之中的引导程

序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(Application

Flash Memory)。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续

运行,实现了RWW *** 作。 通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个

芯片内,ATmega8 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低

成本的解决方案。

ATmega8 具有一整套的编程与系统开发工具,包括:C 语言编译器、宏汇编、 程序调试

器/ 软件仿真器、仿真器答闹及评估板。

声明本数据手册的典型值来源于对器件的仿真,以及其他基于相同产生工艺的 AVR 微控制器

的标定特性。本器件经过特性化之后将给出实际的最大值和最小值。

5

ATmega8(L)

2486N–AVR–07/04

引脚说明

VCC 数字电路的电源。

GND 地。

端口B(PB7..PB0)

XTAL1/XTAL2/TOSC1/TOSC2

端口B 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特

性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉

低时将输出电流。在复位过程中,即使系统时钟还未起振,端口B 处于高阻状态。

通过时钟选择熔丝位的设置, PB6 可作为反向振荡放大器或时钟 *** 作电路的输入端。

通过时钟选择熔丝位的设置PB7 可作为反向振荡放大器的输出端。

若将片内标定RC 振荡器作为芯片时钟源,且ASSR 寄存器的AS2 位设置,PB7..6 作为

异步 T/C2 的TOSC2..1 输入端。

端口B 的其他功能见P 55“ 端口B 的第二功能” 及P 22“ 系统时钟及时钟选项” 。

端口C(PC5..PC0) 端口C 为7 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特

性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉

低时将输出电流。在复位过程中,即使系统时钟还未起振,端口C 处于高阻状态。

PC6/RESET 若RSTDISBL 熔丝位编程, PC6 作为I/O 引脚使用。注意PC6 的电气特性与端口C 的

其他引脚不同

若RSTDISBL 熔丝位未编程,PC6 作为复位输入引脚。持续时间超过最小门限时间的低

电平将引起系统复位。门限时间见P 35Table 15 。持续时间小于门限时间的脉冲不能保

证可靠复位。

端口C 的其他功能见后。

端口D(PD7..PD0) 端口D 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特

性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路

拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口D 处于高阻状态。

端口D 的其他功能见后。

RESET 复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见 P

35Table 15 。持续时间小于门限时间的脉冲不能保证可靠复位。

30 ATmega8(L)

2486N–AVR–07/04

电源管理及睡眠模式睡眠模式可以使应用程序关闭MCU 中没有使用的模块,从而降低功耗。AVR 具有不同

的睡眠模式,允许用户根据自己的应用要求实施剪裁。

进入睡眠模式的条件是置位寄存器MCUCR 的SE,然后执行SLEEP 指令。具体哪一种

模式( 空闲模式、ADC 噪声抑制模式、掉电模式、省电模式及Standby 模式) 由MCUCR

的SM2、SM1 和SM0 决定,如Table 13 所示。使能的中断可以将进入睡眠模式的MCU

唤醒。经过启动时间,外加4 个时钟周期后, MCU 就可以运行中断例程了。然后返回到

SLEEP的下一条指令。唤醒时不会改变寄存器文件和SRAM的内容。如果在睡眠过程中发

生了复位,则MCU 唤醒后从中断向量开始执行。

注意,由于TOSC 与XTAL 共用同一引脚,对于许多AVR MCU 中有的扩展Standby 模

式在ATmega8 中已删除。

P 22Figure 10 介绍了ATmega8不同的时钟系统及其分布。此图在选择合适的睡眠模式时

非常有用。

MCU 控制寄存器- MCUCR MCU 控制寄存器包含了电源管理的控制位。

· Bit 7 – SE: 休眠使能

为了使MCU 在执行SLEEP 指令后进入休眠模式, SE 必须置位。为了确保进入休眠模

式是程序员的有意行为,建议仅在SLEEP 指令的前一条指令置位SE。MCU 一旦唤醒立

即清除SE。

· Bits 6..4 – SM2..0: 休眠模式选择位 2、1 和0

如 Table 13 所示,这些位用于选择具体的休眠模式。

Note: 1. 仅在使用外部晶体或谐振器时Standby 模式才可用。

Bit 7 6 5 4 3 2 1 0

SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00 MCUCR

读/ 写R/W R/W R/W R/W R/W R/W R/W R/W

初始值0 0 0 0 0 0 0 0

Table 13. 休眠模式选择

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) 模式


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12354921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存