Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Вот код, asm AVR. Поллинг, без задержек, не боится дребезга.

Отправлено maik-vs 16 сентября 2008 г. 15:13
В ответ на: Алгоритм работы с инкрементальным энкодером. отправлено dshabrov 16 сентября 2008 г. 13:10


biphali: /////////// bi-phase driver
// calls from main in fast cycle
//

ldi tmp1,$c0
sbis BI1PORT-2,BI1BIT
cbr tmp1,$40
sbis BI2PORT-2,BI2BIT ; сигналы на разных портах
cbr tmp1,$80
eor tmp1,biphase ; <1> = B2B1 0 0 0 0 0 0
cpi tmp1,$40
brlo bisel0 ; return if B1B2 readed same as prev. saved

eor tmp1,biphase ; cc000000
lsr biphase
lsr biphase ; biphase bbaaS000 --> 00bbaaS0
or tmp1,biphase ; ccbbaaS0
cbr tmp1,$f ; ccbb0000
sbrc biphase,1
sbr tmp1,1<<3 ; ccbbS000 === OK
mov biphase,tmp1
cpi tmp1,$90
brsh biret ; phases 9..f: do nothing
swap tmp1
sbrc tmp1,7
subi tmp1,-$89 ; $80..$89 --> 9..17d
LDADDR Z,bisel0 ; 2,4:set minus 1,5: set plus 8 Forw 7 Rev
cpi tmp1,18
brsh biret ; fuse: <tmp1>= 0..17
ADD21 ZH,Zl,tmp1
ijmp ; 984
bisel0: ret bisel1: ret bisel2: rjmp bisem bisel3: ret
bisel4: rjmp bisem bisel5: ret bisel6: ret bisel7: ret
bisel8: rjmp bifo

bisel9: ret bisel10: rjmp bisep bisel11: rjmp bire bisel12: ret
bisel13: ret bisel14: ret bisel15: ret bisel16: ret
bisel17: rjmp bisep


bisem: ldi tmp1,8 ; set minus
or biphase,tmp1
ret

bisep: ldi tmp1,~8 ; set plus
and biphase,tmp1
ret

bifo: lds tmp2,bico ; step forward
inc tmp2
rjmp biend

bire: lds tmp2,bico ; step backward
dec tmp2
biend: sts bico,tmp2

biret: ret
; bico накапливает шаги в быстром цикле, потом раз в 40 мс они прибавляются к основному значению и отображаются


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите шесть пополам:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru