I am trying to interface Flash AT29C512 with AT89C51 How do read and write serially between the 8 bit 8051 and 24 bit Flash,
Kindly help if some one has worked on this.
sir, have tried at this just not getting data on hyperterminal though it is being transmitted from 8051, displeyed thru port-1 also,
this is the code which i used:
#include<reg51.h> #include<stdio.h> Rx(); Tx(); void main (void){ TMOD = 0x20; TH1 = -3; // 9600 baud, SMOD = 0; SCON = 0x50; // 8 bit, 1 stop, REN-1 TR1 = 1; TI = 0; Rx(); } Rx(){ while (1){ //(RI=1){ ACC = 0000; ACC = SBUF; P1 = ACC; Tx(); RI = 0; Rx(); } } Tx(){ // ACC = (ACC + 48); SBUF = ACC; while(TI){ TI = 0; } }
just not getting data on hyperterminal
which transciever (e.g. MAX232) do you use and what is the supply voltage for it?
Erik
You should not be writing direct to ACC in 'C'!!
Your Rx() function calls itself in an infinite loop!
Throw this code away, and start with the "Hello World" sample. Then build on that...
Ya using MAX232 Actually, the terminal works fine with assembly program In the above program, Rx() also works. There is some problem with this 'Tx()' function could somebody Please help me out what is that fine change to be done
Sorry, Rx() was not being called recursively, that line was supposed to be commented Sorry for that To call recursively, I believe it should be declared as "reentrant"
Why should we write to ACC directly in 'C'? then how do we write to ACC?
Why should we notwrite to ACC directly in 'C'? because you do not need to then how do we write to ACC? you do not need to and, if you do, you are virtually guaranteed to make the code fail.
ACC = (ACC + 48); SBUF = ACC; should be U8 Ralph; .... Ralph += 48; SBUF = Ralph
"Why should we not write to ACC directly in 'C'?"
You should not do it in any high-level language!
Because, when you use a high-level language (eg, 'C'), you delegate control of the low-level CPU registers to the compiler.
See: http://www.keil.com/forum/docs/thread8360.asp
"To call recursively, I believe it should be declared as 'reentrant'"
Even that won't help you if you call it recursively in an infinite loop!
I still recomend that you start with the "Hello World" sample.
The whole process of creating, building, and running the "Hello World" sample is explained in the Getting Started Guide. You should read and follow this - it will give you a proper introductions to the tools, how they work, and how to use them - rather than just jumping-in blindly at the deep-end!
http://www.keil.com/support/man/docs/uv3/uv3_creating_apps.htm
Then how come Rx() function works, and could you tell me why do we add 48?
I mean, to be called recursively it ought to be declared as reentrant, else no difference na
try checking status of ti and ri before getting into loop
Just following your advice, Hello World Hope am not testing your patience Sir, kindly explain this, In the program, Rx() where we write to ACC works, but Tx() where we read from ACC does not work,
ACC is defined in REG51.h, then should not we write to ACC?
Thanks for all the help That little devil was in the while loop Tx(){ SBUF = ACC; while(TI){} TI = 0 }
Surely learnt a lot hunting it down, Thanks again