Есть у кого грамотный алгоритм пересылки данных, чтоб ниче не профукать?
хон\хоф не предлагать, чую тормоз. Чёнить с ртс\цтс.
то TS-Labs: им2 выучил, такчто по существу, если есть идеи.
TS-Labs wrote:Сообщите подтверждение приема.
TS-Labs wrote:Ящитаю, он никакой не поддерживает )
...
POP R16
POP R18
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
MACRO SET_WATCH_DOG _WAIT
LD a,_WAIT
ld (count_l),a
ENDM
;читаем пакет
read_paket
.out=$+1
ld a,ACK
ld bc,DAT
out (c),a
ld b,high LSR ;wait byte
.l2 in a,(c):and 0x01:jr z,.l2
ld b,high DAT
in a,(c)
ld de,128
cp SOH:jr z,.l1
cp STX:ret nz
ld de,1024
.l1 ld (.count),de
ld b,high LSR ;wait byte
.l3 in a,(c):and 0x01:jr z,.l3
ld b,high DAT
in e,(c)
exx ;init CRC const
ld de,0 ;reset CRC
ld h,high crc_t ;tabl
exx
ld hl,FBUFF
ld b,high LSR ;wait byte
.l4 in a,(c):and 0x01:jr z,.l4
ld b,high DAT
in a,(c)
cpl:cp e:jr nz,.ignor ;повреждённый номер
ld a,(curr_paket):cp e:jr nz,.ignor ;не тот пакет
.count=$+1
ld de,128 ;read data
ld a,1:ld (count_h),a
.loop
SET_WATCH_DOG 50
ld b,high LSR ;wait byte
.w_b
in a,(c):and 0x01:jr z,.w_b
ld b,high DAT
in a,(c)
ld (hl),a:inc hl
exx ;каркулируем црц
xor d:ld l,a
ld a,e
ld e,(hl):inc h
xor (hl):ld d,a
dec h
exx
dec de:ld a,d:or e
jr nz,.loop
call read_byte ;read CRC
exx:ld h,a:exx
call read_byte
exx:ld l,a
xor a:sbc hl,de:exx:ret z
ld a,1 ;кривой црц
ret
;uart init
init
LD BC,LCR
LD A,%10000000
OUT (C),A
LD B,HIGH DLL
LD A,1
OUT (C),A
INC B
XOR A
OUT (C),A
LD B,HIGH LCR
LD A,3
OUT (C),A
.res_fifo
ld bc,FCR ;reset fifo
ld a,3:out (c),a
ld b,high LSR ;проверяем на высеры из ПЦ
in a,(c):and 0x01:ret z
ld b,high DAT
in a,(c)
jr .res_fifo
;генерируем црц таблицу
crc_gen
ld hl,crc_t
.l1 ld d,l:ld e,0
ld b,8
.l2
sla e:rl d:jr nc,.l3
ld a,d:xor 0x10:ld d,a
ld a,e:xor 0x21:ld e,a
.l3
djnz .l2
ld (hl),e:inc h
ld (hl),d:dec h
inc l
jr nz,.l1
ret
Return to Пентева - софт и железо
Users browsing this forum: No registered users and 1 guest