第十二章AVR看门狗及EEPROM精编版

上传人:ahu****ng1 文档编号:141968221 上传时间:2020-08-14 格式:PPTX 页数:31 大小:474.08KB
返回 下载 相关 举报
第十二章AVR看门狗及EEPROM精编版_第1页
第1页 / 共31页
第十二章AVR看门狗及EEPROM精编版_第2页
第2页 / 共31页
第十二章AVR看门狗及EEPROM精编版_第3页
第3页 / 共31页
第十二章AVR看门狗及EEPROM精编版_第4页
第4页 / 共31页
第十二章AVR看门狗及EEPROM精编版_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《第十二章AVR看门狗及EEPROM精编版》由会员分享,可在线阅读,更多相关《第十二章AVR看门狗及EEPROM精编版(31页珍藏版)》请在金锄头文库上搜索。

1、第十二章 AVR看门狗及EEPROM,2007、06、26,AVR 看门狗,引入看门狗的意义 防止程序跑飞 增强系统抗干扰能力,AVR 看门狗,AVR 看门狗,看门狗使用一个独立的定时器,时钟源为内置1Mhz独立振荡器 当看门狗定时器定时溢出时,将产生1CLK宽度的复位脉冲 定时间隔由看门狗预分频器调节 程序执行时,定期复位看门狗定时器,以保证看门狗不产生复位脉冲 程序跑飞时,由于在定时间隔内没有复位看门狗定时器的操作,当定时溢出时,系统复位。,AVR 看门狗,AVR 看门狗,与看门狗相关的寄存器 WDTCR WDTOE: 看门狗修改使能 清零WDE 时必须置位WDTOE,否则不能禁止看门狗。

2、一旦置位,硬件将在紧接的4 个时钟周期之后将其清零。,AVR 看门狗,WDE: 使能看门狗 WDE为“1“ 时,看门狗使能,否则看门狗将被禁止。只有在WDTOE为”1“ 时WDE 才能清零。 以下为关闭看门狗的步骤: 在同一个指令内对WDTOE 和WDE 写1“,即使WDE 已经为1“ 在紧接的4 个时钟周期之内对WDE 写0”,AVR 看门狗,AVR 看门狗,void WDT_off(void) /* WDT 复位*/ _WDR(); /* 置位 WDTOE 和 WDE*/ WDTCR |= (1WDTOE) | (1WDE); /* 关闭WDT */ WDTCR = 0 x00; ,AVR

3、 看门狗,在ICC中,macros.h头文件中预定义了复位看门狗定时器的宏 WDR() /Watchdog initialize / prescale: 2048K void watchdog_init(void) WDR(); /this prevents a timout on enabling WDTCR = 0 x0F; /WATCHDOG ENABLED - dont forget to issue WDRs ,AVR 内置EEPROM,ATmega16 内置512字节的EEPROM 与EEPROM相关的寄存器 EEPROM 地址寄存器 EEARH和EEARL EEPROM 数据寄存

4、器 EEDR EEPROM 控制寄存器 EECR,AVR 内置EEPROM,EEPROM 地址寄存器 EEARH和EEARL 指定了512字节的EEPROM空间。EEPROM地址是线性的,从0 到511。 EEAR 的初始值没有定义。在访问EEPROM 之前必须为其赋予正确的数据。,AVR 内置EEPROM,EEPROM 数据寄存器 EEDR 对于EEPROM 写操作, EEDR 是需要写到EEAR 单元的数据; 对于读操作, EEDR 是从地址EEAR 读取的数据。,AVR 内置EEPROM,EEPROM 控制寄存器 EECR EERIE: 使能EEPROM 准备好中断 当EEWE 清零时E

5、EPROM 准备好中断即可发生。,AVR 内置EEPROM,EEPROM 控制寄存器 EECR EEMWE: EEPROM 主机写使能 EEMWE决定了EEWE置位是否可以启动EEPROM写操作。 当EEMWE为“1”时,在4个时钟周期内置位EEWE 将把数据写入EEPROM 的指定地址; 若EEMWE 为“0“,则操作EEWE 不起作用。 EEMWE 置位后4 个周期,硬件对其清零。,AVR 内置EEPROM,EEPROM 控制寄存器 EECR EEWE: EEPROM 写使能 当EEPROM 数据和地址设置好之后,需置位EEWE以便将数据写入EEPROM。 写时序如下( 第3 步和第4 步

6、的次序并不重要): 1. 等待EEWE 位变为零 2. 等待SPMCSR 中的SPMEN 位变为零 3. 将新的EEPROM 地址写入EEAR( 可选) 4. 将新的EEPROM 数据写入EEDR( 可选) 5. 对EECR 寄存器的EEMWE 写1,同时清零EEWE 6. 在置位EEMWE 的4 个周期内,置位EEWE,AVR 内置EEPROM,注意: 如果在步骤5 和6 之间发生了中断,写操作将失败。因为此时EEPROM 写使能操作将超时。 如果一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR 或EEDR寄存器可能被修改,引起EEPROM 操作失败。 建议此时关闭全局中断标

7、志I。 经过写访问时间之后,EEWE 硬件清零。 用户可以凭借这一位判断写时序是否已经完成。 EEWE 置位后, CPU 要停止两个时钟周期才会运行下一条指令。,AVR 内置EEPROM,EEPROM 控制寄存器 EECR EERE: EEPROM 读使能 当EEPROM地址设置好之后,需置位EERE以便将数据读入EEAR。 EEPROM 数据的读取只需要一条指令,且无需等待。 读取EEPROM后CPU 要停止4 个时钟周期才可以执行下一条指令。 用户在读取EEPROM 时应该检测EEWE。 如果一个写操作正在进行,就无法读取EEPROM,也无法改变寄存器EEAR。,AVR 内置EEPROM,

8、void EEPROM_write(unsigned int uiAddress, unsigned char ucData) /* 等待上一次写操作结束 */ while(EECR ,AVR 内置EEPROM,unsigned char EEPROM_read(unsigned int uiAddress) /* 等待上一次写操作结束 */ while(EECR ,AVR 内置EEPROM,在ICC中,eeprom.h头文件中预定义了内置EEPROM读写宏: EEPROM_READ(int location, object) 这个宏调用了EEPROMReadBytes 函数从EEPROM 指

9、定位置读取数据送给数据对象 object可以是任意程序变量包括结构和数组例如 int i; EEPROM_Read(0 x1, i); / 读2 个字节给i EEPROM_WRITE(int location, object) 这个宏调用了EEPROMWriteBytes 函数将数据对象写入到EEPROM 的指定位置 object可以是任意程序变量包括结构和数组例如 int i; EEPROM_WRITE(0 x1, i); /写两个字节至0 x1,AVR 内置EEPROM,在ICC中也可以直接使用以下内置函数 unsigned char EEPROMread(int location) 从E

10、EPROM 指定位置读取一个字节 int EEPROMwrite(int location, unsigned char byte) 写一个字节到EEPROM 指定位置如果成功返回0 void EEPROMReadBytes(int location, void *ptr, int size) 从EEPROM 指定位置处开始读取size个字节至由ptr.指向的缓冲区 void EEPROMWriteBytes(int location, void *ptr, int size) 从EEPROM 指定位置处开始写size个字节写的内容由ptr.指向的缓冲区提供,ICC读写EEPROM内置函数原型

11、,unsigned char EEPROMread( int location) EEAR = location; EECR |= 0 x01; / Set READ strobe return (EEDR); / Return byte ,ICC读写EEPROM内置函数原型,int EEPROMwrite( int location, unsigned char byte) unsigned char oldSREG; EEAR = location; EEDR = byte; oldSREG = SREG; SREG / return Success. / Could be expande

12、d so that / the routine checks that the address / is within the range of the chip. ,ICC中将变量分配至EEPROM中,#pragma data:eeprom int foo = 0 x1234; char table = 0, 1, 2, 3, 4, 5 ; #pragma data:data . int i; EEPROM_READ(int) / i 等于 0 x1234,ICC中将变量分配至EEPROM中,将变量分配到EEPROM区域,可以使用编译附注#pragma data:eeprom 将产生扩展名为

13、.eep 的EEPROM初始化文件。,内部EEPROM使用实例,定义变量到EEPROM #pragma data:eepromSystemInfo SysData;SysSetupType SetupEepData;Sms SmsEep;AlamRecType AlamEepRec20;uint8 SuperPassWordEep16;uint8 InputMenuInfoEep820;uint8 OutputMenuInfoEep820;uint8 SystemInit; #pragma data:data,内部EEPROM使用实例,定义RAM中的变量 SystemInfo sysdata=

14、“GSM eHOME System”, “Ver 1.0”,“05/08/13”; SysSetupType SetupData;Sms SmsFile;AlamRecTypeAlamRec;uint8 SuperPassWord16;uint8 InputMenuInfo820;uint8 OutputMenuInfo820;,内部EEPROM使用实例,写入数据 EEPROM_WRITE(uint16),1、有时候读书是一种巧妙地避开思考的方法。20.8.1420.8.14Friday, August 14, 2020 2、阅读一切好书如同和过去最杰出的人谈话。15:29:4915:29:4

15、915:298/14/2020 3:29:49 PM 3、越是没有本领的就越加自命不凡。20.8.1415:29:4915:29Aug-2014-Aug-20 4、越是无能的人,越喜欢挑剔别人的错儿。15:29:4915:29:4915:29Friday, August 14, 2020 5、知人者智,自知者明。胜人者有力,自胜者强。20.8.1420.8.1415:29:4915:29:49August 14, 2020 6、意志坚强的人能把世界放在手中像泥块一样任意揉捏。2020年8月14日星期五下午3时29分49秒15:29:4920.8.14 7、最具挑战性的挑战莫过于提升自我。202

16、0年8月下午3时29分20.8.1415:29August 14, 2020 8、业余生活要有意义,不要越轨。2020年8月14日星期五3时29分49秒15:29:4914 August 2020 9、一个人即使已登上顶峰,也仍要自强不息。下午3时29分49秒下午3时29分15:29:4920.8.14 10、你要做多大的事情,就该承受多大的压力。8/14/2020 3:29:49 PM15:29:492020/8/14 11、自己要先看得起自己,别人才会看得起你。8/14/2020 3:29 PM8/14/2020 3:29 PM20.8.1420.8.14 12、这一秒不放弃,下一秒就会有希望。14-Aug-2014 August 202020.8.14 13、无论才能知识多么卓著,如果缺乏热情,则无异纸上画饼充饥,无补于事。Friday, August 14, 202014-Aug-2020.8.14 14、我只是自己不放过自己而

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号