Kan någon berätta för mig varför detta program fungerar på mitt STK500 men inte i simulatorn? När jag simulerar att något sänds ifrån en PC så hoppar inte programkoden till receiver delen utan till resetdelen.
Om ni hittar några fel som ni tycker att jag absolut måste åtgärda så låt mig gärna få veta detta
.include "m8515def.inc"
.equ baud=2400 ;Baudrate (change to whatever we need)
.equ fosc=1000000 ;16MHz (Change to whatever we need)
.org 0x0000 ; reset interrupt vector
rjmp reset ; for startup
.org INT0addr ;ext. interupt from PinD2
rjmp Transmit
.org URXCaddr ;ext. interupt from RXD
rjmp Receive
;***********************************************************;
reset:
ldi r16, low(RAMEND) ; initialise Stack Pointer
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
;USART_Init
ldi r16, low(fosc/(16*baud)-1) ;Calculate value
ldi r17, high(fosc/(16*baud)-1)
out UBRRH, r17 ;Set baud rate
out UBRRL, r16
ldi r16, (1<<RXEN)|(1<<TXEN) ;Enable receiver and transmitter
out UCSRB,r16
ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0) ;Set frame format:
out UCSRC,r16 ;8data, 2stop bit
; set up interrupt 0 and interupt from RX
ldi r16, (1<<INT0)
out GIMSK, r16
ldi r16, $0F
out MCUCR, r16
sbi UCSRB, RXCIE
sei
forever:
rjmp forever
;***************************************************************************;
Receive:
ser r16 ;set as output
out DDRB, r16
ser r20 ;activate pullup
out PORTB, r20
USART_Receive:
; Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
; Get and return received data from buffer
push r16 ; push r16 to stack
in r16, UDR
cpi r16, '1'
brne int_rxc_1
cbi PORTB, 0 ;LED = on
int_rxc_1:
cpi r16,'0'
brne USART_Receive
sbi PORTB, 0 ;LED = off
pop r16
ret
;***************************************************************************;
Transmit:
ldi r16, 0b00000000
out DDRD, r16 ;set as input
ldi r16, $ff
out PortD, r16 ;activate pullup
ldi ZL, low(String1*2)
ldi ZH, high(String1*2)
loop1:
lpm r16, Z+ ;Get the first character from string1 to r16 (increment)
cpi r16, 0 ;Compare the character with zero
breq reset ;If equal branch to Done
rcall USART_Transmit ;Relative Call, USART_Transmit
rjmp loop1 ;Jump to label loop1
String1:
.db "Interface232",0
USART_Transmit:
sbis UCSRA,UDRE ;Wait for empty transmit buffer
rjmp USART_Transmit
out UDR,r16 ;Put data (r16) into buffer, sends the data
ret ;Return
;***************************************************************************;