kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu

1.5.2 Die wichtige Bedeutung von Byteoperationen bei der Mikrocontroller-Programmierung

#include<avr/io.h>

int main(void)
{
    unsigned char akku;

    DDRB = 0b00000000;
    DDRC = 0b11111111;

    while(1)
    {
        akku = PINB;
        if( (akku & 0b00000001) > 0 )
        {
            PORTC = 42;
        }
        else
        {
            PORTC = 0;
        }
    }
} 

Code 1.5.2-1: Taster-Programm

  • Obiges Programm zeigt immer, wenn der Taster bei PB0 gedrückt ist eine 42 an, ansonsten eine Null.
  • Die Potentiale an den Pins von Port B werden durch den Befehl akku = PINB als Bitmuster in die Variable akku geladen.
  • Es muß nun überprüft werden, ob das erste Bit (Bit 0 / PB0) am Eingang auf 1 gesetzt ist.
  • (akku & 0b00000001) stellt eine bitweise UND-Verknüpfung des Inhalts von akku mit der Zahl 1 (0b00000001) dar.
  • Da bei einer UND-Verknüpfung stets die korrespondierenden Bits beide 1 sein müssen, damit an der Bitstelle wieder 1 herauskommt, spielen für das Ergebnis das 2. bis 8. Bit von akku keine Rolle.
  • Nur wenn das 1. Bit (PB0) 1 ist kommt bei der UND Verknüpfung insgesamt 1 heraus, sonst Null.
  • Somit ist die if-Bedingung genau dann erfüllt, wenn der Taster bei PB0 gedrückt ist.
  • Während bei der Programmierung am PC ev. nicht ganz der Nutzen bitweiser logischer Verknüpfungen einzusehen war, gewinnen sie im Zusammenhang mit der Programmierung von Mikrocontrollern eine große Bedeutung.

Rechenbeispiele für Bitweise UND-Verknüpfung

  • 0b10101010 & 0b01010101 = 0b00000000
  • 0b11111100 & 0b00111111 = 0b00111100
  • 255 & 2 = 2
  • 14 & 15 = 14
  • 0xf0 & 0xf1 = 0xf0

Rechenbeispiele für Bitweise ODER-Verknüpfung

  1. 0b10101010 | 0b01010101 = 0b11111111
  2. 0b11111100 | 0b00111100 = 0b11111100
  3. 255 | 2 = 255
  4. 14 | 15 = 15
  5. 0xf0 | 0xf1 = 0xf1

Bitshift-Operator

  • Ein weiterer Bitoperator, der an dieser Stelle schon eingeführt werden soll ist der Bitshift-Operator
  • Mit seiner Hilfe lassen sich einzelne Bits in einer unsigned char Variable setzen:
  • akku = 1<<2; beispielsweise verschiebt zweimal die 1 um ein Bit. Das ergibt dann dezimal 4.
  • akku = 1<<5; ergibt entsprechend 32, oder 0b00100000.
  • Die Zahl hinter dem << entspricht also immer dem Bit, das gesetzt wird.