Hallo Zusammen,
ich probiere gerade verzweifelt den AT90S8515 des AVR STK200 über RS232 anzusprechen.
Dazu habe ich unten angehängtes Beispielprogramm adaptiert, welches die Daten zurücksendet. Jedoch reagiert er auf das Startbit meines Hyperterminals nicht. Er bleibt ewig in der "Auf-startbit"warteschleife. (Dies ändert sich nur, wenn ich über den Taster PD0 selbst betätige, und somit das Startbit,simuliere.)
Woran kann das liegen ???
Vielen Dank
Steve
###################################################################################################################################################### ;**** 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 : snipped-for-privacy@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 "8515def.inc"
;***** Pin definitions
.equ RxD ÿ ;Receive pin is PD0 .equ TxD ;Transmit pin is PD1
;***** Global register variables
.def bitcnt =R16 ;bit counter .def temp =R17 ;temporary storage register
.def Txbyte =R18 ;Data to be transmitted .def RXbyte =R19 ;Received data
.cseg .org 0
ldi R20, RAMEND ;Stackpointer initialisieren out SPL, R20
; ;***** Program Execution Starts Here
;***** Test program
reset: sbi PORTD,TxD ;Init port pins sbi DDRD,TxD sbi PORTD,RxD sbi DDRD, RxD
ldi Txbyte,12 ;Clear terminal ldi r20,0xAA out DDRB,r20 rcall getchar
forever: rcall getchar mov Txbyte,Rxbyte 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 ;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 PORTD,TxD ; send a '0' rjmp putchar2 ;else
putchar1: sbi PORTD,TxD ; 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
;*************************************************************************** ;* ;* "getchar" ;* ;* This subroutine receives one byte and returns it in the "Rxbyte" register ;* ;* Number of words :14 including return ;* Number of cycles :Depens on when data arrives ;* Low registers used :None ;* High registers used :2 (bitcnt,Rxbyte) ;* Pointers used :None ;* ;***************************************************************************
getchar: ldi bitcnt,9 ;8 data bit + 1 stop bit ldi r20,0xFF out DDRB,r20 getchar1: sbic PIND,RxD ;Wait for start bit rjmp getchar1
rcall UART_delay ;0.5 bit delay
getchar2: rcall UART_delay ;1 bit delay rcall UART_delay
clc ;clear carry sbic PIND,RxD ;if RX pin high sec ;
dec bitcnt ;If bit is stop bit breq getchar3 ; return ;else ror Rxbyte ; shift bit into Rxbyte rjmp getchar2 ; go get next
getchar3: ret
;*************************************************************************** ;* ;* "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 ; 19200 bps - bO ; 28800 bps - b ;
; 2 MHz crystal: ; 19200 bps - b ; 28800 bps - b ; 57600 bps - b
; 4 MHz crystal: ; 19200 bps - b1 ; 28800 bps - b ; 57600 bps - b ; 115200 bps - b
.equ b 1 ;19200 bps @ 4 MHz crystal
UART_delay: ldi temp,b UART_delay1: dec temp ldi r20,0x00 out DDRB,r20 brne UART_delay1
ret