永发信息网

单片机内部E2PROM ISP-IAP 技术应用 中 郭天祥 ISP程序中ISP_ADDRL=(unsigned char)(byte_addr&0 怎么理解

答案:3  悬赏:60  手机版
解决时间 2021-03-05 10:25
字节读中:
ISP_ADDRH=(unsigned char)(byte_addr&>>8);

ISP_ADDRL=(unsigned char)(byte_addr&0x00ff);

这两句哪位详细解释一下啊 小弟实在不懂为什么??? 里面>>8 是固定的将地址弄到高八位吗?下面 为什么要与上“&0x00ff"???

扇区擦除中 取扇区地址:
void SectorErase(unsigned int sector_addr)
{
unsigned int iSectorAddr;
iSectorAddr=sector_addr&0xfe00; //取扇区地址
ISP_ADDRH=(unsigned char)(iSectorAddr>>8);
ISP_ADDRL=0x00;
ISP_CMD=ISP_CMD&0xf8;
ISP_CMD=ISP_CMD|EraseCommand;
ISPgoon();
ISP_IAP_disable();
}
里面: iSectorAddr=sector_addr&0xfe00; //取扇区地址
怎么理解???
哪位大神 帮帮忙吧,小弟感激不尽哦!!!
最佳答案
ISP_ADDRH=(unsigned char)(byte_addr&>>8);
ISP_ADDRL=(unsigned char)(byte_addr&0x00ff);
其中 byte_addr是一个16位地址,他的数据类型是 unsigned int;
ISP_ADDRH和 ISP_ADDRL 是8位的,他们的数据类型是 unsigned char;

byte_addr&>>8: 将 16位的byte_addr的高8位取出放在一个8位的ISP_ADDRH变量中
左移8 位就是高8位变为0x00, 低8 位变成原来的高8位。

byte_addr&0x00ff: 将 16位的byte_addr的低8位取出放在一个8位的ISP_ADDRL变量中

与0x00ff相与表示舍弃高8位,只要低8位。

iSectorAddr=sector_addr&0xfe00; //取扇区地址

这条语句中的0xfe00 应该与你所用单片机的扇区地址定义有关,你查下Datasheet 就知道了。

希望能帮到你。
全部回答
没看明白
简单的stc的eeprom的子程序 我发一个我用的给你 #include "EEPROM.h" #define offset 0x00 //定义存储地址偏移量 void Dis_ISP(void) { ISP_CONTR=0x00; ISP_CMD =0x00; ISP_TRIG =0x00; ISP_ADDRH=0x00; ISP_ADDRL=0x00; } unsigned char ISP_read(unsigned int addr) { ISP_ADDRH=offset+addr/256; ISP_ADDRL=addr%256; // EA=0; ISP_CONTR=0x80; //设置等待时间;40M以下0,20M以下1,10M以下2,5M以下3 ISP_CMD=0x01; //read cmd ISP_TRIG=0x5a; ISP_TRIG=0xa5; _nop_(); if ((ISP_CONTR&0x10)==0x10){ISP_CONTR&=0xef;} // EA=1; Dis_ISP(); return ISP_DATA; } void ISP_write(unsigned int addr,unsigned char Content) { ISP_DATA=Content; ISP_ADDRH=offset+addr/256; ISP_ADDRL=addr%256; // EA=0; ISP_CONTR=0x80; //设置等待时间 ISP_CMD=0x02; //write cmd ISP_TRIG=0x5a; ISP_TRIG=0xa5; _nop_(); if ((ISP_CONTR&0x10)==0x10){ISP_CONTR&=0xef;} // EA=1; Dis_ISP(); } void ISP_erase(unsigned char sectorIndex) { ISP_ADDRH=offset+sectorIndex*2; ISP_ADDRL=0x00; // EA=0; ISP_CONTR=0x80; //设置等待时间 ISP_CMD=0x03; //erase cmd ISP_TRIG=0x5a; ISP_TRIG=0xa5; _nop_(); if ((ISP_CONTR&0x10)==0x10){ISP_CONTR&=0xef;} // EA=1; Dis_ISP(); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎么龙珠超漫画才出那么几集?
妈妈的舅舅的儿子的老婆叫什么
鹿游记地址有知道的么?有点事想过去
[wɪŋ]这个音标的单词是什么
新版大众点评怎么签到
为满足项目管理工作的要求,对建设项目信息可
单选题下列元素的单质中,最易跟氢气反应生成
同安区梧侣文体活动中心图书馆地址有知道的么
在淘宝上买三轮摩托车靠谱吗
DNF70瞎子弄什么装备武器好
农民制合同工为什么不能享受特殊工提前退休待
大鹏珠宝七里港老店地址有知道的么?有点事想
承包方提出的索赔事件的成立条件是()。A.事件
沙河网批是什么
CDR里面怎么做“可变数据”
推荐资讯
两家墙上开个门好吗?
单选题 Iadmitth
【济南银座商城】济南银座商城共几楼?商业面
正常人尿中可出现什么管型
山沟里的太阳挤着晒歌曲是什么?
同一平面内三个共点力作用于一个物体上,下面
赵家当铺我想知道这个在什么地方
我要去新多集团面试,请问这个公司怎么样啊?
出口消费税应退税额的计算,求助
梦见我跟同事都被辞退
三星Sm-p355y多少钱
不要轻言放弃,否则对不起自己 英语怎么说
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?