Ran_Word var wordIs there any way to use a VARiable to set a RANDOM single Bit on an output port?
Ini:
RANDOM Ran_Word
pause 100
PortB = Ran_Word.byte0
Pause 100
PortB = Ran_Word.byte1
Goto Ini
This code should suite your need.
Al.
Ran_Word var wordIs there any way to use a VARiable to set a RANDOM single Bit on an output port?
Ini:
RANDOM Ran_Word
pause 100
PortB = Ran_Word.byte0
Pause 100
PortB = Ran_Word.byte1
Goto Ini
This code should suite your need.
Al.
All progress began with an idea
Al, thanks for your replay. I ran your code. it sets the whole port at a random value. I need to figure out how to set a single bit within the port. I want to turn on a single led on the 8x8 display, then PAUSE, then loop to routine. Any idea how to single out one bit randomized?
This has been shown at the begining of the thread. Anyhow in your case:I want to turn on a single led on the 8x8 display, then PAUSE, then loop to routine. Any idea how to single out one bit randomized?
In the above example I assume you are using portB and PortC, if not then change them as per your need.Code:Ran_Word var word AA0 var Byte Ini: RANDOM Ran_Word For AA0= 0 to 7 Pause 100 PortB.0[AA0] = Ran_Word.0[AA0] pause 100 PortC.0[AA0] = Ran_Word.0[AA0 + 8] Next AA0 goto Ini
Al.
All progress began with an idea
Try this;
Code:X VAR WORD OldVal VAR BYTE PortVal VAR BYTE TRISB = 0 Main: RANDOM X PortVal = DCD X.HighByte ' get bit # IF PortVal = 0 THEN Main ' value should always be > 0 IF OldVal = PortVal THEN Main ' value should be different on every pass PORTB = PortVal OldVal = PortVal ' record old value for next pass PAUSE 200 GOTO Main END
Al, closer but not there yet. Sorry for the delay, I had to adjust your code to invert the Collumn port for this display. Bruce I haven't tested yours yet but I had started in that direction.
Bitgenerator:
Bvar=-0
random Ran_Word
Avar= Ran_Word.byte0
if Avar.0=1 then Bvar=Bvar+1
if Avar.1=1 then Bvar=Bvar+2
if Avar.2=1 then Bvar=Bvar+4 ;isolate a random number 0to7
Cvar=1
Cvar=Cvar<<Bvar ;set a single bit in the byte
Cvar=Cvar^$FF ;invert for a low on one bit
rcol=Cvar ;set port
Bvar=0
random Ran_Word
Avar= Ran_Word.byte0
if Avar.0=1 then Bvar=Bvar+1
if Avar.1=1 then Bvar=Bvar+2
if Avar.2=1 then Bvar=Bvar+4
Cvar=1
Cvar=Cvar<<Bvar
Row=Cvar
pause 100
goto Bitgenerator
(Wierd: code tag nor the editor would accept << in the code)
this method works (sorry you can't see all the code) but gives some repetition in general pattern on the diagonal. I will use the DCD. I'm still trying to understand Al's "Ran_Word.0[AA0 + 8]" . What is this doing to the PortC.0[AA0], is it resetting to a number less than 8?
thanks guys, I'll have to chew on this for a while.
Last edited by MOUNTAIN747; - 30th March 2010 at 21:05. Reason: post editor doesn't like <<
I have 2 suggestions:
Taz, try to put a meaningful title to your thread; like REPEAT-UNTIL or something.
Mountain, you're always best to start a new thread when you have a new question (since this thread is about REPEAT UNTIL syntax).
It may not seem like much but it makes things so much easier to find stuff when you look at the list of threads.
My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.
Not as dumb as yesterday, but stupider than tomorrow!
Bookmarks