您现在所在的是:

单片机论坛

回帖:2个,阅读:711 [上一页] [1] [下一页]
700
雅沐
文章数:9
年度积分:50
历史总积分:700
注册时间:2010/2/23
发站内信
发表于:2010/5/28 16:13:21
#0楼
程序如下。仿真芯片坏了,调试起来很难,我盯着看了半天找不到原因。
我把93C46连接为储存16位数据模式,程序按照16位来编写。
要实现的功能是,把0xF00F储存到EEPROM中,再读取出来。
情况是这样的:ReDataH得不到我储存进去的值,LED显示出依然是P1=0。
麻烦各位帮我看看我的程序。
另外根据我的理解,1KB的EEPROM储存16位数据的地址为十进制的0~63。程序中我使用了25。这个理解正确吗?



#include<reg51.h>
#include<intrins.h>
sbit CS=P0^3;
sbit SK=P0^2;
sbit DI=P0^0;
sbit DO=P0^1;

//写允许、写禁止、擦除全部、写满存储区等指令的操作步骤
//address=100aaXXX X(aa=11 写允许 aa=00 写禁止 aa=10 擦除全部 aa=01 写满存储区)
void SysCommand(uchar address)
{
uchar temp;

CS=1;
for(temp=0;temp<=8;temp++) //打入9位地址,最低位任意
{
DI=address & 0x80;
SK=1; SK=0;
address<<=1;
}
CS=0;
}

//写允许
void EWEN()
{
SysCommand(0x98);
}

//写禁止
void EWDS()
{
SysCommand(0x80);
}

//擦除全部
void ERAL()
{
SysCommand(0x90);
}

//写满存储区
void WRAL()
{
SysCommand(0x88);
}

//写数据
//address=0~0x3f,Indata(H/L) 写入的数据高8位和低8位
void WRITE(uint address,uint IndataH,uint IndataL)
{
uint temp;

EWEN(); //写允许
address=address&0x7f; //使address=01XXXXXX
CS=1;
DI=1; //打入开始位1
SK=1;SK=0;
for(temp=0;temp<=7;temp++) //打入地址
{
DI=address & 0x80;
SK=1; SK=0;
address<<=1;
}

for(temp=0;temp<=7;temp++) //写入高8位
{
DI=IndataH & 0x80;
SK=1; SK=0;
IndataH<<=1;
}

for(temp=0;temp<=7;temp++) //写入低8位
{
DI=IndataL & 0x80;
SK=1; SK=0;
IndataL<<=1;
}

CS=0;
_nop_();_nop_();_nop_();_nop_();
CS=1;
while(!DO); //判忙
CS=0;
EWDS(); //写禁止
}

//读数据
//address=0~0x3f,Redata(H/L) 储存读出数据高8位和低8位的变量地址
void READ(uint address,uint *ReDataH,uint *ReDataL)
{
uint temp;

ReDataH=0;ReDataL=0;

address&=0xbf; //使address=10XXXXXX
CS=1;
DI=1; //打入开始位1
SK=1;SK=0;
for(temp=0;temp<=7;temp++) //打入地址
{
DI=address & 0x80;
SK=1; SK=0;
address<<=1;
}

DO=1;

for(temp=0;temp<=7;temp++) //打入地址
{
SK=1; SK=0;
*ReDataH|=DO;
*ReDataH<<=1;
}

for(temp=0;temp<=7;temp++) //打入地址
{
SK=1; SK=0;
*ReDataL|=DO;
*ReDataL<<=1;
}
CS=0;
}

/////////////////////////////////
//  主函数           //
/////////////////////////////////
main()
{
uint ReDataH;
uint ReDataL;

ReDataH=0;
ReDataL=0;

WRITE(20,0xf0,0x0f);
READ(&ReDataH,&ReDataL);
P1=ReDataH;

}
1012
a89982715
文章数:42
年度积分:50
历史总积分:1012
注册时间:2007/5/20
发站内信
发表于:2010/6/18 15:07:53
#1楼
你读数据的时候错了    你从最高位读进来  在左移  数据多久没有了  在看看
看懂的要反复的看,看不懂的要硬着头皮看
700
zhixin365net
文章数:2
年度积分:50
历史总积分:700
注册时间:2010/6/27
发站内信
发表于:2010/6/28 19:47:12
#2楼
此楼内容不符合板块规定,不予显示! 查看原帖内容>>

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004