;************************************************************** ;************************************************************** ;*** mehrere Schieberegister-Eingänge werden periodisch über ;*** TimerInterrupt abgefragt, und im Ram abgelegt ;*** wenn Änderung an den Eingängen erkannt wird, (Vergleich ;*** mit im Ram abgelegter Kopie ;*** -> Senden der Bytes via UART an PC (X x 8 Bit) ;*** entwickelt für 74HCT165 ;************************************************************** ;************************************************************** .include "m32def.inc" .equ NO_INT_AREA=$030; ;*** Ramadressen .equ SerialByteCount = 4 ;Anzahl der angeschlossenen Schieberegister .equ SerialByteStart = SRAM_START ;Start-Ramadresse wo die eingelesenen Schieberegister-Bytes lagern .equ SerialByteCopyStart= SerialByteStart + SerialByteCount ;Start-Ramadresse wo die Kopie der eingelesenen Schieberegister-Bytes lagert ;*** Variablen .def temp = r16 .def tempCopy = r17 .def BitZaehler = r18 .def Daten = r19 .def ByteZaehler = r20 .def Flag = r21 ;*** UART .equ CLOCK = 4000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 ;über welchen Port werden die Daten ausgegeben/eingelesen .equ SER_PORT = PortC .equ SER_PORT_DDR = DDRC .equ SER_PIN = PinC ;Pins für die Verbindung an Schieberegister .equ SER_Sh_CP = 0 ;Shift Clock, bei positiver Flanke werden die Daten aus dem Baustein herausgetaktet .equ SER_St_CP = 1 ;Load, bei LOW werden Daten in Schieberegister übernommen, bei High bleiben die Daten gespeichert .equ SER_DS = 2 ;DataOut (vom Schieberegister); DataIn des µC ;Timer Settings .equ TimerWert =-40 ;40 Timerschritte bis zum Überlauf, ;Auslösung Interrupt alle 10ms bei ;Prescaler = 1024 .def TSW = r8 ;Timer Startwert (Reload) ;************************************************************** ; Interrupt Table ;************************************************************** .org 0x000 rjmp START ;Reset Handler .org OVF0addr rjmp TIM0_OVF ;Timer0 Overflow Handler ;************************************************************** ; Start Program ;************************************************************** .org NO_INT_AREA START: ;Stackpointer initialisieren ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ;Port C, Pin 0+1 durch Ausgabe von 0x03 ins ;Richtungsregister DDRC als Ausgang konfigurieren ldi temp, (1<