资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十二章 AVR看门狗及EEPROM,2007、06、26,AVR 看门狗,引入看门狗的意义 防止程序跑飞 增强系统抗干扰能力,AVR 看门狗,AVR 看门狗,看门狗使用一个独立的定时器,时钟源为内置1Mhz独立振荡器 当看门狗定时器定时溢出时,将产生1CLK宽度的复位脉冲 定时间隔由看门狗预分频器调节 程序执行时,定期复位看门狗定时器,以保证看门狗不产生复位脉冲 程序跑飞时,由于在定时间隔内没有复位看门狗定时器的操作,当定时溢出时,系统复位。,AVR 看门狗,AVR 看门狗,与看门狗相关的寄存器 WDTCR WDTOE: 看门狗修改使能 清零WDE 时必须置位WDTOE,否则不能禁止看门狗。一旦置位,硬件将在紧接的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 看门狗,在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 数据寄存器 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 清零时EEPROM 准备好中断即可发生。,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 步的次序并不重要): 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 操作失败。 建议此时关闭全局中断标志I。 经过写访问时间之后,EEWE 硬件清零。 用户可以凭借这一位判断写时序是否已经完成。 EEWE 置位后, CPU 要停止两个时钟周期才会运行下一条指令。,AVR 内置EEPROM,EEPROM 控制寄存器 EECR EERE: EEPROM 读使能 当EEPROM地址设置好之后,需置位EERE以便将数据读入EEAR。 EEPROM 数据的读取只需要一条指令,且无需等待。 读取EEPROM后CPU 要停止4 个时钟周期才可以执行下一条指令。 用户在读取EEPROM 时应该检测EEWE。 如果一个写操作正在进行,就无法读取EEPROM,也无法改变寄存器EEAR。,AVR 内置EEPROM,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 指定位置读取数据送给数据对象 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) 从EEPROM 指定位置读取一个字节 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内置函数原型,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 expanded 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 将产生扩展名为.eep 的EEPROM初始化文件。,内部EEPROM使用实例,定义变量到EEPROM #pragma data:eepromSystemInfo SysData;SysSetupType SetupEepData;SmsFileType SmsEepFile10;AlamRecType AlamEepRec20;uint8 SuperPassWordEep16;uint8 InputMenuInfoEep820;uint8 OutputMenuInfoEep820;uint8 SystemInit; #pragma data:data,内部EEPROM使用实例,定义RAM中的变量 SystemInfo sysdata=“GSM eHOME System”, “Ver 1.0”,“05/08/13”; SysSetupType SetupData;SmsFileType SmsFile;AlamRecTypeAlamRec;uint8 SuperPassWord16;uint8 InputMenuInfo820;uint8 OutputMenuInfo820;,内部EEPROM使用实例,写入数据 EEPROM_WRITE(uint16),
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号