"Stretching" a byte variable into two byte variables?


Closed Thread
Results 1 to 10 of 10

Hybrid View

  1. #1
    Join Date
    Feb 2013
    Posts
    1,127


    Did you find this post helpful? Yes | No

    Default Re: "Stretching" a byte variable into two byte variables?

    I wanted it to be shorter, by using loop and

    X.Y=Z
    but as I can see, you can't use another variable as bit reference, only static values.

  2. #2
    Join Date
    Feb 2013
    Posts
    1,127


    Did you find this post helpful? Yes | No

    Default Re: "Stretching" a byte variable into two byte variables?

    uint16_t enlargeYourByte(uint8_t input)

    2 {

    3 uint16_t x = input;

    4 x = (x ^ (x << 4)) & 0x0f0f;

    5 x = (x ^ (x << 2)) & 0x3333;

    6 x = (x ^ (x << 1)) & 0x5555;

    7 return x | (x << 1));

    8 }



    This is how they do it in C. Can we port this to PBP ?

  3. #3
    Join Date
    Apr 2014
    Location
    OK
    Posts
    557


    Did you find this post helpful? Yes | No

    Default Re: "Stretching" a byte variable into two byte variables?

    I think this does it:
    Code:
    Input VAR BYTE
    Wide VAR WORD
    X VAR WORD
    Y VAR WORD
    
    EnlargeYourByte:
    X = Input
    Y = Input << 4
    X = X ^ Y
    X = X & $0F0F
    Y = X << 2
    X = X ^ Y
    X = X & $3333
    Y = X << 1
    X = X ^ Y
    X = X & $5555
    Wide = X << 1
    RETURN

  4. #4
    Join Date
    May 2013
    Location
    australia
    Posts
    2,645


    Did you find this post helpful? Yes | No

    Default Re: "Stretching" a byte variable into two byte variables?

    Code:
        any_byte=101011  ;eg input any_byte-> 10101011
        for any_cnt=0 to 7
        any_word=any_word<<2
        if  any_byte.7 then any_word=any_word+3
        any_byte=any_byte<<1
        next
    output any_word-> 1100110011001111


    mikes
    Code:
    X VAR WORD
    Y VAR WORD
    ;eg input any_byte-> 10101011
    
    
    X = ani_r
    Y = ani_r << 4
    X = X ^ Y
    X = X & $0F0F
    Y = X << 2
    X = X ^ Y
    X = X & $3333
    Y = X << 1
    X = X ^ Y
    X = X & $5555
    ani_h = X << 1
    output any_word-> 1000100010001010


    not working



    corrected

    Code:
    x = ani_r;
    x = (x ^ (x << 4)) & $0f0f;
    x = (x ^ (x << 2)) & $3333;
    x = (x ^ (x << 1)) & $5555;
    ani_h = x | (x << 1);

    and works , probably quicker the my loop
    Last edited by richard; - 24th October 2021 at 23:30.
    Warning I'm not a teacher

Similar Threads

  1. "Variable already an alias" - is there a way to avoid this?
    By CuriousOne in forum mel PIC BASIC Pro
    Replies: 32
    Last Post: - 18th June 2022, 22:22
  2. Byte from variable
    By Lilleljung in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 14th February 2015, 22:29
  3. Replies: 0
    Last Post: - 14th November 2013, 03:32
  4. Replies: 3
    Last Post: - 15th October 2012, 08:06
  5. AN Question for "word" variable read The serial port
    By redfoen in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 14th December 2007, 17:39

Members who have read this thread : 1

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