Periodisches signal auf Atmega168 UART rx leitung?

Gast #515435
Lesenswert?

Z.B:

DDRB  = 0x00 ;Datenrichtungsregister B als Eingang

PORTB = 0xFF ;Alle internen Pullup's einschalten

Interne Pullup's benutzt man dann, wenn man einen eingang auf low
testen will und keinen ext. Widerstand hat.

z.B. ein Taster nach Masse: Gedrückt = low  nicht gedrückt = high

Zum ausschalten des P.U. : PORTB = 0x00
Gast #515453
Lesenswert?

Das "sei" darfst du nicht in die Interruptroutine setzen.
Sondern nach der Initialisierun in die main Schleife.
So wie jetzt wird der globale Interrupt nicht freigegeben und folglich
die Int.Rut. nicht ausgeführt.

in main fehlt auch noch : loop: rjmp loop
Jetzt wird nach  main sofort einmal die Interruptroutine ausgeführt
und mangels Rücksprungadresse wieder ein Reset.
Gast #515472
Lesenswert?

Habe dein Programm zu schnell überflogen.
Stimmt so nicht ganz was ich geschrieben habe.
Die Schleife hast du ja schon drin.
Soweit ich mich noch erinnere must du noch den UART Int. freigeben
nicht nur den globalen mit sei.
Gast #515579
Lesenswert?

interrupt scheint zu kommen, led geht aus...


;-------------------------
.include "m168def.inc"  ;|   Definitionen der Adressen
;-------------------------
;
.def data = r17
.def temp = R16
.equ CLOCK = 7372800
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1

.org 0x00
        rjmp main

.org URXCaddr                             ; Interruptvektor für 
UART-Empfang
        rjmp int_rxc

; Hauptprogramm
main:
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

    ldi temp, 0x01
    out DDRB,temp
    out PORTB,temp

        ; Baudrate einstellen
        ldi temp, LOW(UBRRVAL)
        sts UBRR0L, temp
        ldi temp, HIGH(UBRRVAL)
        sts UBRR0H, temp

        ; Frame-Format: 8 Bit
        ldi temp, 0x06
        sts UCSR0C, temp

    ldi temp, 0x98
        sts UCSR0B, temp              ; Interrupt bei Empfang
                          ; RX (Empfang) aktivieren

        sei                               ; Interrupts global aktivieren

loop:   rjmp loop                         ; Endlosschleife

; Interruptroutine: wird ausgeführt sobald ein Byte über das UART 
empfangen wurde
int_rxc:
        push temp                         ; temp auf dem Stack sichern

    ldi temp,0x00
    out PORTB, temp


        pop temp
                           ; temp wiederherstellen
        reti                              ; Interrupt beenden

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren