疑问:本人做的一个项目中,用到stc89le58rd+单片机,在对eeprom的读写过程中,有串口上的中断,读写完后单片机就工作异常 本人的eeprom的驱动是参考《stc89c51rc/rd+系列单片机手册》中36-43页,而且咨询过宏晶的技术支援,回馈为这手册适用于stc89le58rd+。 驱动如下: void read_eeprom(unsigned int dst,unsigned char * temp) { isp_addrh=((dst & 0xFFFF) >> 8); isp_addrl=((dst & 0xFF) ); ENTER_CRITICAL();//EA=0;// isp_contr=wait_time; isp_contr=(isp_contr|(0x80)); isp_cmd=isp_iap_byte_read; isp_trig=0x46; isp_trig=0xb9; _nop_(); _nop_(); *temp=isp_data; isp_contr=0x00; isp_cmd=0x00; // isp_trig=0x00; isp_addrh=0x00; // isp_addrl=0x00; // EXIT_CRITICAL();//EA=1;// }
void write_eeprom(unsigned int dst,unsigned char ch) { isp_data=ch; isp_addrh=((dst & 0xFFFF) >> 8); isp_addrl=((dst & 0xFF) ); ENTER_CRITICAL();//EA=0;// isp_contr=wait_time; isp_contr=(isp_contr|(0x80)); isp_cmd=isp_iap_byte_program; isp_trig=0x46; isp_trig=0xb9; _nop_(); _nop_(); isp_contr=0x00; isp_cmd=0x00; // isp_trig=0x00; isp_addrh=0x00; // isp_addrl=0x00; // EXIT_CRITICAL();//EA=1;// }
void earase_eeprom(unsigned int dst) { isp_addrh=((dst & 0xFFFF) >> 8); isp_addrl=((dst & 0xFF) ); ENTER_CRITICAL();//EA=0;// isp_contr=wait_time; isp_contr=(isp_contr|(0x80)); isp_cmd=isp_iap_sector_erase; isp_trig=0x46; isp_trig=0xb9; _nop_(); _nop_(); isp_contr=0x00; isp_cmd=0x00; // isp_trig=0x00; isp_addrh=0x00; // isp_addrl=0x00; // EXIT_CRITICAL();//EA=1;// } 因为项目有外部显示,读写完后会在液晶上有所显示,所以现象比较直观,一般为死机,或者读错程序flash中的表格(表格是一系列区分的字符串,如因读取menu的地方,会读出setup)。庆祝位高手给些建议,在下实在是急。 |