
STC 内部 EEPROM 读写时间
由于业余爱好的关系,我没有学汇编,直接学C51所以对于指令执行时间方面不清楚。希望问一下一般情况,STC内部EEPROM读写时间最好提供:典型值和最大值sfrisp_da...
由于业余爱好的关系,我没有学汇编,直接学C51
所以对于指令执行时间方面不清楚。
希望问一下一般情况,STC 内部 EEPROM 读写时间
最好提供:典型值 和 最大值
sfr isp_data = 0xe2;
sfr isp_addrh = 0xe3;
sfr isp_addrl = 0xe4;
sfr isp_cmd = 0xe5;
sfr isp_trig = 0xe6;
sfr isp_contr = 0xe7;
/*=========================存储读取======================*/
//State=1 存储数据;为0则读取数据并返回;
void Isp_Write_Read(bit State,uint8 Value1,uint16 Value2)
{
if(State==1)
{
e2_erasure(0x8000);
e2_write(0x8000,Value1);
e2_write(0x8001, Value2/0x100);
e2_write(0x8002, Value2%0x100); //写十六进制数据进EEPROM内部;
}
else
{
E_QJ= e2_read(0x8000);
E_Address=e2_read(0x8001);
E_Address=(E_Address<<=8)|e2_read(0x8002);
}
}
/*=========================读数据======================*/
uint8 e2_read(uint16 addres)
{
uint8 i=0;
uint8 z=0;
EA=0;
isp_addrl=addres%0x100; //低位地址
isp_addrh=addres/0x100; //高位地址
isp_contr=0x80; //设时间与充ISP操作。
isp_cmd=0x01; //写命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动。
for(i=0;i<6;i++); //延时
iap_disable(); //关IAP功能
z=isp_data; //把数据送到Z并返回
EA=1;
return(z);
}
/*=========================编程数据=====================*/
void e2_write(uint16 addres,uint8 write_data)//写数据。
{
uint8 i=0;
EA=0;
isp_data=write_data; //要写入的数据。
isp_addrl=addres%0x100; //低位地址
isp_addrh=addres/0x100; //高位地址
isp_contr=0x80; //设时间与充ISP操作
isp_cmd=0x02; //写命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动
for(i=0;i<6;i++); //延时
EA=1;
iap_disable(); //关IAP功能
}
/*=========================擦除扇区======================*/
void e2_erasure (uint16 addres) //扇区擦除。
{
EA=0;
isp_addrl=addres%0x100; //低位地址
isp_addrh=addres/0x100; //高位地址
isp_contr=0x80; //设时间与充ISP操作。
isp_cmd=0x03; //扇区命命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动。
iap_disable(); //关IAP功能
EA=1;
}
/*========================关闭IAP功能====================*/
void iap_disable()
{
isp_contr=0x00; //关IAP功能
isp_cmd =0x00; //清寄存器
isp_trig =0x00; //清触发器
isp_addrh=0x00;
isp_addrl=0x00;
}
只要给出多少个周期就行了
(除过12分频后的周期)
好像还不太清楚,就是用12M晶振,内部1M对应的周期
我想知道的是大概要多少个周期,不管指令集(确切的说我就没学过指令集,业余爱好当然以用为主了)
抱歉,由于业余爱好,我没学过仿真。 展开
所以对于指令执行时间方面不清楚。
希望问一下一般情况,STC 内部 EEPROM 读写时间
最好提供:典型值 和 最大值
sfr isp_data = 0xe2;
sfr isp_addrh = 0xe3;
sfr isp_addrl = 0xe4;
sfr isp_cmd = 0xe5;
sfr isp_trig = 0xe6;
sfr isp_contr = 0xe7;
/*=========================存储读取======================*/
//State=1 存储数据;为0则读取数据并返回;
void Isp_Write_Read(bit State,uint8 Value1,uint16 Value2)
{
if(State==1)
{
e2_erasure(0x8000);
e2_write(0x8000,Value1);
e2_write(0x8001, Value2/0x100);
e2_write(0x8002, Value2%0x100); //写十六进制数据进EEPROM内部;
}
else
{
E_QJ= e2_read(0x8000);
E_Address=e2_read(0x8001);
E_Address=(E_Address<<=8)|e2_read(0x8002);
}
}
/*=========================读数据======================*/
uint8 e2_read(uint16 addres)
{
uint8 i=0;
uint8 z=0;
EA=0;
isp_addrl=addres%0x100; //低位地址
isp_addrh=addres/0x100; //高位地址
isp_contr=0x80; //设时间与充ISP操作。
isp_cmd=0x01; //写命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动。
for(i=0;i<6;i++); //延时
iap_disable(); //关IAP功能
z=isp_data; //把数据送到Z并返回
EA=1;
return(z);
}
/*=========================编程数据=====================*/
void e2_write(uint16 addres,uint8 write_data)//写数据。
{
uint8 i=0;
EA=0;
isp_data=write_data; //要写入的数据。
isp_addrl=addres%0x100; //低位地址
isp_addrh=addres/0x100; //高位地址
isp_contr=0x80; //设时间与充ISP操作
isp_cmd=0x02; //写命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动
for(i=0;i<6;i++); //延时
EA=1;
iap_disable(); //关IAP功能
}
/*=========================擦除扇区======================*/
void e2_erasure (uint16 addres) //扇区擦除。
{
EA=0;
isp_addrl=addres%0x100; //低位地址
isp_addrh=addres/0x100; //高位地址
isp_contr=0x80; //设时间与充ISP操作。
isp_cmd=0x03; //扇区命命令
isp_trig=0x46; //触发
isp_trig=0xb9; //触发启动。
iap_disable(); //关IAP功能
EA=1;
}
/*========================关闭IAP功能====================*/
void iap_disable()
{
isp_contr=0x00; //关IAP功能
isp_cmd =0x00; //清寄存器
isp_trig =0x00; //清触发器
isp_addrh=0x00;
isp_addrl=0x00;
}
只要给出多少个周期就行了
(除过12分频后的周期)
好像还不太清楚,就是用12M晶振,内部1M对应的周期
我想知道的是大概要多少个周期,不管指令集(确切的说我就没学过指令集,业余爱好当然以用为主了)
抱歉,由于业余爱好,我没学过仿真。 展开
2个回答
展开全部
我来闲聊一句~宏晶的51内核微控制器采用精简指令集,时钟跟8051不同,当然为了向上兼容,也可以设置成传统8051的12分频模式,具体请查阅宏晶的相关数据手册。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询