typedef unsigned char INT8U;
typedef unsigned int INT16U;
union union_temp16{INT16U un_temp16;INT8U un_temp8[2];}my_unTemp16;
#define WD1 0x5a //EEPROM必须设置数据(需要参考数据手册修改)
#define WD2 0xa5
//定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数//
#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值
/*****************************************************************/
//关闭IAP功能, 操作完IAP后必须关闭IAP
void IAP_Disable(){IAP_CONTR=0;IAP_CMD=0;IAP_TRIG=0;IAP_ADDRH=0;IAP_ADDRL=0;}
/******************************************************************/
INT8U Byte_Read (INT16U add){//读一字节,调用前需打开IAP功能
IAP_DATA = 0x00;
IAP_CMD = 0x01;//IAP/ISP/EEPROM字节读命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
IAP_TRIG = WD1; //先送 WD1,再送WD2 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = WD2; //送完WD2 后,ISP/IAP 命令立即被触发起动
_nop_();_nop_();
return (IAP_DATA);
}
/*********************************************************************************************/
void Byte_Program(INT16U add, INT8U ch){//写一个字节(地址,数据)(底层)
IAP_CMD = 0x02; //IAP/ISP/EEPROM 字节编程命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
IAP_DATA = ch; //要编程的数据先送进IAP_DATA 寄存器
IAP_TRIG = WD1; //先送 WD1,再送WD2 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = WD2; //送完WD2 后,ISP/IAP 命令立即被触发起动
_nop_();_nop_();
}
/*********************************************************************************************/
void Sector_Erase(INT16U add){//擦除扇区
IAP_CMD = 0x03; //IAP/ISP/EEPROM 扇区擦除命令
my_unTemp16.un_temp16 = add;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
IAP_TRIG = WD1; //先送 WD1,再送WD2 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = WD2; //送完WD2 后,ISP/IAP 命令立即被触发起动
_nop_();_nop_();
}
/*********************************************************************************************/
void EEPROM_Read (void){//读一个字节(上层)
IAP_CONTR = ENABLE_ISP;//打开IAP功能
sum = Byte_Read(0x00);//将指向的寄存器清空
if(sum==0)sum=1;
IAP_Disable();//关闭IAP功能
}
/**********************************************************************************************/
void EEPROM_Program(void){//写一个字节(上层)
IAP_CONTR = ENABLE_ISP;//打开IAP 功能, 设置Flash 操作等待时间
Sector_Erase(0x00);//擦除扇区
Byte_Program(0x00,sum);//写入数据(地址,数据)
IAP_Disable();//关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
}
这个 我用的手机 uint 定义的 应该在65532的范围内是有效的,可是不明白为什么255就不行了,
追答其实没那么难,你想想只要是255以内就是0xFF以内能够存储正确,那么存储255以上的呢?比如257,那么就是存储0x0101;这是怎么存储的呢?存储一个0x01,下一个地址再存贮一个0x01;0x01是255以内的吧?那么你把这两个0x01存储正确了,那么257不就是正确的了吗?现在是你说不正确,那你就得看看:1,有没有把两个0x01正确的写入EEPROM,2,有没有正确读出这两个0x01;3,读出的两个0x01组合成一个数,是不是组合正确了。
追问我用sum表示脉冲数,sum*11/6250 为什么存不上啊,如果只是sum 就能存上。或者用sum*11/100也能存上,只要除一个数大于1就能存储,小于1就无法储存。这是为什么啊,您能说几个可能的原因么, 我实在是想不明白了。下面是我的显示程序
print2(0x40,sum/1000+0x30);
print2(0x41,(sum%1000)/100+0x30);//
print2(0x42,(sum%100)/10+0x30);//
print2(0x43,sum%10+0x30);//
sum*11/6250不是存不上,而是这个数值是0!,你试着先把这个数重新赋值给一个变量,然后存储这个变量。eeprom是不存储小数的,你只能把小数转换成8bit(有的是12bit)的数据,比如你要寸12.56,你可以先村12,再存56,以后读出来再处理成12.56.我发现你调程序只注意看看结果是否正确。其实你应该学会一步步分析数据错误原因:无非是,数据计算结果错误,写数据错误,读数据错误,读出数据处理错误。慢慢分析,查出原因。
大虾们 Iemplore.exe-应用程序错误 是怎么回事该怎办?
散一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。1、微软IE缓冲溢出漏洞引起2、内存或虚拟内存地址使用冲突造成程序的运行需要分配一定的内存地址给程序使用,当程序结束时释放留出空间让给新的程序使用,win是多任务的系统有时前程序未结束又有新的任务开始到底要多少内存或虚拟...
我的隐藏分区出问题了,希望大虾们给我解决。
盘格式化把格式改了,当然就出来喽
哪位大虾知道影响开机速度的原因有什么
随机启动程序就是在开机时加载的程序。随机启动程序不但拖慢开机时的速度,而且更快地消耗计算机资源以及内存,一般来说,如果想删除随机启动程序,可去“启动”清单中删除,但如果想详细些,例如是qq、popkiller 之类的软件,是不能在“启动”清单中删除的,要去“附属应用程序”,然后去“系统工具”,再去“系统信息”,进...
求助电脑大虾们啊?开机进系统的时候就会出现应用程序错误!!
软件方面就是程序冲突,内存被分配为一个个地址,这个地址用到的时候软件冲突导致内存写不进,就会出 现这种情况。如果你最近装了什么新软件 谢了试试,还有可能是系统有问题了,硬件方面那就是内存有问题了,这个地址在内存里是坏的不能存取,当你用到它的时候系统就报错了,解决方法一般都是先软后...
如何解决我的电脑内存变小的问题?
要设定虚拟内存,在“我的电脑”上按右键选择“属性”,在“高级”选项里的“效能”的对话框中,对“虚拟内存”进行设置。 3、检查应用软件或者驱动程序 有些程序在电脑系统启动会时使系统变慢。如果要是否是这方面的原因,我们可以从“安全模式”启动。因为这是原始启动,“安全模式”运行的要比正常运行时要慢。但是...
笔记本开机会弹出错误,请大虾们进来看看帮帮啊
二、应用程序由于自身BUG引用了不正常的内存指针 在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被...
这算把我搞糊涂,请大虾们回答一下,我电脑无线连接的时候出现适配器或网...
网卡驱动卸载了再重新安装下吧...
大虾们,偶出很多分,帮帮偶的忙
真正的0地址内存区储存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即当机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会...
上网易的时候出现问题,问一下大虾们.(急)
运行 输入cmd 回车在命令提示符下输入 for %1 in (%windir%\\system32\\*.dll) do regsvr32.exe \/s %1 该命令的意思是,把系统所有的dll文件重新注册一便,执行钱请关闭所有应用程序,以免造成系统假死。
主板bios问题
内存模块上的EEPROM (只读存储器) 储存有关模块的重要参数信息,例如内存类型、巨细、速度、电压接口及模块储存区域。 2.CAS Latency Time: 这个项目可节制DRAM读取指令与数据成为真正可用的时间之间的推迟时间。较低的CAS周期能减少内存的潜伏周期以提高内存的事情效率。因此只要可以容或不变运行操作体系,我们应当尽量...