Bitmanipulation
Revision 0:56207c59a56d, committed 2020-01-12
- Comitter:
- robertbuc
- Date:
- Sun Jan 12 22:33:32 2020 +0000
- Commit message:
- Lekt2_Bitmanipulation
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/A1_Lekt2_LaufShift_Bitmanipulation.cpp Sun Jan 12 22:33:32 2020 +0000 @@ -0,0 +1,30 @@ +/* +0. Aufgabe: [LaufShift]] Programmiere ein Lauflicht für die +vier blauen Leds mit BusOut und Verschiebe Operatoren. +*/ + +#include "mbed.h" + +//BusOut leds(D0,D3,D6,D9,D11,D12,A1,A5); +BusOut leds(D0,D3,D6,D9); + +void laufshift(); +int main() +{ + + while(1) + { + laufshift(); + } +} + +void laufshift() +{ + leds=1; + wait_ms(250); + for(int i=1;i<5;i++) + { + leds=leds<<1; + wait_ms(250); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/A2u3_Lekt2_SetDelTogBits_and_ByteShift_Bitmanipulation.cpp Sun Jan 12 22:33:32 2020 +0000 @@ -0,0 +1,137 @@ +#include "mbed.h" + +/* +[SetDelTogBits] Schreibe ein Programm das folgende Tasks beinhaltet: + +//MSB LSB + + Lösche (0) das LSB (least significant bit), MSB (most significant bit) beim Datentype uint8_t. + Setze (1) das LSB (least significant bit), MSB (most significant bit) beim Datentype uint16_t. + Toggle (0 wird 1 bzw. 1 wird 0) das LSB (least significant bit), MSB (most significant bit) beim Datentype uint32_t. + Lösche/Setze/Toggle das 3. und das 5. Bit beim Datentype uint8_t. +*/ +BusOut myleds(LED1, LED2, LED3, LED4); + + +void print_binary(uint8_t x) { // function to print binary + for(int i=sizeof(x)<<3; i; i--) + putchar('0'+((x>>(i-1))&1)); +} + +void delbits(); +void setbits(); +void togbits(); +void lst_3_5(); + +int main() { + //delbits(); + //setbits(); + //togbits(); + //lst_3_5(); +} + +void lst_3_5() +{ + //uint8_t value = 0b11111111; //löschen + //uint8_t mask = 0b00010100; //löschen + + //uint8_t value = 0b11101011; //setzen + //uint8_t mask = 0b00010100; //setzen + + uint8_t value = 0b10000100; //toggeln + uint8_t mask = 0b00010100; //toggeln + + + + printf("value: "); + print_binary(value); + printf(" orginal! \n"); + + printf("\n===========================\n"); + printf("mask: "); + print_binary(mask); + printf("\n===========================\n\n"); + + //value=value| (1 << 2) | (1 << 4); //1000 0000 wird zu 10010100 //setzen + + //value=value&~mask; //LÖSCHEN an 3. und 5. Stelle + //value=value|mask; //SETZEN an 3. und 5. Stelle + //value=value^mask; //TOGGELN an 3. und 5. Stelle + printf("value: "); + print_binary(value); + printf(" geändert! \n"); + +} + + +void togbits() +{ + uint32_t value = 0b10011001; + uint32_t mask = 0b11111111; + + printf("value: "); + print_binary(value); + + printf(" orginal! \n"); + + + printf("\n===========================\n"); + printf("mask: "); + print_binary(mask); + printf("\n===========================\n\n"); + + value=value^mask; //TOGGELN ^ EXOR und alles 1er in mask + printf("value: "); + print_binary(value); + printf(" geandert! \n"); + +} + + +void setbits() +{ + uint16_t value = 0b00011000; + uint16_t mask = 0b10000001; + + printf("value: "); + print_binary(value); + + printf(" orginal! \n"); + + + + printf("\n===========================\n"); + printf("mask: "); + print_binary(mask); + printf("\n===========================\n\n"); + + value=value|mask; //SETZEN + printf("value: "); + print_binary(value); + printf(" geandert! \n"); +} + + +void delbits() +{ + + uint8_t value = 0b10011001; + uint8_t mask = 0b10000001; + + printf("value: "); + print_binary(value); + + printf(" orginal! \n"); + + + + printf("\n===========================\n"); + printf("mask: "); + print_binary(mask); + printf("\n===========================\n\n"); + + value=value&~mask; //LÖSCHEN + printf("value: "); + print_binary(value); + printf(" geandert! \n"); +}