Gast
#17942
Hallo,
ich habe folgendes Problem ich will den Uart im Programmverlauf zweimal
Abfragen, sodaß ich wenn ich im PC die erste Zahl eingebe ins erste
Unterprogramm komme und beim 2 Mal ins weitere. Bei meinem Programm
springt er ins erste und dann wieder zurück.
Vielen Dank im vorraus !!!
Jürgen
.include "4433def.inc"
.def temp = r16
.def data = r17
.def send = r18
.def ver = r19
.def tes = r21
.def qc = r22
; .equ quartz = 3686400 ; für Standard STK500
.equ quartz = 4000000 ; für 4 MHz
.equ baud = 9600 ; Baudrate
rjmp reset ; Reset Handler
reti ; IRQ0 Handler
reti ; IRQ1 Handler
reti ; Timer1 Capture Handler
reti ; Timer1 compare Handler
reti ; Timer1 Overflow Handler
reti ; Timer0 Overflow Handler
reti ; SPI Transfer Complete Handler
rjmp receive ; UART RX Complete Handler : RXCIE
reti ; UDR Empty Handler
reti ; UART TX Complete Handler
reti ; ADC Conversion Complete Interrupt Handler
reti ; EEPROM Ready Handler
reti ; Analog Comparator Handler
reset:
ldi temp, RAMEND
out SP, temp ; set stack pointer
sbi UCSRB, RXCIE ; enable receive completed interrupt
sbi UCSRB, TXEN ; enable transmit
sbi UCSRB, RXEN ; enable receive
ldi temp, quartz / (baud * 16) - 1
out UBRR, temp ; BAUD Rate 9600
sei ; interrupts generell aktivieren
main:
loop:
rjmp loop
;--------------------------------------------------
receive:
out DDRB, r20
ldi ver, $38
in data, UDR
cp data,ver
breq version
ldi send, 13 ; CR
rcall transmit
ldi send, 10 ; LF
rcall transmit
ldi send, 'A'
rcall transmit
reti
;--------------------------------------------------
transmit:
sbis UCSRA,UDRE ; Warten, bis UDR bereit ist
rjmp transmit
out UDR, send
reti
version:
ldi send, 'B'
rcall transmit
ldi qc, $37
in tes, UDR
cp tes,qc
breq well
reti
well:
ldi send, 'l'
rcall transmit
mov send, data
rcall transmit
reti