Сейчас во пишу подобие операционки для него , ато больно размашистая программа получается уже.
Мало блен времени им заниматься

научился работать с джойстиком PSX, скоро будет печатка и пульт для всего этого
CALLIKA писал(а):А тсопы чтоли с каждой стороны по одному ?
кулер 23 писал(а):CALLIKA писал(а):А тсопы чтоли с каждой стороны по одному ?
вообще он там один на рооте.....больше нигде не вижу...
;***********************************************************************
;*
;*
;*
;* Library infrared data resiving and transmitting
;*
;* file: ir_data.asm
;* developer: Nikitoz
;*
;* using TIMER0
;*
;* interrupt vector:
;* rjmp ir_timer (tim0 ovf)
;*
;*
;***********************************************************************
;*
;* Prototypes
;*
;* ir_send - послать байт из temp по ИК
;* ir_resive - при обнаружении сигнала на ноге TSOP принять байт
;* ir_resive_wait - одидать приема байтаи
;*
;*
;***********************************************************************
;.equ irport = portB
;.equ irled = 0
;.equ TSOPpin = pinD
;.equ TSOP = 3
.def takts = r18 ;количество полупериодов в пачке
.def bits = r19 ;счетчик битов в пачке
.def ir_dr = r20 ;резервный регистр данных
/*
ir_send:
push ir_dr
push takts ;эти байты можно незаморачиваясь использовать
push bits
push temp1
mov ir_dr, temp ;резервируем данные, там стартбит пока будет
in temp1, timsk ;сохранение в стеке текущих астроек таймера
push temp1
in temp1, tccr0
push temp1
ldi temp1, 1 ;инициализация таймера
out tccr0, temp1
ldi temp1, (1 << toie0)
out timsk, temp1
ldi takts, 192;96
clr bits
ldi temp, 1 ;стартовый бит еденица
sei
overprov:
cpi bits, 9
brne overprov
pop temp1 ;извлекаем из стека предыдущие настройки таймера
out tccr0, temp1 ;и инициализируем как было
pop temp1
out timsk, temp1
pop temp1 ;извлекаем из стека предыдущие значения локальных переменных
pop bits
pop takts
pop ir_dr
ret
;-----------------------------------
ir_timer:
ldi temp1, ir_long
out tcnt0, temp1
sbrs temp, 0 ;если в данных нулевой бит установлен то пляшем ,или сначала стартбит
rjmp pc + 7
cpi takts, 129;65 ;это чтобы первая половина колебалась, вторая молчала
brmi ir_timer_1
sbrs takts, 0 ;если нечетное то 0
sbi irport, irled
sbrc takts, 0 ;если четное то 1
cbi irport, irled
ir_timer_1:
dec takts ;если пачка кончилась то на следущий бит
brne end_ir_timer
inc bits ;следущий бит
clr takts;, 128 ;нормальные биты по 33 полупериода в пачке
lsr temp ;LSB вперед
cpi bits, 1 ;первый - старт бит
brne pc + 2
mov temp, ir_dr ;начиная со второго по счету бита данные
cpi bits, 9 ;конец посылки
brne pc + 5
clr temp ;включаем таймер
out timsk, temp
out tccr0, temp
cli ;запрещаем прерывания
end_ir_timer:
reti
*/
;-----------------------------------
ir_resive_wait: ;если старт бит ещё ожидается
sbic TSOPpin, TSOP
rjmp ir_resive_wait
ir_resive: ;если старт бит уже пришел
push temp1
ldi temp1, 8
ir_resive_1: ;прием бита
ldi YL, low ( 3552 ) ;( 1778 )
ldi YH, high ( 3552 ) ;( 1778 )
rcall delay_1mks
lsr temp
sbic TSOPpin, TSOP
cbr temp, 0x80
sbis TSOPpin, TSOP
sbr temp, 0x80
dec temp1
brne ir_resive_1
ldi YL, low ( 3552 ) ;( 1778 ) ;когда последний бит уже пинят в эфире ещё идёт посылка
ldi YH, high ( 3552 ) ;( 1778 ) ;на неё может отреагировать следующий цикл приема
rcall delay_1mks ;выжидаем пока передатчик не закончит вещать
pop temp1
ret
;-----------------------------------
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0