1、x,y;for(x=112;x0;x-)for(y=z;yy-);init_232(void)/串口初始化SCON0x50;TMOD|=0x20;TH10xfa;/波特率9600TL1PCON0x80;EA1;ESTR1send_char(ucharw)/串口发送一个字符SBUFw;while(TI=0);TIsend_string(uchar*s,uintstring_length)/串口发送一个字符串idosend_char(*(s+i);i+;while(istring_length);/*EEPROM字符读取*/eeprom_read(ucharx,y)ISP_ADDRHx;ISP_A
2、DDRLy;ISP_CONTR0x9b;ISP_CMD0x01;ISP_TRIG0x46;0xb9;_nop_();ISP_CONTR=0;ISP_CMD=0;ISP_TRIG=0;return(ISP_DATA);/*EEPROM字符写入*/eeprom_write(ucharx,y,z)ISP_DATAz;0x02;/*EEPROM扇区擦除*/eeprom_erase(uchar0x03;main()init_232();0;delay(10);while(1)if(p120)&(i0)eeprom_erase(0x10,0x00);/擦除第一扇区delay(1);eeprom_write
3、(0x10,0x00,0x88);/在第一扇区写入88/*串口接收中断函数*/RS232()interrupt4chif(RI)SBUF;RIsend_char(ch);switch(ch)case1:send_char(eeprom_read(0x10,0x00);/串口助手输入16进制1,读EEPROM第一扇区break;2:send_char(eeprom_read(0x12,0x00);/串口助手输入16进制2,读EEPROM第2扇区3:eeprom_write(0x10,0x00,0x55);/串口助手输入16进制3,写EEPROM第一扇区554:eeprom_write(0x12,
4、0x00,0x66);/串口助手输入16进制4,写EEPROM第2扇区665:/串口助手输入16进制5,擦除EEPROM第一扇区6:eeprom_erase(0x12,0x00);/串口助手输入16进制6,擦除EEPROM第2扇区default:这是一段stc单片机EEPROM掉电存储程序,麻烦大家帮我看看哈,怎么调用时输出有问题啊,希望给个调用的例子悬赏分:0 - 提问时间2010-8-21 19:32 #include absacc.h intrins.h #include .h_fileseeprom.h /*/void isp_iap_enable ( void ) EA = 0 ;
5、/*关中断*/ ISP_CONTR = ISP_CONTR & 0x18 ; ISP_CONTR = ISP_CONTR | WAIT_TIME ; ISP_CONTR = ISP_CONTR | 0x80 ; /*ISPEN = 1*/void isp_iap_disable ( void ) 0x7f ; /*ISPEN = 0*/ ISP_TRIG = 0x00 ; EA = 1 ; /*开中断*/void isp_iap_goon ( void ) isp_iap_enable ( ) ; /*打开ISP,IAP功能*/ ISP_TRIG = 0x46 ; /*触发ISP,IAP命令字
6、节1*/ ISP_TRIG = 0xb9 ; /*触发ISP,IAP命令字节2*/ _nop_ ( ) ; UINT8 byte_read ( UINT16 byte_addr ) ISP_ADDRH = ( UINT8 ) ( byte_addr 8 ) ; /*地址赋值*/ ISP_ADDRL = ( UINT8 ) ( byte_addr & 0x00ff ) ; ISP_COMD = ISP_COMD & 0xf8 ; /*清除低3位*/ ISP_COMD = ISP_COMD | RE_COMMAND ; /*写入读命令*/ isp_iap_goon ( ) ; /*触发执行*/ i
7、sp_iap_disable ( ) ; /*关闭ISP,IAP功能*/ return ( ISP_DATA ) ; /*返回读到的数据*/void sector_erase ( UINT16 sector_addr ) UINT16 i_sector_addr ; i_sector_addr = ( sector_addr & 0xfe00 ) ; /*取扇区地址*/ ISP_ADDRH = ( UINT8 ) ( i_sector_addr ISP_ADDRL = 0x00 ; /*清空低3位*/ ISP_COMD = ISP_COMD | ER_COMMAND ; /*擦除命令3*/vo
8、id byte_write ( UINT16 byte_addr , UINT8 original_data ) /*取地址*/ ISP_COMD = ISP_COMD | PR_COMMAND ; /*写命令2*/ ISP_DATA = original_data ; /*写入数据准备*/ 提问者: smu_east - 一级网友推荐答案/*/reg52.hstdio.hstring.h#define Uchar unsigned char#define Uint unsigned int#define Ulong unsigned long/定义Flash 操作等待时间及允许IAP/ISP
9、/EEPROM 操作的常数#define ENABLE_ISP 0x83 /系统工作时钟12MHz 时,对IAP_CONTR 寄存器设置此值sfr IAP_DATA = 0xE2;sfr IAP_ADDRH = 0xE3;sfr IAP_ADDRL = 0xE4;sfr IAP_CMD = 0xE5;sfr IAP_TRIG = 0xE6;sfr IAP_CONTR = 0xE7;/全局变量及共用体变量Uchar buff8;Uchar buff18=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;union union_temp16 Uint un_temp1
10、6;Uchar un_temp82;my_unTemp16;/定义共用体,给存储eeprom使用/函数声明区void Read_8byte(Uchar *buf,Uint add,Uchar bitt); /读多个字节,调用前需打开IAP 功能void Program_8byte(Uchar *buf,Uint add,Uchar bitt);/写多个字节,调用前需打开IAP 功能void Sector_Erase(Uint add); /擦除扇区void IAP_Disable(); /关闭IAP 功能void Delay(); /延时函数void mcu_ini(void);/mcu初始化
11、函数/主函数区void main (void) Uchar i; P1 = 0xF0; /演示程序开始,让 P13:0 控制的灯亮 Delay(); /延时 P1 = 0x0F; /演示程序开始,让 P17:4 控制的灯亮 Delay() ; Sector_Erase(0x4000); /擦除整个扇区 Program_8byte(buff1,0x4000,8); P2 = 0x55;/P2.7亮 Read_8byte(buff,0x4000,8); while (1)/CPU 在此无限循环执行此句 P0 = buffi; /延时 i+; if(i=8)i=0;P2 = 0xff;Delay()
12、; /*/读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节Uchar Byte_Read(Uint add) IAP_DATA = 0x00; IAP_CONTR = ENABLE_ISP; /打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x01; /IAP/ISP/EEPROM 字节读命令 my_unTemp16.un_temp16 = add; IAP_ADDRH = my_unTemp16.un_temp80; /设置目标单元地址的高8 位地址 IAP_ADDRL = my_unTemp16.un_temp81; /设置目
13、标单元地址的低8 位地址 /EA = 0; IAP_TRIG = 0x46; /先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; /送完A5h 后,ISP/IAP 命令立即被触发起动 _nop_(); /EA = 1; return (IAP_DATA);/读多个字节,调用前需打开IAP 功能,入口:void Read_8byte(Uchar *buf,Uint add,Uchar bitt) Uchar i; for (i=0;ibitt;i+) bufi= Byte_Read(add+i); IAP_Disable(); /关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, /一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关/字节编程,调用前需打开IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据void Byte_Program(Uint add, Uchar ch) /打开 IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x02; /IAP/ISP/EEPROM 字节编程命令 IAP_DATA = ch; /要编程的数据先送进IAP_DATA 寄存器
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1