Attiny2313 und RS232

#2062010
Lesenswert?

Mikrocontroller sind ab Werk strohdoof und können garnix. Sie sind 
primär für Leute gedacht, die programmieren können oder lernen wollen.

Es kann sein, daß es für Deine konkrete Anwendung schon was fertiges im 
Web gibt, ich weiß es nicht.
Es wird wohl auch keiner für Dich danach suchen (d.h. mußt Du wohl 
selber).

Du brauchst in jedem Fall aber noch ein Programmiergerät, um das 
Programm in den MC zu flashen.


Peter
OP #2063745
Lesenswert?

Hallo,

dieser Code habe ich von AVR turirial Uart kopiert. so weit ich 
verstanden habe die entschprechen fast meine anwendung allerdings dieser 
Code für Atmega 8 geschrieben. Die Frage ist kann ich dieser Code auch 
für AT902313 verwenden oder nicht wenn Ja, was muss ich ändern?

Gruss
Martin


.include "m8def.inc"

.def temp = R16

.equ F_CPU = 4000000                            ; Systemtakt in Hz
.equ BAUD  = 9600                               ; Baudrate

; Berechnungen
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ; clever runden
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille

.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille 
Fehler
  .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit 
zu hoch!"
.endif

.org 0x00
        rjmp main

.org URXCaddr
        rjmp int_rxc

; Hauptprogramm
main:

    ; Stackpointer initialisieren

    ldi     temp, HIGH(RAMEND)
    out     SPH, temp
    ldi     temp, LOW(RAMEND)
    out     SPL, temp

    ; Port B = Ausgang

    ldi     temp, 0xFF
    out     DDRB, temp

    ; Baudrate einstellen

    ldi     temp, HIGH(UBRR_VAL)
    out     UBRRH, temp
    ldi     temp, LOW(UBRR_VAL)
    out     UBRRL, temp

    ; Frame-Format: 8 Bit

    ldi     temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
    out     UCSRC, temp

    sbi     UCSRB, RXCIE                ; Interrupt bei Empfang
    sbi     UCSRB, RXEN                 ; 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
    in      temp, sreg                  ; SREG sichern
    push    temp

    in      temp, UDR                   ; UART Daten lesen
    cpi     temp, '1'                   ; empfangenes Byte mit '1' 
vergleichen
    brne    int_rxc_1                   ; wenn nicht gleich, dann zu 
int_rxc_1
    cbi     PORTB, 0                    ; LED einschalten, low aktiv
    rjmp    int_rxc_2                   ; Zu int_rxc_2 springen
int_rxc_1:
    cpi     temp, '0'                   ; empfangenes Byte mit '0' 
vergleichen
    brne    int_rxc_2                   ; wenn nicht gleich, dann zu 
int_rxc_2
    sbi     PORTB, 0                    ; LED ausschalten, low aktiv
int_rxc_2:

    pop     temp
    out     sreg, temp                  ; SREG wiederherstellen
    pop     temp                        ; temp wiederherstellen
    reti
Gast #2063858
Lesenswert?

Hi

>Die Frage ist kann ich dieser Code auch
>für AT902313 verwenden oder nicht wenn Ja, was muss ich ändern?

Zumindest:  .include "m8def.inc". Ansonsten fällt mir jetzt nichts 
offensichtliches auf.

MfG Spess

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