PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR 90S2313 Problem, und finde nicht den Fehler!



Alex20q90
30.04.2005, 16:38
Hallo,

zur Zeit bastel ich an einem 90s2313! Habe mal zum Testen die ASM-Datei "A P P L I C A T I O N N O T E A V R 3 0 5" geöfnet und bisle rumexperimentiert! Ich habe alles mal soweit endfernt um nur PutChar zu nutzen!

Als erstes wollte ich wissen ob ich die Daten auch auf einem Anderen Pin als PinD.1 ausgeben kann.

Mein Versuch wurde für den PinB.0 gewählt. Dort habe ich eine LED angeschlossen!

Mit dem Befehl
Sbi PORTB,Tx ;Init port pins auf 1
und mit
cbi PORTB,Tx ;Init port pins auf 0

Das klappt auch!


So, nun mein Problem :
Ich habe herausgefunden das das Programm ab dem Befehl UART_Delay irgendwas macht! Nach UART_Delay macht der Prozessor was er will! Sogar die LED wird dunkler!

Was kann das sein?

Grüße
Alex

Hier mal der Code :

;**** A P P L I C A T I O N N O T E A V R 3 0 5 ************************
;*
;* Title : Half Duplex Interrupt Driven Software UART
;* Version : 1.1
;* Last updated : 97.08.27
;* Target : AT90Sxxxx (All AVR Device)
;*
;* Support email : avr@atmel.com
;*
;* Code Size : 32 Words
;* Low Register Usage : 0
;* High Register Usage : 4
;* Interrupt Usage : None
;*
;* DESCRIPTION
;* This Application note contains a very code efficient software UART.
;* The example program receives one character and echoes it back.
;************************************************* **************************

.include "2313def.inc"

;***** Pin definitions


.equ Tx =0 ;Transmit pin is PB0


;***** Global register variables

.def bitcnt =R16 ;bit counter
.def temp =R17 ;temporary storage register
.def Txbyte =R18 ;Data to be transmitted


.cseg
.org 0
rjmp reset
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti


;***** Program Execution Starts Here

;***** Test program

reset:
ldi temp,$FF
out DDRB,temp
ldi temp,$FF
out PORTB,temp

;cbi PORTB,Tx ;Init port pins auf 0

forever:


LDI TxByte, 12

rcall putchar ;Echo received char
rjmp forever



;************************************************* **************************
;*
;* "putchar"
;*
;* This subroutine transmits the byte stored in the "Txbyte" register
;* The number of stop bits used is set with the sb constant
;*
;* Number of words :14 including return
;* Number of cycles :Depens on bit rate
;* Low registers used :None
;* High registers used :2 (bitcnt,Txbyte)
;* Pointers used :None
;*
;************************************************* **************************
.equ sb =1 ;Number of stop bits (1, 2, ...)

putchar: ldi bitcnt,9+sb ;1+8+sb (sb is # of stop bits)
com Txbyte ;Inverte everything
sec ;Start bit

putchar0: brcc putchar1 ;If carry set
cbi PORTB,Tx ; send a '0'
rjmp putchar2 ;else

putchar1: sbi PORTB,Tx ; send a '1'
nop

putchar2: rcall UART_delay ;One bit delay
rcall UART_delay



lsr Txbyte ;Get next bit
dec bitcnt ;If not all bit sent
brne putchar0 ; send next
;else
ret ; return




;************************************************* **************************
;*
;* "UART_delay"
;*
;* This delay subroutine generates the required delay between the bits when
;* transmitting and receiving bytes. The total execution time is set by the
;* constant "b":
;*
;* 3·b + 7 cycles (including rcall and ret)
;*
;* Number of words :4 including return
;* Low registers used :None
;* High registers used :1 (temp)
;* Pointers used :None
;*
;************************************************* **************************
; Some b values: (See also table in Appnote documentation)
;
; 1 MHz crystal:
; 9600 bps - b=14
; 19200 bps - b=5
; 28800 bps - b=2
;
; 2 MHz crystal:
; 19200 bps - b=14
; 28800 bps - b=8
; 57600 bps - b=2

; 4 MHz crystal:
; 19200 bps - b=31
; 28800 bps - b=19
; 57600 bps - b=8
; 115200 bps - b=2

.equ b =250 ;19200 bps @ 4 MHz crystal



UART_delay: ldi temp,b
UART_delay1: dec temp
brne UART_delay1

ret

meltronik
30.04.2005, 16:54
Das die LED dünkler wird ist klar weil er so wie das programm aufgebaut ist ständig eine datenübertragung macht (forever schleife)...
bei der verzögerung von b=250 dauert die uart delay schleife ca. 200µs und damit ein bit noch immer nur ca. 400µs bei 4Mhz deshalb kein sichtbares blinken sondern ein dünkler werden der LED...

mfg
Wolfgang

Alex20q90
01.05.2005, 14:20
Hallo Wolfgang,

danke für die Info! Hab µS und mS beim Umrechnen verwechselt!

Grüße
Alex