led chaser pattern repetiton
Thu Feb 18 2016, 12:09 am
It is just a case adding loops to the code,
I'm sure you will work it out.
Thank you so much sir, for great help and great support.
sure sir i'll try for that.
Sat Jan 14 2017, 12:22 am
Hi phill sir..
Above mention code is not working.. only default program executes..whatever conditions of buttons, they are pressed or not it makes no any changes.(This function works fine with old code but not working with this table method)
And sir please also explain me how can add 24 bit display.. i'm unable to increase from 16 to 24 bcoz of DPTR limitations.
Thanks sir.
I've attached the whole code..
testButton1: mov A,BIT_VAR ;debug mov P1,A jb progBit1,testButton2 orl P1,#0x20 ;debug call program0 ;Run this segment if button pressed sjmp testButton1 ;done testButton2: jb progBit2,default orl P1,#0x40 ;debug call program2 ;Run this segment if button pressed sjmp testButton1 default: orl P1,#0x80 ;debug call program1 ;Run this segment if no buttons pressed sjmp testButton1
Above mention code is not working.. only default program executes..whatever conditions of buttons, they are pressed or not it makes no any changes.(This function works fine with old code but not working with this table method)
And sir please also explain me how can add 24 bit display.. i'm unable to increase from 16 to 24 bcoz of DPTR limitations.
Thanks sir.
I've attached the whole code..
[ Edited Mon Jan 16 2017, 01:30 am ]
Sun Jan 15 2017, 05:24 am
There is a fault in your Proteus design.
If you look carefully (magnify) you will see the ground point is actually a junction dot.
Add a new ground point from the 'Terminal mode ' menu.
The buttons will work now.
Buttons should show as red and blue, and change when pressed,
If not, post your Proteus design and the code you are using.
If you look carefully (magnify) you will see the ground point is actually a junction dot.
Add a new ground point from the 'Terminal mode ' menu.
The buttons will work now.
Buttons should show as red and blue, and change when pressed,
If not, post your Proteus design and the code you are using.
Mon Jan 16 2017, 01:25 am
There is a fault in your Proteus design.
If you look carefully (magnify) you will see the ground point is actually a junction dot.
Add a new ground point from the 'Terminal mode ' menu.
The buttons will work now.
Buttons should show as red and blue, and change when pressed,
If not, post your Proteus design and the code you are using.ExperimenterUK
Hello sir, i'm using the code in development board where every thing is ok..
i'm attaching both non working and working code here.
please look both once. There is no changes in asm files of both codes but include files are different.. in non working code *.inc file is written in table method and other which is working, written in old method which is DUMPED by us.
i've tried both.
[ Edited Mon Jan 16 2017, 01:29 am ]
Wed Jan 18 2017, 06:26 am
Here is a new version that works on the circuit you posted.
"And sir please also explain me how can add 24 bit display..
i'm unable to increase from 16 to 24 bcoz of DPTR limitations.
"
The DPTR does not impose any limitation on the number of LEDs.
If you look at "displayloop:" you will see that it moves one byte at a time from the table
to a port.
Just move three bytes (24 bits) instead of 2 (16 bits) in every call to "displayloop:"
"And sir please also explain me how can add 24 bit display..
i'm unable to increase from 16 to 24 bcoz of DPTR limitations.
"
The DPTR does not impose any limitation on the number of LEDs.
If you look at "displayloop:" you will see that it moves one byte at a time from the table
to a port.
Just move three bytes (24 bits) instead of 2 (16 bits) in every call to "displayloop:"
sankalp_s like this.
Thu Jan 19 2017, 12:58 am
Thank you so much dear sir. I think problem was memory allocation..
I'm doing like dis:
It gives result like zig zag and blinking (not according to given instructions.) m i doing wrong sir?
The DPTR does not impose any limitation on the number of LEDs.
If you look at "displayloop:" you will see that it moves one byte at a time from the table
to a port.
Just move three bytes (24 bits) instead of 2 (16 bits) in every call to "displayloop:"ExperimenterUK
I'm doing like dis:
dw 000000000000000000000000b dw 100000000000000000000000b dw 110000000000000000000000b dw 111000000000000000000000b dw 111100000000000000000000b dw 111110000000000000000000b dw 111111000000000000000000b ........................ ............................. displayloop: mov A,table_count ;copy the number of lines to display mov tmp_table_count,A d_loop: mov A,#0 movc A,@A+dptr ;get the top 6 bits call mirrorbyte; ;reverse pattern to suit hardware mov P1,A ;display pattern inc dptr mov A,#0 movc A,@A+dptr ;get the low 6 bits call mirrorbyte mov P0,A inc dptr mov A,#0 movc A,@A+dptr ;get the low 6 bits call mirrorbyte mov P2,A inc dptr //call delay2 ;pause call delay_keycheck ;pause and checkbuttons.. can change return address, be careful djnz tmp_table_count,d_loop ;next line of table ret
It gives result like zig zag and blinking (not according to given instructions.) m i doing wrong sir?
Thu Jan 19 2017, 02:58 am
This is your error
"dw 000000000000000000000000b"
dw stands for define word, meaning 16 bits of storage.
The assembler only stored 16 bits of the 24 bits you expected.
In the attached file I use.
dw 0000000000000000b
db 00000001b
This stores 16 bits then 8 bits per entry.
Don't forget, I used P1 for debugging, you will need to turn that off.
"dw 000000000000000000000000b"
dw stands for define word, meaning 16 bits of storage.
The assembler only stored 16 bits of the 24 bits you expected.
In the attached file I use.
dw 0000000000000000b
db 00000001b
This stores 16 bits then 8 bits per entry.
Don't forget, I used P1 for debugging, you will need to turn that off.
sankalp_s like this.
Thu Jan 19 2017, 11:22 pm
Thank you sir.. understood the logic..
But reverse loop is not working for 24 bits only port 2 and port 2 are functioning.
I'm doing this:
But reverse loop is not working for 24 bits only port 2 and port 2 are functioning.
I'm doing this:
reverse24displayloop: mov A,table_count ;copy the number of lines to display mov tmp_table_count,A rl A ;2 bytes per line inc_dptr24: dec A jz noinc_dptr inc dptr jmp inc_dptr24 noinc_dptr24: r_loop24: mov A,#0 movc A,@A+dptr ;get the top 6 bits call mirrorbyte; ;reverse pattern to suit hardware mov P2,A ;display pattern ;8051 has no "dec dptr" instruction, so do it the hard way. dec DPL MOV R7,DPL cjne R7,#255,rdl1_24 dec dph rdl1_24: mov A,#0 movc A,@A+dptr ;get the low 6 bits call mirrorbyte mov P0,A dec DPL MOV R7,DPL cjne R7,#255,rdl2_24 dec dph rdl2_24: mov A,#0 movc A,@A+dptr ;get the low 6 bits call mirrorbyte mov P0,A dec DPL MOV R7,DPL cjne R7,#255,rdl3_24 dec dph rdl3_24: call delay_keycheck ;pause and checkbuttons.. can change return address, be careful djnz tmp_table_count,r_loop ret
Fri Jan 20 2017, 06:01 am
The original reverse24displayloop:
was a bit messy.
Try this version.
was a bit messy.
Try this version.
[ Edited Sat Jan 21 2017, 03:14 am ]
sankalp_s, ajay_bhargav like this.
Powered by e107 Forum System