004 
            24.04.2022, 21:38 Uhr 
            Bert 
            
 
 
  | 
          
 | Zitat: |  P.S. schrieb Das Standard-Werk ist Kieser/Bankel: Einchipmikrorechner, 
  |  
 
  Ja, aber so richtig schön ist Kieser/Bankel nicht.  Die Kollegen haben für meinen Geschmack zu viele Begriffe ins Deutsche übersetzt, was das Verständnis eher erschwert.
  Ich habe auch das UM001604-0108 von Zilog. Das ist o.k. enthält aber auch neuere Features, die die alten Chips noch nicht haben.  
 
 
 | Zitat: |   Bormann/Rentzsch: Einchip-Mikrorechner.
  |  
 
  Das kannte ich noch nicht, werde ich mir bei Gelegenheit anschauen (Danke Holger!).
 
 
 
  Das ist so in der Form nicht hilfreich.
 
 
 | Zitat: |    Du programmierst nicht in Assembler?
  |  
 
  Nein. Ich nehme den C-Compiler von Zilog (z8cc.exe). KEEPASM und KEEPLST funktionieren zwar nicht, aber mit dem Debugger vom JTCEMU kann man sich prima durchsteppen (Danke Jens!).
 
 
 
 
 | Zitat: |  volkerp schrieb Ein Nop reicht, die Pipeline hat nur einen Befehl im Prefetch. |  
 
  Ja, hier leider nicht. Der Zählerstand von T1 wird erst aktualisiert, nachdem der Vorteiler weitergezählt hat.
 
  Aber: Ich habe im obigen Code noch einige Fehler gefunden.
  1. Bevor man das Bit TMR.2 setzt, müssen PRE1 und T1 befüllt werden:
 
 | Quellcode: |       // Initialisierung
      // single-run, interne Quelle, Vorteiler     PRE1 = ( 1 << 1) + (T1_PRESCALER << 2);     T1 = T1_TIME;     // jetzt PRE1 und T1 einladen         set_bit( TMR, 2);
  |  
 
 
  2. Das Polling macht man am Besten nicht auf den Zählerstand, sondern auf das Bit IRQ.5:
 
 | Quellcode: |       // geht, nennt sich 'polled processing'     while( bit_is_clear( IRQ, 5)) {};     clear_bit( IRQ, 5);
  |  
 
  Ein IRQ-Routine geht natürlich auch. Aber wenn die auch nur ein Flag setzt, wäre das hier overkill.
  3. Im single-pass-Modus, muss der Timer nicht nur neu gestartet werden, sondern auch vor jeder Nutzung ein 'reload' erhalten. Dafür werden die Bit 2 und 3 im TMR-Register gleichzeitig gesetzt:
 
 | Quellcode: |       // T1, laden + starten     TMR |= 0x0C;
  |  
 
  Wenn man nur T1 startet (Bit 3), läuft der Timer bei 256 los. Und ich habe mich die ganze Zeit gewundert, warum meine Zeiten nicht stimmen...
  Grüße, Bert -- Viele Grüße, Bert |