Why I must to multiple this with 256 I don't understand.
What I can do to have for example 1 Millisecond or 5 Millisecond with Pause.
Thanks.
Ciao.
Why I must to multiple this with 256 I don't understand.
What I can do to have for example 1 Millisecond or 5 Millisecond with Pause.
Thanks.
Ciao.
What is the range of your values? if all of them are <255, i guess you just need to use..
Delay1=0
Delay1.LowByte=DataIn[3]
Pause Delay1
in case the range is greater than 255, Sayzer's suggestion have to work... or i miss something myself too![]()
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi,
(I may be missing something here too, but here comes the long winded answer....)
Since you have an array of 12 bytes each byte can only hold a value between 0 and 255. If you want a delay longer than 255mS you need to, either use an array of words OR use two bytes in the byte-array to 'make' a word.
The multiply by 256 "shifts" the 8 bits in DataIn[3] to the upper 8 bits in Delay1.
Say you want a 1000mS delay. Since 1000 wont fit in a byte you'll use two bytes. 1000 in binary is 00000011 11101000 so DataIn[3] = 3 and DataIn[4] = 232.
Then when you parse it you get Delay1 = DataIn[3] * 256 + DataIn[4] which is the same as 3 * 256 + 232 = 1000.
Or the easier way:
Delay1.HighByte = DataIn[3]
Delay1.LowByte = DataIn[4]
/Henrik Olsson.
Just to mix some brains
Or the cryptic way...
But, in this case DataIn[3]=232 AND DataIn[4]=3, no big deal...Code:@ MOVE?CW 1000, _DataIn+3
With my example, you'll use...Or the easier way:
Delay1.HighByte = DataIn[3]
Delay1.LowByte = DataIn[4]
TADA!Code:@ MOVE?WW _DataIn+3, _Delay1
Last edited by mister_e; - 31st December 2006 at 14:37.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
This mean thet when I want to have One Millisecond i need to put in my DataIn[3] = 0 and DataIn[4] = 1 or I make again a Mistake ?! :-)
Thanks,
Your Code work very well but just when my values > 255 is.
Hi,
Thanks a lot.
But When Delay1 < 256 dont' work.
This is my Code:
INCLUDE "modedefs.bas"
DEFINE OSC 4
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 12 ' 19200 Bauds
DEFINE HSER_CLROERR 1
DataIn var byte [12]
Adresse var byte
AdresseIn var byte
N var byte
Delay1 var word
Loop var word
Kanal var byte [5]
KanalCount var byte
SOUND PORTB.1,[124,100]
MainStart:
Adresse = $1
low PORTB.0 '''''''''''''''''''''''''''''''''''''''''''''RS485 Input Data Enable'''''''''''''''''''''''''''''''''''''''''''' ''''''''''''
Main:
hserin 10000,MainStart,[WAIT("!"),STR Datain\13]
CheckAdr:
AdresseIn = Datain[0]
if Adresse = AdresseIn then RcvData
GoTo MainStart
RcvData:
IF Datain[11] = 13 Then CheckEnd
Goto MainStart
CheckEnd:
IF Datain[12] = 10 Then Discard
Goto MainStart
Discard:
Delay1 = 256
Delay1 = (DataIn[3] * 256) + DataIn[4]
Loop = (Datain[2] * 10)
Kanal[0] = Datain[5]
Kanal[1] = Datain[6]
Kanal[2] = Datain[7]
Kanal[3] = Datain[8]
Kanal[4] = Datain[9]
Kanal[5] = Datain[10]
KanalCount = 0
'SOUND PORTB.1,[124,30]
''''''''''''''''''''''''''''''''''''''''''''Progra m 1''''''''''''''''''''''''''''''''''''''''''''''''' ''
IF Datain[1] = 0 then
for N = 0 to Loop
High PortC.0
High PortC.1
low PortC.2
low PortC.3
Pause Delay1
low PortC.0
High PortC.1
high PortC.2
low PortC.3
Pause Delay1
low PortC.0
low PortC.1
high PortC.2
high PortC.3
Pause Delay1
high PortC.0
low PortC.1
low PortC.2
high PortC.3
Pause Delay1
Next N
endif
GoTo MainStart
My Code Work just fine wehn the Delay Value > Byte is.
But I need for Example : Pause Delay1 = 1
I Wrote a visual Basic Software where I can send this Delays values,but this work just wehn this Word Variable > 255.
Thanks.
I'm curious to see the VB program too.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi,
Yes I understand what you mean,but my problem ist that i want to have sometimes values that < as 255 is,for Example 1 Millisecond for My Stepping Motor.
The Visual Basic Software Work very good,all what I send I receive with my Pic,My only Problem ist that wehn I send this Chr(1) to my Word variable Delay ,dont' Work,wehn I send Chr(1) And I use the Pic Code: Delay1 = (DataIn[3] * 256) + DataIn[4] this work but I need 1 Millisecond for my Stepping Motor.
Thanks.
Last edited by Pesticida; - 31st December 2006 at 12:39.
OK, so do a simple test, skip the HSERIN stuff and load the value in the array manually at the top of your code, then redo your tests.
Also... there's a little mistake here
Should beCode:hserin 10000,MainStart,[WAIT("!"),STR Datain\13]
I think it's on the VB side... just drop the Mscomm1.Output lineCode:hserin 10000,MainStart,[WAIT("!"),STR Datain\12]
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi,
This is my Visual Basic Communication Code:
MSComm1.Output = "!" & Chr(Val(CmbAdresse.Text)) & Chr(0) & Chr(Val(TxtLoop.Text)) & Chr(Val(TxtDelayOn1.Text)) _
& Chr(Val(TxtDelayOn2.Text)) & Chr(Val(TxtKanal1.Text)) & Chr(Val(TxtKanal2.Text)) & Chr(Val(TxtKanal3.Text)) _
& Chr(Val(TxtKanal4.Text)) & Chr(Val(TxtKanal5.Text)) & Chr(Val(TxtKanal6.Text)) & Chr(13) & Chr(10)
Sleep 30
I need for the moment just Byte CmbAdresse.Text,Byte TxtLoop.Text,Byte TxtDelayOn1.Text,Byte TxtDelayOn2.Text.
I have 13 Bytes !
Last edited by Pesticida; - 31st December 2006 at 13:01.
Ok I did what You told me,now I wrote direct too Delay1 = 1.
But dont work,maybe I can not use a Word variable with Pause when this Values less then 256 is.
I can not find the Answer.
EDIT: forgive me i was wrong... i'll be back!!!
Last edited by mister_e; - 31st December 2006 at 13:29.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks