标题:
《51单片机轻松入门-基于STC15W4K系列》225页DataFlash篇程序问题
[打印本页]
作者:
pineydu
时间:
2016-3-4 22:49
标题:
《51单片机轻松入门-基于STC15W4K系列》225页DataFlash篇程序问题
请教无大侠:
书上P224的例7.5中,在主程序中EEPROM_read_n中U8 后面的*是读出的数据吧,
这个数据会被传送到ISP_DATA是吗?这个ISP_DATA会在256时溢出吧,
我想要不溢出,是否把U8改成U32就可以了?
void EEPROM_read_n(unsigned int EE_address, unsigned char *DataAddress, unsigned char lenth)
{
EA = 0; //禁止中断
ISP_CONTR = (0x80 + ISP_WAIT_FREQUENCY); //设置等待时间,允许ISP/IAP操作,送一次就够
ISP_CMD = 1; //送字节读命令,命令不需改变时,不需重新送命令
do
{
ISP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址)
ISP_ADDRL = EE_address % 256; //送地址低字节
ISP_TRIG = 0x5A; //先送5AH,再送A5H到ISP/IAP触发寄存器,每次都需要如此
ISP_TRIG = 0xA5; //送完A5H后,ISP/IAP命令立即被触发启动
//CPU等待IAP完成后,才会继续执行程序。
_nop_();
*DataAddress = ISP_DATA; //读出的数据送往外部变量地址
EE_address++; //下一个地址
DataAddress++; //下一个数据
}
while(--lenth);
DisableEEPROM();
EA = 1; //重新允许中断
}
被保存的数据可以直接从ISP_DATA中读取吗? 还是需要从DataAddress中读取,如何使存储和读取的数据不在65535溢出?
作者:
无量寿经
时间:
2016-3-5 00:05
参数“(u8 *)&Power_up”用于存放从内部DataFlash读出的数据,(u8 *)是将结构体变量Power_up的地址转换成按字节访问的地址,因为ISP_DATA是一个字节一个字节方式写入,
结构体定义如下:
#define u8 unsigned char
#define u32 unsigned long
struct POWER_UP
{
u32 times;
u8 flag;
};
因为变量times被定义为unsigned long,所以不会溢出。
作者:
pineydu
时间:
2016-3-5 00:25
无量寿经 发表于 2016-3-5 00:05
参数“(u8 *)&Power_up”用于存放从内部DataFlash读出的数据,(u8 *)是将结构体变量Power_up的地址转换成按 ...
我要从EEPROM中读取数据,是直接调用ISP_DATA吗?
作者:
无量寿经
时间:
2016-3-5 00:32
本帖最后由 无量寿经 于 2016-3-5 00:39 编辑
《51单片机轻松入门-基于STC15W4K系列》免费视频与例程下载地址:
http://pan.baidu.com/share/home? ... are#category/type=0
作者:
无量寿经
时间:
2016-3-5 00:36
调用这个函数:EEPROM_read_n(EEP_address,(u8 *)&Power_up,sizeof(struct POWER_UP)); // 读出断电时刻自动保存的值
作者:
无量寿经
时间:
2016-3-5 08:07
C语言结构体的讲解在《51单片机轻松入门-基于STC15W4K系列》的80页,(u8 *) 的()是强制类型转换运算符,是见76页。
作者:
舞者人生
时间:
2020-1-2 11:08
无法看到分析
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1