单片机STC89C52如何读写双字节
答案:3 悬赏:10 手机版
解决时间 2021-03-04 15:34
- 提问者网友:原来太熟悉了会陌生
- 2021-03-04 03:55
单片机STC89C52如何读写双字节
最佳答案
- 五星知识达人网友:污到你湿
- 2021-03-04 04:54
ISP_CONTR=0x83;
确定你的单片机运行频率低于5MHz?
在12MHz下最好选择<20MHZ 0x81
//#define ENABLE_IAP 0x80 //if SYSCLK<40MHz
#define ENABLE_IAP 0x81 //if SYSCLK<20MHz
//#define ENABLE_IAP x82 //if SYSCLK<10MHz
//#define ENABLE_IAP 0x83 //if SYSCLK<5MHz
我用的是IAP15F2k61s2 33.1776MHz没用延时读写都正常
void IapProgramByte(WORD addr, BYTE dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_PROGRAM; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写ISP/IAP/EEPROM数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}追问我的单片机频率是11.0592MHz 看的资料小于12M的用0x83延时啊
我也试过用0x81延时 也不行哎,,,程序有其他方面问题么,已经困扰好久了 麻烦帮忙看下追答试一下下面这段程序(STC官方的EEPROM读写例程)
P1输出0xF0代表读写成功
P1输出0x7F代表读写失败
确定你的单片机运行频率低于5MHz?
在12MHz下最好选择<20MHZ 0x81
//#define ENABLE_IAP 0x80 //if SYSCLK<40MHz
#define ENABLE_IAP 0x81 //if SYSCLK<20MHz
//#define ENABLE_IAP x82 //if SYSCLK<10MHz
//#define ENABLE_IAP 0x83 //if SYSCLK<5MHz
我用的是IAP15F2k61s2 33.1776MHz没用延时读写都正常
void IapProgramByte(WORD addr, BYTE dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_PROGRAM; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写ISP/IAP/EEPROM数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}追问我的单片机频率是11.0592MHz 看的资料小于12M的用0x83延时啊
我也试过用0x81延时 也不行哎,,,程序有其他方面问题么,已经困扰好久了 麻烦帮忙看下追答试一下下面这段程序(STC官方的EEPROM读写例程)
P1输出0xF0代表读写成功
P1输出0x7F代表读写失败
全部回答
- 1楼网友:琴狂剑也妄
- 2021-03-04 07:44
在一个扇区的 ,要先擦出扇区再写进去,不然是写不进去的追问这个我知道的,但是写双字节或者多个数据的时候,肯定得一个一个写啊,如果写一个擦一个,那不是只能写一个了
- 2楼网友:孤独的牧羊人
- 2021-03-04 06:26
缺少延时, 需要在byte_program函数的
ISP_DATA=num;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
后面增加一个判断,是否数据写入EPPROM完成
如果没有完成继续等待,直到数据写入成功追问这个过程该怎么判断呢,存储完成好像没有一个标志位或者中断什么的可供查询。而且ISP_CONTR这个寄存器低三位是等待时间控制位,这个时间设置好后单片机是根据这个判断读写是否完成的么,换句话说 是不是在设置的这个等待时间内,数据一定可以被读写完成,然后CPU再去执行其他函数?小弟初学的 谢谢解答
ISP_DATA=num;
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
后面增加一个判断,是否数据写入EPPROM完成
如果没有完成继续等待,直到数据写入成功追问这个过程该怎么判断呢,存储完成好像没有一个标志位或者中断什么的可供查询。而且ISP_CONTR这个寄存器低三位是等待时间控制位,这个时间设置好后单片机是根据这个判断读写是否完成的么,换句话说 是不是在设置的这个等待时间内,数据一定可以被读写完成,然后CPU再去执行其他函数?小弟初学的 谢谢解答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯