Viertes selbstgebautes System

 

 

Elektronenrechner   4 + 4 = 5 Bit

 

 

Mit einem Mikrocomputer ATMEL AVR Tiny2313V wird eine kleine rechnende Schaltung aufgebaut.

 

Der Rechner hat zwei gespeicherte Programme:

1. Einen Vorwärts-Rückwärtszähler

2. Einen 4-Bit-Binäradierer

 

Mit Schalter 1 wird der Rechner eingeschaltet (EIN = oben = on).

 

 

Je nach Stellung des Schalters 8 beim Einschalten wird gezählt (oben = on) oder addiert  (unten = off).

 

Das Zählen erfolgt langsam aus einer Verzögerungsschleife im Rechner heraus.

Beim Zählen kann mit Schalter 9 die Zählrichtung gewechselt werden (oben : vorwärts). Die Ausgabe erfolgt im Binärcode mit den 6 Leuchtdioden.

 

 

Beim Addieren werden die Schalter 1 bis 8 zur Zahleneingabe genutzt:

            Schalter 6..7..8..9 stellen den Summand A (4 Bit) dar; niederwertigstes Bit auf Schalter 9

            Schalter 2..3..4..5 stellen den Summand B (4 Bit) dar; niederwertigstes Bit auf Schalter 5

 

                        oben = on : Eins

                        unten = off : Null

 

Die Leuchtdioden geben das Ergebnis mit 5 Bit aus (AN : Eins).

 

 

Vorderseite                                                         

 

       

 

        Der Rechner ist im Addiermodus, B = 3, A = 1, Summe = 4   !

 

Als Basis dient eine Lochrasterplatine mit Lötaugen.

(Der Taster ist für eine spätere Erweitung vorgesehen.)

 

 

Schaltplan

 

 

      

 

 

 

 

Programmlisting

 

 

 

Der Mikrocomputer arbeitet mit internem Takt von ca. 0,5 MHz.

 

.include "tn2313def.inc"

.org 0x000

; es soll port b auf bit 0-5 zählen oder addieren

 

rjmp reset

reset:

   ldi r19, 0x3f ;bit 0-5 out

   out ddrb,r19

   ldi r19, 0x3f ;bit 5-0 high portd fuer pullup

   out portd,r19

   ldi r19, 0x03 ;bit 1-0 high porta fuer pullup

   out porta,r19

 

   ldi r19, 0

 

   in r18,pind ; wenn 0: zaehlen, wenn 1: addieren logik invers

   andi r18,0x10 ;port d bit 4

   breq neuzaehl

 

 

neuadd:

   in r18,pina

   com r18

   andi r18,0x03

   in r17,pind

   com r17

   andi r17,0x02

   add r17,r17

   add r18,r17

   in r17,pind

   com r17

   andi r17,0x01

   add r17,r17

   add r17,r17

   add r17,r17

   add r18,r17 ; in r18 steht der linke operand (4 bit)

 

   in r17,pind

   com r17

   andi r17, 0x04

   add r17,r17

   add r18,r17

   in r17,pind

   com r17

   andi r17, 0x08

   asr r17

   add r18,r17

   in r17,pind

   com r17

   andi r17, 0x10

   asr r17     

   asr r17     

   asr r17

   add r18,r17

   in r17,pind

   com r17

   andi r17, 0x20

   asr r17     

   asr r17

   asr r17

   asr r17     

   asr r17

   add r18,r17

 

; dez:

;  ldi r19,0

;  ldi r20,0

;  bst r18,4

 

;  ldi r19,6

;  ldi r20,1

  

;  bst r18,3

 

  

 

 

; ende dez

   andi r18,0x1f

   com r18

   out portb, r18

 

   rjmp neuadd

 

 

neuzaehl: ;Hauptschleife

  

   in r18,pind

   andi r18,0x20  ;port d bit 5

   breq nieder

 

   inc r19

   rjmp ausgeb

 

nieder: dec r19

 

  

ausgeb: out portb,r19

 

 

;  time-loops ca 250 ms

 

   ldi r20,120 ; anzahl aussloops

 

aussloop:

; verzoeg fuer 4 MHz/8 int Oszil

   ldi r21,250  ; 250  ca. 2 ms

innloop:        ; 4 zyklen in schleife

   dec r21

   nop

   brne innloop

;

   dec r20

   brne aussloop

;  ende time-loops

 

   rjmp neuzaehl

 

Die Schalter schalten Ein gegen Masse, die Leuchtdioden werden auch gegen Masse eingeschaltet.

Daher müssen die binären Werte entsprechend invertiert werden.