Delay Problem,Byte,Word


Closed Thread
Results 1 to 21 of 21

Hybrid View

  1. #1

    Default Delay Problem,Byte,Word

    Hi,

    I have a little problem:

    Delay1 var word
    DataIn var byte [12]

    ...........

    Delay1 = Datain[3]

    ................
    pause Delay1

    Pause just work wenn Delay1 > 255 Why.

    I want for Example to have a Delay sometimes 1 or 10 or 50 Milliseconds and sometime over a Second.
    Its just work when Delay1 > as Byte.

    How can I transform this Datain to Word.
    I try with this:

    Delay1.byte0 = Datain[3]
    Delay1.byte1 = Datain[4]

    Pause delay1

    But this dont' Work.

    I need Please a Help.
    Thank You very mouch !!!

    Ciao.
    Last edited by Pesticida; - 30th December 2006 at 16:43.

  2. #2
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,604


    Did you find this post helpful? Yes | No

    Default

    Hi,
    As you figured out it won't work because DataIn[3] is a byte sized variable, it can only hold values between 0 and 255. To do what you want something like this may work:
    Code:
    Delay1 = DataIn[3] * 256 + DataIn[4]
    OR
    Code:
    Delay1.HighByte = DataIn[3]
    Delay1.LowByte = DataIn[4]
    In both examples DataIn[3] is the most is the upper 8 bits, DataIn[4] is the lower 8 bits of the word sized Delay1.

    /Henrik Olsson.

  3. #3
    Join Date
    Jan 2006
    Location
    Istanbul
    Posts
    1,185


    Did you find this post helpful? Yes | No

    Default

    Why not DataIn VAR WORD[12] ?

    Do I need more coffee again?

    Or am I missing something here again?

    -------------------

  4. #4


    Did you find this post helpful? Yes | No

    Default

    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.

  5. #5
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    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.

  6. #6
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,604


    Did you find this post helpful? Yes | No

    Default

    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.

  7. #7


    Did you find this post helpful? Yes | No

    Default

    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.

Similar Threads

  1. 16F628A - Stops if release power switch.
    By dene12 in forum General
    Replies: 16
    Last Post: - 14th February 2009, 07:57
  2. Old and beyond help ?
    By DavidFMarks in forum mel PIC BASIC Pro
    Replies: 46
    Last Post: - 11th December 2008, 15:23
  3. RF Transmitter
    By et_Fong in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 27th October 2005, 16:34
  4. Memory Space of the PIC16F84...
    By Tear in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 1st July 2005, 19:55
  5. Problem with saving to EEPROM...
    By Tear in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 1st July 2005, 00:10

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts