Witam, mam drobny problem z programem na ATMEGA8. RXD i TXD podłączone są pod kostke SN75176 która wysyła na szyne RS485, pinem PD4 przełączam tryb pracy kostki (1- nadawanie, 0 - odbieranie).
Kwarc 4MHz
Program ma wysyłać wartość 97 na szynę przez USART. Kod programu poniżej:
Kod programu poniżej:
Dziwna rzecz dzieje sie w tym miejscu:
Mikrokontroler w obecnej postaci programu nie wysyła 97 tylko inne wartosci np 82, 133.
Natomiast gdy wrzuce ldi r20, 97 do petli "petla" program działa dobrze.
Strasznie mnie to dziwi, bo wynika z tego, że po wywołaniu procedury wyslij modyfikowane jest r20, ale gdzie i dlaczego? Gdy wrzuce ta procedure do petli a ldi r20, 97 zostawie za petla wtedy równiez działa dobrze. W czym moze tkwić problem?
Z góry dziekuje za pomoc
Pozdrawiam
Paweł
Kwarc 4MHz
Program ma wysyłać wartość 97 na szynę przez USART. Kod programu poniżej:
Kod programu poniżej:
.include "m8def.inc"
.cseg
.org 0x00
;### WEKTORY PRZERWAŃ ###
rjmp reset
.org 0x1B
rjmp odbierz
reset:
ldi r16, LOW(RAMEND)
out SPL, r16
ldi r16, HIGH(RAMEND)
out SPH, r16
ldi r16, 255
out ddrd, r16
ldi r16, 0
out portd, r16
ldi r16, 255
out ddrb, r16
ldi r16, 0
out portb, r16
cli
;# konfiguracja usart
ldi r17, high(51)
ldi r16, low (51)
out ubrrh, r17
out ubrrl, r16
ldi r16, (1<<ursel)|(1<<ucsz1)|(1<<ucsz0)
out ucsrc, r16
ldi r16, (1<<rxcie)|(1<<rxen)|(1<<txen)
out ucsrb, r16
;# konfiguracja adc
ldi r16, (1<<refs1)|(1<<refs0)|(1<<adlar)
out admux, r16
ldi r16, (1<<aden)|(1<<adsc)|(1<<adfr)|(1<<adps2)|(1<<adps1)|(1<<adps0)
out adcsra, r16
sei
ldi r20, 97
petla:
rcall wyslij
rjmp petla
wyslij:
sbi portd, 4
ldi r16, (0<<rxcie)|(1<<rxen)|(1<<txen)
out ucsrb, r16
sbis ucsra, udre
rjmp wyslij
nop
nop
nop
nop
nop
nop
nop
out udr, r20
aaa:
sbis ucsra, udre
rjmp aaa
cbi portd, 4
ldi r16, (1<<rxcie)|(1<<rxen)|(1<<txen)
out ucsrb, r16
ret
odbierz:
wroc: reti
Dziwna rzecz dzieje sie w tym miejscu:
ldi r20, 97
petla:Mikrokontroler w obecnej postaci programu nie wysyła 97 tylko inne wartosci np 82, 133.
Natomiast gdy wrzuce ldi r20, 97 do petli "petla" program działa dobrze.
petla:
ldi r20, 97Strasznie mnie to dziwi, bo wynika z tego, że po wywołaniu procedury wyslij modyfikowane jest r20, ale gdzie i dlaczego? Gdy wrzuce ta procedure do petli a ldi r20, 97 zostawie za petla wtedy równiez działa dobrze. W czym moze tkwić problem?
Z góry dziekuje za pomoc
Pozdrawiam
Paweł