We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello EveryBody, I am working on LCD (16x2) and i have built some of my ideas about LCD programming but i am using Assembly language for my LCD, well as all things was going sweet so as every programmer is having something wrong ... (in starting) my problem specification is that i am using that LCD in 8-bit mode and i have connected my AT89C2051 (with some pull-ups) P1 DB P3.7 RS P3.5 RW P3.4 E and i have interfaced my LCD with my MCu but my problem is that i am getting the LCD not working ... (i dont know why) .... i have interfaced my LCD but there only little bit of contrast....i mean to say that there nothing visible... even i move my 10K-ohm-POT to the ground.....
and i have done some programming, so could any one please help me .... (i am really stucked) any help will be appritiatable.....
<code> ORG 0000H LJMP MAIN ORG 0030H RS EQU P3.7 RW EQU P3.5 EN EQU P3.4 MAIN: LCALL DELAY CLR EN MOV DPTR,#MYCOM LCALL LCD_INI MOV DPTR,#MYDATA LCALL LOOP MOV A,#0C9h LCALL COM LCALL DELAY MOV DPTR,#MYDAT2 LCALL LOOP AGAIN: SJMP AGAIN ;======================================== COM: MOV P1,A CLR RS CLR RW SETB EN LCALL DELAY CLR EN RET ;======================================== DATAW: MOV P1,A SETB RS CLR RW SETB EN LCALL DELAY CLR EN RET ;======================================== DELAY: MOV R6,#100 HERE2: MOV R7,#250 HERE: DJNZ R7,HERE DJNZ R6,HERE2 RET ;======================================== LCD_INI: CLR A MOVC A,@A+DPTR LCALL COM LCALL DELAY JZ GO_B1 INC DPTR SJMP LCD_INI GO_B1: RET ;======================================== LOOP: CLR A MOVC A,@A+DPTR LCALL DATAW LCALL DELAY INC DPTR JZ GO_B2 SJMP LOOP GO_B2: RET ;======================================== MYCOM: DB 38H,0EH,06,01,84H,0 MYDATA: DB "DAREDEVIL",0 MYDAT2: DB "GUNS AND ROSES",0 ;======================================== END </code>
Asif Ali "DareDevil"
erik malund wrote: "The amazing thing is that if you commented your code ... I would bet you would find the problem yourself"
Absolutely. Code documentation is not meant just for 'other people read'. A well commented code will capture the programmer's intentions and clarify the effects of the related logic.
The best definition for a bug I've ever seen is:
A bug is a mismatch between the documentation and the actual behavior of a program.
You can write spaghettiware in pretty much any language. It doesn't really matter whether you program in C, Python or Assembly, as long as you write clear comments and structure your code cleanly. But PLEASE, never write comments like "load 0x41 into the accumulator", or "go to LOOP".
I wrote above: "None of the instructions you are using affect the Z flag, ..."
Which is ABSOLUTE NONSENSE! Please forgive-me for that. OF COURSE, the 8051 core has no Z flag. Testing for zero in A should work as written. (thank you all for not flaming immediately)
The fact that I routinely write 8051 assembly functions does not make my gross mistake better. I can only blame it to cross-cpu contamination or brain damage :-0
Anyway, I am following this subject in the other forum you have started, and you seem to have progressed to the point of locating your mistake in the initialization code. The Hitachi documentation specifies that you send the init sequence to the display 4 times, with a delay of 10ms between sequences. Check your timings.
Well sir i have checked my initialization according to HD44780 in my simulator i have found that its 0.012S so i think that its very enough for delay purpose Right ?