Witam grupowiczow. Przesiadlem sie z m8 na m128 i sie zdziwilem, bo program napisany pod m8, na m128 nie dziala ... Oczywiscie pozmienialem wszystkie potrzebne rejestry itp. Ale nie w tym problem, bo za duzo opowiadania :). Otoz wyglada to tak. Jest sobie testowy programik :
.nolist .include "m128def.inc"
; ***** Constans *************************************** .equ LENGTH=100
.def temp=r16 .def znak=r20
; ***Secure code**************************************** .list .cseg ;Code segment .org $0000 jmp reset ; Reset .org $0024 jmp odbior ; USART0 RX Complete
;************************************* ; start main program reset: ;set stack pointer to last internal RAM location ldi temp,low(RAMEND) out SPL,temp ldi temp,high(RAMEND) out SPH,temp
;uart ldi temp,0 out UCSR0A,temp ;bez doublespeed, bez multiprocesor ldi temp,0b10011000 ; int - en on rx, dis on tx, dis on empty, rx en, tx en out UCSR0B,temp ldi temp,0b10000110 ; asynch, parity N, 1 stop, 8 bit sts UCSR0C,temp ldi temp,25 out UBRR0L,temp ldi temp,0 sts UBRR0H,temp
ldi XL,low(bufor) ldi XH,high(bufor)
;oblokowanie przerwan sei
;*********************************** ; glowna petla programu kolko: rjmp kolko
; **** podprogramy
************************************************************;******************************** ;czeka na pusty bufor do wyslania po rs-sie rs_wait: sbis UCSR0A,UDRE0 rjmp rs_wait ret
;******************************** ;wysyla znak z tempa na rs-a tx_rs: rcall rs_wait out UDR0,temp ret
; ****** Interupts
*************************************************************; get byte from rs odbior: in temp,SREG ;store flags push temp
mov temp,XL ;show XL register rcall tx_rs
in znak,UDR0 ;get byte from rs out UDR0,znak ;echo
st X,znak ;add byte to bufor
ld temp,X ;show byte from bufor rcall tx_rs
ldi temp,0 st X+,temp ;add 0 to end of bufor
ld temp,X ;show 0 :) rcall tx_rs
pop temp out SREG,temp reti
; ***** Dane **************************************
;segment danych .dseg bufor: .byte LENGTH
----------------------------------------------------------------------------
----------------------------------------
Czyli w skrocie : 1 bajt to XL, 2 - odczytany znak z RS-a, 3 - odczytany z bufora, 4 - powinien byc zawsze 0 (koniec danych w buforze) A efektem tego programu jest :
2006-12-07 21:43:06.94 [TX] - 61 2006-12-07 21:43:06.97 [RX] - 60 61 61 00 2006-12-07 21:43:09.29 [TX] - 61 2006-12-07 21:43:09.34 [RX] - 61 61 61 00 2006-12-07 21:43:10.50 [TX] - 61 2006-12-07 21:43:10.54 [RX] - 62 61 61 1E 2006-12-07 21:43:12.25 [TX] - 61 2006-12-07 21:43:12.29 [RX] - 63 61 1E 00 2006-12-07 21:43:13.61 [TX] - 61 2006-12-07 21:43:13.65 [RX] - 64 61 01 00 2006-12-07 21:43:15.17 [TX] - 61 2006-12-07 21:43:15.22 [RX] - 65 61 01 00 2006-12-07 21:43:16.44 [TX] - 61 2006-12-07 21:43:16.48 [RX] - 66 61 61 00 2006-12-07 21:43:17.20 [TX] - 61 2006-12-07 21:43:17.25 [RX] - 67 61 61 00 2006-12-07 21:43:17.81 [TX] - 61 2006-12-07 21:43:17.84 [RX] - 68 61 01 00 2006-12-07 21:43:18.26 [TX] - 61 2006-12-07 21:43:18.31 [RX] - 69 61 61 00 2006-12-07 21:43:21.39 [TX] - 61 2006-12-07 21:43:21.44 [RX] - 6A 61 61 00 2006-12-07 21:43:22.15 [TX] - 61 2006-12-07 21:43:22.20 [RX] - 6B 61 61 00 2006-12-07 21:43:23.00 [TX] - 61 2006-12-07 21:43:23.04 [RX] - 6C 61 01 00 2006-12-07 21:43:23.73 [TX] - 61 2006-12-07 21:43:23.78 [RX] - 6D 61 60 00 2006-12-07 21:43:24.51 [TX] - 61 2006-12-07 21:43:24.56 [RX] - 6E 61 61 AE 2006-12-07 21:43:26.39 [TX] - 61 2006-12-07 21:43:26.44 [RX] - BF 33 78 06 CE 00 C0 2006-12-07 21:43:28.73 [TX] - 61 2006-12-07 21:43:28.79 [RX] - 00 86 FE 98 80 2006-12-07 21:43:31.56 [TX] - 61 2006-12-07 21:43:31.62 [RX] - 06 06 FE 80 F8 2006-12-07 21:43:34.25 [TX] - 61 2006-12-07 21:43:34.31 [RX] - 18 86 FE 98 FE 2006-12-07 21:43:35.69 [TX] - 61 2006-12-07 21:43:35.75 [RX] - 1E 86 FE FE 80 80 2006-12-07 21:43:37.45 [TX] - 61 2006-12-07 21:43:37.51 [RX] - 60 86 FE 80 06 00 FEReset procka .....
2006-12-07 21:43:56.79 [TX] - 62 2006-12-07 21:43:56.83 [RX] - 60 62 62 00 2006-12-07 21:43:58.76 [TX] - 62 2006-12-07 21:43:58.79 [RX] - 61 62 62 00 2006-12-07 21:44:00.40 [TX] - 62 2006-12-07 21:44:00.45 [RX] - 62 62 62 1E 2006-12-07 21:44:01.20 [TX] - 62 2006-12-07 21:44:01.25 [RX] - 63 62 1E 00 2006-12-07 21:44:01.89 [TX] - 62 2006-12-07 21:44:01.94 [RX] - 64 62 02 00 2006-12-07 21:44:02.58 [TX] - 62 2006-12-07 21:44:02.61 [RX] - 65 62 02 00 2006-12-07 21:44:03.33 [TX] - 62 2006-12-07 21:44:03.37 [RX] - 66 62 62 00 2006-12-07 21:44:04.01 [TX] - 62 2006-12-07 21:44:04.04 [RX] - 67 62 62 00 2006-12-07 21:44:04.61 [TX] - 62 2006-12-07 21:44:04.65 [RX] - 68 62 00 00 2006-12-07 21:44:05.11 [TX] - 62 2006-12-07 21:44:05.15 [RX] - 69 62 62 00 2006-12-07 21:44:05.65 [TX] - 62 2006-12-07 21:44:05.69 [RX] - 6A 62 62 00 2006-12-07 21:44:06.29 [TX] - 62 2006-12-07 21:44:06.34 [RX] - 6B 62 62 00 2006-12-07 21:44:06.81 [TX] - 62 2006-12-07 21:44:06.86 [RX] - 6C 62 02 00 2006-12-07 21:44:07.25 [TX] - 62 2006-12-07 21:44:07.29 [RX] - 6D 62 62 00 2006-12-07 21:44:07.73 [TX] - 62 2006-12-07 21:44:07.78 [RX] - 6E 62 62 AE 2006-12-07 21:44:08.26 [TX] - 62 2006-12-07 21:44:08.33 [RX] - BF C3 78 18 CE 00 C0 2006-12-07 21:44:13.76 [TX] - 62 2006-12-07 21:44:13.83 [RX] - 00 66 FE 66 80 2006-12-07 21:44:16.98 [TX] - 62 2006-12-07 21:44:17.04 [RX] - 06 06 FE 80 F8 2006-12-07 21:44:19.76 [TX] - 62 2006-12-07 21:44:19.83 [RX] - 18 66 FE 66 FE 2006-12-07 21:44:21.28 [TX] - 62 2006-12-07 21:44:21.34 [RX] - 1E 66 FE FE 80 80 2006-12-07 21:44:22.76 [TX] - 62 2006-12-07 21:44:22.83 [RX] - 60 66 FE E6 06 00 FE 2006-12-07 21:44:25.98 [TX] - 62 2006-12-07 21:44:26.04 [RX] - 66 66 FE 66 00Reset procka ....
2006-12-07 21:44:44.76 [TX] - 63 2006-12-07 21:44:44.81 [RX] - 60 63 63 00 2006-12-07 21:44:46.39 [TX] - 63 2006-12-07 21:44:46.44 [RX] - 61 63 63 00 2006-12-07 21:44:47.14 [TX] - 63 2006-12-07 21:44:47.17 [RX] - 62 63 63 1E 2006-12-07 21:44:52.84 [TX] - 63 2006-12-07 21:44:52.87 [RX] - 63 63 1E 00 2006-12-07 21:44:54.64 [TX] - 63 2006-12-07 21:44:54.67 [RX] - 64 63 03 00 2006-12-07 21:44:57.76 [TX] - 63 2006-12-07 21:44:57.81 [RX] - 65 63 03 00 2006-12-07 21:44:59.81 [TX] - 63 2006-12-07 21:44:59.86 [RX] - 66 63 63 00 2006-12-07 21:45:00.89 [TX] - 63 2006-12-07 21:45:00.94 [RX] - 67 63 63 00 2006-12-07 21:45:01.61 [TX] - 63 2006-12-07 21:45:01.65 [RX] - 68 63 03 00 2006-12-07 21:45:02.42 [TX] - 63 2006-12-07 21:45:02.47 [RX] - 69 63 63 00 2006-12-07 21:45:03.28 [TX] - 63 2006-12-07 21:45:03.33 [RX] - 6A 63 63 00 2006-12-07 21:45:03.75 [TX] - 63 2006-12-07 21:45:03.79 [RX] - 6B 63 63 00 2006-12-07 21:45:04.36 [TX] - 63 2006-12-07 21:45:04.40 [RX] - 6C 63 03 00 2006-12-07 21:45:04.79 [TX] - 63 2006-12-07 21:45:04.84 [RX] - 6D 63 62 00 2006-12-07 21:45:05.26 [TX] - 63 2006-12-07 21:45:05.29 [RX] - 6E 63 63 AE 2006-12-07 21:45:06.03 [TX] - 63 2006-12-07 21:45:06.09 [RX] - BF F3 78 1E CE 00 C0 2006-12-07 21:45:08.12 [TX] - 63 2006-12-07 21:45:08.19 [RX] - 00 66 FE 66 80 2006-12-07 21:45:08.53 [TX] - 63 2006-12-07 21:45:08.59 [RX] - 06 86 98 F8 2006-12-07 21:45:08.90 [TX] - 63 2006-12-07 21:45:08.97 [RX] - 18 86 F8 FE 2006-12-07 21:45:09.39 [TX] - 63 2006-12-07 21:45:09.45 [RX] - 1E 66 FE FE 80 80 2006-12-07 21:45:09.87 [TX] - 63 2006-12-07 21:45:09.94 [RX] - 60 86 E0 06 00 FE 2006-12-07 21:45:12.75 [TX] - 63 2006-12-07 21:45:12.81 [RX] - 66 86 F8 00Czy ktos potrafi to wyjasnic, bo ja nie mam pojecia o co chodzi.
- Dlaczego po zapisaniu do bufora i odczytaniu z niego czasami sa inne wartosci ? Zauwazcie, podobienstwa gdy XL wynosi 64, 65, 68 i 6C...
- Dlaczego gdy XL osiagnie wartosc 6E pozniej zaczynaja sie jaja ? I to jakie :) Przeciez bufor jest ustawiony na 100 bajtow
Napewno cos zle robie, tylko co ? Juz nie mam pomyslow.... Prosze o jakies sugestie :)
pozdrawiam kwia-Tec