Witam, męczę się z tym programem już kilka godzin i nie mogę nic innego wymyślić.
Mianowicie, rejestr UDR wg symulatora AVR Studio jest zerowany, ale na wg podłaczonego wyświetlacza siedmio-segmentowego bez względu na to co faktycznie jest nadawane, zawsze odbierane jest 12 w rejestrze UDR.
Dlaczego tak się dzieje?
Mianowicie, rejestr UDR wg symulatora AVR Studio jest zerowany, ale na wg podłaczonego wyświetlacza siedmio-segmentowego bez względu na to co faktycznie jest nadawane, zawsze odbierane jest 12 w rejestrze UDR.
Dlaczego tak się dzieje?
.nolist
.include "m16def.inc"
.list
.dseg
.org 0x0100
Number: .byte 2
Cols: .byte 1
.cseg
.org 0x00
rjmp Reset
.org URXCaddr
rjmp rs232
.org 0x0030
Digit: .db 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144
Reset:
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, high(RAMEND)
out SPH, R16
ldi R16, 0xFF
out DDRA, R16
out DDRB, R16
com R16
out PORTA, R16
out PORTB, R16
ldi R16, 8
sts Number, R16
ldi R16, 1
sts Number + 1, R16
ldi R16, low(16000000/(16*9600)-1)
out UBRRL, R16
ldi R16, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)
out UCSRB, R16
ldi R16, (1<<UCSZ1)|(1<<UCSZ0)|(1<<UPM1)|(1<<UPM0)
out UCSRC, R16
ldi R16, high(16000000/(16*9600)-1)
out UBRRH, R16
sei
Main:
//rcall Display
rs232:
IN R16, UCSRA
sbrs R16, RXC
rjmp rs232
ldi R16, UDR
out PORTA, R16
rjmp Main
/*
rs232:
ldi R16, 10
sts UDR, R16
ldi R16, UDR
out PORTA, R16
reti*/
Display:
push R16
ser R17
out PORTB, R17
lds R16, Cols
inc R16
ldi R18, 1
lds R17, Number
sbrc R16, 1
rcall Disp
sts Cols, R16
ldi ZL, low(Digit<<1)
ldi ZH, high(Digit<<1)
add ZL, R17
lpm R16, Z
out PORTA, R16
com R18
out PORTB, R18
pop R16
reti
Disp:
clr R16
lds R17, Number + 1
ldi R18, 2
ret