帮助-从内存中读取数据(AT89C51单片机和AT93C46)

M

Maverickmax

Guest
喂如果我不是我的代码是正确的
, 从内存中读取数据。我重视一个读时序图。任何帮助
, 将会大大appreicated。(注意:我使用AT895C1写/读与AT92C46)

这是我的代码:代码:无效read_command(无符号字符地址)



无符号字符ñ,我,钾,nbit,米,长= 0;政务司司长= 1;/ /发送1次

为(= 1,我“= 2;一 )



依据DIN = 1;

send_clock();

)依据DIN = 0;

send_clock();ñ =地址;为(金= 1;亩“= 8;钾 )



nbit =的n&0x80;

如果(nbit!= 0)

依据DIN = 1;

其他的

依据DIN = 0;

send_clock();

nbit = nbit“”1;

)金(m = 0;米“= 8;米 )



Ḏ=开发| DOUT;

Ḏ“”1;

send_clock();

)政务司司长= 0;



 
我的代码是正确或错误的?请让我知道尽快

亲切的问候

小牛最大

 
您好小牛最大

你说
代码:

为(金= 1;亩“= 8;钾 )



nbit =的n&0x80;

如果(nbit!= 0)

依据DIN = 1;

其他的

依据DIN = 0;

send_clock();

nbit = nbit“”1;


 
贝卢斯科尼说:

您好小牛最大你说代码:

为(金= 1;亩“= 8;钾 )



nbit =的n&0x80;

如果(nbit!= 0)

依据DIN = 1;

其他的

依据DIN = 0;

send_clock();

nbit = nbit“”1;


 
Maverickmax说:对于您的最后一个问题,你说,DOUT产生逻辑0或1时,串行时钟高电平在同一时间?
你insinuateing,我的代码的最后一部分可能是错误的?

 
您好Silivo

send_clock()会是什么样子:

代码:无效send_clock()



PULSE_CLOCK = 1;

PULSE_CLOCK = 0;



 
这是我更新软件.....

谁曾经点我的错误,将被捐赠的高达20分!

代码:/ /头文件

#包括“main.h”

#包括“port.h”

#包括“delay_loop.h”/ /全局变量
/ /函数原型无效write_command(无符号字符数据);

无效read_command(无符号字符地址);无效send_clock();

无效的过程(无符号字符字节);

无效EW_enable();

无效EW_disable();

/ /无效Erase_command();无效send_clock()



PULSE_CLOCK = 1;

PULSE_CLOCK = 0;

)无效的过程(无符号字符字节)



无符号字符亩,nbit;为(金= 1;亩“= 8;钾 )(

nbit =字节&0x80;

如果(nbit!= 0)

依据DIN = 1;

其他的

依据DIN = 0;

send_clock();

字节=字节“”1;



)无效read_command(无符号字符地址)



无符号的字符我米,直径= 0,循环= 8;政务司司长= 1;/ /发送2 1秒(人体模型数据)

为(= 1,我“= 2;一 )



依据DIN = 1;

send_clock();

)进程(地址);金(m = 0;米“= 8;米 )



Ḏ=开发| DOUT;

send_clock();如果(循环!= 0)



Ḏ=Ḏ“”1;



循环- ;

)政务司司长= 0;

政务司司长= 1;

政务司司长= 0;小=Ḏ; / /发送结果,小(发光二极管))无效write_command(无符号字符数据)



无符号字符const位置= 0x00;政务司司长= 1;/ /发送1,1,0

依据DIN = 1;

send_clock();

依据DIN = 0;

send_clock();

依据DIN = 1;

send_clock();进程(位置); / /选择地址

进程(数据); / /写数据政务司司长= 0;

政务司司长= 1;

政务司司长= 0;)无效EW_enable()

(政务司司长= 1;

依据DIN = 1;

send_clock();

依据DIN = 0;

send_clock();

进程(0x7F的);

政务司司长= 0;

政务司司长= 1;

)无效EW_disable()



政务司司长= 1;

依据DIN = 1;

send_clock();

依据DIN = 0;

send_clock();

进程(0x30);

政务司司长= 0;

政务司司长= 1;



/ *

无效Erase_command()



政务司司长= 1;

依据DIN = 1;

send_clock();

依据DIN = 1;

send_clock();

依据DIN = 1;

send_clock();

进程(0x00); / /擦除数据的地址0x00

政务司司长= 0;

政务司司长= 1;



* /无效的主要(无效)



廉政商S = 1;而(1)



如果(S == 1)



小= 0;

政务司司长= 0;

依据DIN = 0;

DOUT = 0;

PULSE_CLOCK = 0;EW_enable();

write_command(0xFF);

Delay_Loop(200);

read_command(0x00); / /在地址0x00读取数据

EW_disable();



码- ;

))
 
既然我无法从我的8个发光二极管的任何消息(0xff)来确认存储设备已被读取。因此
, 我以为我的代码可能是错误的
, 但我不能在现阶段肯定。能否请您给我任何意见
, 以消除这个问题呢?

小牛最大

 
您好Maverickmax以下是错误(假设牛津引脚连接到GND):

在DOUT = 1(小三^ 3应该是输入端口,是不是?主回路)
在EW_disable(),过程(0x30)不应进程(0x1F)?

您已经用来发送数据和处理过程中的作用。
但是
, 报告第7位和8位数据。
现在看Erase_command()(我知道也有意见,但是..)
您发送111.0亿(0x700),而不是111000万(0x380)
你不认为这将AT93C46有点困惑关于您的要求?

因此,Erase_command()可能看起来像波纹管:
代码:无效Erase_command()



政务司司长= 1;

依据DIN = 1;

send_clock();

依据DIN = 1;

send_clock();

进程(0x80); / /擦除数据的地址0x00

政务司司长= 0;

政务司司长= 1;



* /

 


告诉我你的意见富有建设性
, 我modifed我的代码
, 我希望这是最后一个比我更好。

希望你同意我的
, 除非你找到更多的经修改的代码错误

代码:/ /头文件

#包括“main.h”

#包括“port.h”

#包括“delay_loop.h”/ /全局变量无符号字符const地址= 0xF0; / / 1111000X

无符号的字符常数数据= 0x55; / /一千
 
您好Maverickmax,

我十分肯定我不是一个好老师(其实这不是我的目标是),但肯定你是一个很好的“学生”
我喜欢的“循环”的功能outdata和Ready参数/忙内部状态功能状态检查介绍。
但是必须认识到
, 我们分50状态功能和Delay_Loop(1000)小延误;之间的写命令
, 并宣读命令还不够
, 如果您计划数的内存位置更新后不久
, 一个又一个。
记住,wryte周期持双程证
, 是典型的3毫秒和10毫秒的最大的写入LSBit开始。
因此
, 我十分肯定
, 经过50我们拖延你永远跨过
代码:如果(德国工业标准= 1)



错误= 1; / /显示错误



 
贝卢斯科尼说:

喜Maverickmax,最好的解决办法是使用一个超时的代码(不要等待超过10毫秒内indata()函数,如果没有准备好国旗出来)
 


当我看到从AT93C46如下所示擦除命令:擦除(擦除):在清除(清除)指令程序在指定的所有位内存位置的逻辑1状态。自定时擦除周期一旦启动擦除指令和地址解码。在DO引脚输出就绪/忙的一部分的地位, 如果CS为高后, 带来了保存了250纳秒的最低低公司(TCS)。阿引脚做逻辑1表示所选内存位置已被删除,而另一部分是指导做好准备。我说得对
, 当删除过程完成后,在DOUT位一切都表明,“1”的国家?

我之所以对这个要求是
, 每次我擦除的数据和读取相同的地址和0xFF是完全相反的我所期望的
, 因为我希望得到
, 而不是为0xFF 0x00。除非我erase_command函数原型的问题!

小牛最大[/一]

 
Maverickmax说:我说得对,当删除过程完成后,在DOUT位一切都表明,“1”的国家?
 

Welcome to EDABoard.com

Sponsor

Back
Top