You don't get to choose in what format the number is stored, it doesn't work like that.
2B in hex
43 in decimal
00101011 in binary
+ in ASCII
These are all the same thing and stored exactly the same in a variable.
Code:
mai = $2B
mai = %00101011
mai = 43
mai = "+"
Exactly the same result. It's just how we choose to interpret the information.

If you want to receive a number expressed in a "human readable" format (ie represented as an ASCII string) you use the available DEC/HEX/BIN modifiers (as you are).

The code, as it runs, will then interpret ASCII characters and convert to an actual number so that the ASCII string '2B' becomes the decimal value 43. There's no need to use an array in the HSERIN statement because you're not storing the '2' and the 'B', you're storing the decimal value 43 that the ASCII string '2B' represents.

Then, when you do the LCDOUT you, again, use the DEC (or HEX or BIN) modifier to convert the decimal value 43 back into the ASCII characters '4' and '3' which are displayed on the LCD.

Since your LCD shows 43 when you send '41 05 2B' everything is working exactly as expected and when you do decvalue = mai you'll copy the content of mai to decvalue so it TOO contains 43.

I don't get what the problem is......

/Henrik.