- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 24 von 24

Thema: Assembler Motorsteuerung

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Anzeige

    Powerstation Test
    Danke erstmal für die Erklärung ...
    Und was wird hiermit angesprochen:

    Code:
    (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1)

  2. #22
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    WGM10, COM1A1 und COM1B1 sind eigentlich zahlenwerte. diese sind schon vorher defineirt wurden (in einer der INCLUDE-dateien). dabei geht es um bestimmte bits, zB ist das bit WGM10 glaube ihc das bit 0, com1a1 das bit 6. man könnte also auch schreiben 1<<0 | 1<<6 usw.

    diese namen sienen nur der übersichtlichkeit, so weiss man ohne nachzusehen WELCHE bits nun gesetzt wurden. ist ja auch einfach im sicherungskasten namen daneben zu shreiben als sich zu merken, dass sicherung nummer 23 für die steckdosen in der küche sind =)

    das | (oder) dient der verknüpfung, es werden also alle 3 angesprochenen bits mit einem mal gesetzt.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Also könnte ich auch folgendes dafür schreiben:

    Code:
    ldi      temp,   (1 << WGM10)
    out      TCCR1A,   temp
    ldi      temp,   (1 << COM1A1)
    out      TCCR1A,   temp
    ldi      temp,   (1 << COM1B1)
    out      TCCR1A,   temp

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    05.07.2007
    Beiträge
    44
    Hallo H3IIGhost
    Lass es mich einmal so sagen, im Prinzip ja, aber am Ende deines Programms ist nur das Bit für COM1B1 gesetzt. Du überschreibst das Register TCCR1A immer wieder.
    damaltor hat es richtig Beschrieben. WGM10 , COM1A1 und COM1B1 stehen für Bitpositionen. Sie sind in der Definitationsdatei m8def.inc zum ATmega8 beschrieben.
    z.B
    .equ WGM10 = 0
    Der Ausdruck steht also für den Wert 0, unabhängig davon auf was er angewendet werden soll. Wenn der Assembler auf einen solchen Ausdruck trifft, durchsucht er die include dateien nach diesem Ausdruck. Und wenn er ihn findet, dann ersetzt er ihn durch den zugeordneten Wert. Du könntest auch WGM10 = 0 durch Otto10 = 0 ersetzen, das Ergebnis wäre das Gleiche. Genau so Verhält es sich auch mit COM1A1 = Bitposition 7 und COM1B1 = Bitposition 5. So ist also WGM10 ein synonym für 0. Der Ausdruck in dieser Zeile besagt also, setzte im Register temp
    ( synonym für r16 ) an der Bitposition 0 eine 1. Danch führe eine ODER Verknüpfung an den Bitpositionen 5 und 7 mit dem Register temp durch.
    Diese Anweisung kann ersetzt werden durch
    ldi temp, 0xA1
    oder
    ldi temp, 0b10100001
    Das Ergebnis ist immer gleich. Die Bits 0 - 5 - 7 werden auf 1 gesetzt und die andern Bits bleiben auf 0.
    Es ist nur nicht mehr so einfach zu Verstehen, was da gemacht wird.
    Diese ODER Verknüpfung fehlt noch in deinem Programm.

    MfG
    A.Hoffmann

Seite 3 von 3 ErsteErste 123

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests