How to read and write to an upper half or a specific bit from a decimal number in Simulink?
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Mike Buba
le 22 Nov 2022
Modifié(e) : Andy Bartlett
le 22 Nov 2022
Hi.
Can you please tell me how to read and write integer number to the upper part of the register and read and write only one bit?
I can read only the whole register as an integer, but I need only part of it (TBPHS value). Similarly, how to write integer number only to an upper-half?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1203318/image.png)
For the second case, how to read and write value for PHSDIR (one bit) if I am only able to read the whole TBCTL register?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1203323/image.png)
Thank you in advance.
Edit:
What to use to write to upper-half or specific bit?
0 commentaires
Réponse acceptée
Andy Bartlett
le 22 Nov 2022
Modifié(e) : Andy Bartlett
le 22 Nov 2022
Bitwise AND, OR, XOR, NOT (aka complement), shift, ...
are the ways commonly used to set, clear, or otherwise manipulate bits within a larger container.
For example, this code is forcing the first and last bit of a variable to be set to 1, using a mask and bitwise OR.
nbits = 16;
mask = uint16( sum( 2.^[0,nbits-1] ) );
n = 5;
u = uint16( randi([0,2^nbits-1],1,n) );
y = bitor(u,mask);
for i=1:n
fprintf('Input %s\n',dec2bin(u(i),nbits))
fprintf('Mask %s\n',dec2bin(mask,nbits));
fprintf('bitor output %s\n',dec2bin(y(i),nbits))
fprintf('\n')
end
So read the whole register. Perform the bitwise operations to achieve the desired change. Then write whole integer back to the whole register.
Please note the MATLAB code above is only for example of the concept. Please use Simulink Bitwise blocks, Bitset block, etc.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Simulink Functions dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!