mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik asm interrupt usart adc


Autor: Kai Scheddin (zeusosc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo hallo leutz, ich bins nochmal....

also das prog soll über eine eingabe eines bytes ein bit eines ports 
ändern,.. dann wenn das start byte kommt den adc starten und diesen per 
rs 232 an einen rechner schicken... kommt ein stopp byte soll dieser 
aufhöhren,...

soweit so gut,...
>prob 1:
starten ist kein problem bloß aufhöhren will er nicht,..
>prob 2:
und wenn ich das stopbyte (ascii->015=SI) bloß so sende macht der gar 
nÜx mehr...

>code:
>;############################################################
>;here including origins .org
.org 0x00
    jmp reset

.org URXCaddr        ;Interruptvektor für UART-Empfang
    jmp int_RXD

>;############################################################
reset:


    ldi get,0x00
    ldi send,0x00

>;##########################################################
>       ;PortC für ausgabe initialisieren
  ldi temp, 0xFF       ;0xFF ins Arbeitsregister r16 laden
        out DDRC, temp       ;Inhalt von r16 ins IO-Register DDRC 
ausgeben
        ldi poc, 0b00001000 ;0b00000001 in r16 laden (c4 -> all is gnd)
  out PORTC, poc      ;r16 ins IO-Register PORTC ausgeben
        ;PortB für Asugabe initialisieren
  ldi temp, 0xFF       ;0xFF ins Arbeitsregister r16 laden
        out DDRB, temp       ;Inhalt von r16 ins IO-Register DDRC 
ausgeben
        ldi pob, 0b00000000 ;0b00000000 in r16 laden (port c
  out PORTB, pob      ;r16 ins IO-Register PORTC ausgeben


  ldi temp, LOW(RAMEND)  ;Stackpointer initialisieren
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

  call USART_init

>       ;Messbereich 0-5V, Kanal 0pos - 2neg differnential
  ldi temp, 0b01011000

  out ADMUX, temp
  ldi temp, 0b10000111  ;ADC an, CLK=8MHz/128
  out ADCSRA, temp
>       ;Interrupts global aktivieren
        sei
        rcall info


>;###################################################################### ######
wait:
rjmp wait


main:
   sei
>        ;(CUR cursor rechts-> also eins weiter , der nächste messwert
         ldi send,CUR
         rcall sendbyte


ADC_START:
         clr temp
         ;Wandlung starten
         sbi ADCSR,ADSC

warte_bis_feddich_gemessen:
    sbis ADCSR,ADIF
    rjmp warte_bis_feddich_gemessen

    in zl, ADCL  ;Die unteren 8 Bit in r17 merken
    in zh, ADCH  ;Die oberen 2 Bit in r18 merken

    push temp
    mov temp,zl
    rcall hex2bcd

                mov send,r23
    rcall sendbyte
    mov send,r22
    rcall sendbyte
    mov send,temp
    rcall sendbyte
                ldi send, 32   ; die Bytes 10 und 13 senden
                rcall sendbyte

               ldi send, LF     ; die Bytes 10 und 13 senden
               rcall sendbyte   ; (Zeilenumbruch im Terminal)
               ldi send, CR
               rcall sendbyte
               pop temp

         rjmp main

>;###################################################################### ######
>; Interruptroutine wird ausgeführt wenn ein Byte über UART empfangen wurde
int_RXD:

    in get,UDR
    cpi get,0
    brne PC + 2
                rjmp end_int_rxd


                cpi get,SI ;(ende der aufzeichnung)
    brne PC + 2
    rjmp wait

    cpi get,255 ;(Grundstellung)
    brne PC + 2
    rjmp reset

    lc_modus 1,0b00000001
    lc_modus 2,0b00000010
    lc_modus 3,0b00000100
    lc_modus 4,0b00001000
    lc_modus 5,0b00010000
    lc_modus 6,0b00100000
    lc_modus 7,0b01000000
    lc_modus 8,0b10000000

    lc_conf 9, 0b00000001
    lc_conf 10,0b00000010
    lc_conf 11,0b00000100
    lc_conf 12,0b00001000

    cpi get,SO ;(Umschaltung (op call) ->run)
    brne PC + 2
    rjmp run



                ldi send,CAN
    rcall sendbyte

                rjmp end_int_rxd
>;###################################################################### 
###########


run:
ldi send,'k'
rcall sendbyte
ldi send,ACK
rcall sendbyte
jmp main

>;###################################################################### 
###########


ich weiß leider nicht mehr weiter,...
schon mal vielen dank
mfg

Autor: Kai Scheddin (zeusosc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also zu prob2:


>###########################################
wait:
sei
rjmp wait
....

cpi get,SI ;(ende der aufzeichnung)
brne PC + 3
cli
rjmp wait
>###########################################

also
cli
sei

dann läufts...

aber mit prob1 komm ich net weiter....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.