phiss25 0 22 ноября, 2007 Опубликовано 22 ноября, 2007 (изменено) · Жалоба Сомневаюсь в правильности написания.Может кто глянет,какие ошибки. По идее должна считать период модель AT90S2313 rjmp Init rjmp ext0 reti rjmp CUPT1 Init:программа инициализации -//-//-//-//-//-//-//-//- -//-//-//-//-//-//-//-//- -//-//-//-//-//-//-//-// ext0: in PеrL,ICR1L; in PеrH,ICR1H; CUPT1: in temp,ICR1L ;сохраняем захваченное значение in tempH,ICR1H ;в рабочих регистрах sub temp,PеrL ;вычисляем разность между sbc tempH,PеrH ;старым и новым значением in PеrL,ICR1L ;запоминаем новое in PеrH,ICR1H ;значение Изменено 22 ноября, 2007 пользователем Сергей X Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 24 ноября, 2007 Опубликовано 24 ноября, 2007 · Жалоба Сомневаюсь в правильности написания.Может кто глянет,какие ошибки. По идее должна считать период модель AT90S2313 К сожалению, не знаком с системой команд этого проца. Тем не менее, попробую прокомментировать то, что понял rjmp Init ; После прыжка на Init вы, похоже, никогда не вернетесь назад, поскольку ; у вас здесь нет меток, куда бы можно было прыгнуть. А коль не вернетесь, ; то нафига вам следующие три команды? rjmp ext0 reti rjmp CUPT1 Init:программа инициализации -//-//-//-//-//-//-//-//- -//-//-//-//-//-//-//-//- -//-//-//-//-//-//-//-// ext0: in PеrL,ICR1L; in PеrH,ICR1H; CUPT1: in temp,ICR1L ;сохраняем захваченное значение in tempH,ICR1H;в рабочих регистрах ; А сколько времени успело пройти с того момента, когда вы ; исполнили команды под меткой ext0: ? Всего ничего. Вряд ли ; это соответствует вашим намерениям. sub temp,PеrL;вычисляем разность между sbc tempH,PеrH ;старым и новым значением ; Неверно, поскольку вычитаются 16-битные числа. Значит, ; обязательно должен обрабатываться перенос из старшего байта в младший in PеrL,ICR1L;запоминаем новое in PеrH,ICR1H;значение ; За время, пока вы вычисляете разность, ICR1L и ICR1H могут ; успеть измениться. Сохранять надо бы temp и tempH. ; А где цикл? А куда выводятся результаты? В общем, впечатление такое, что это работать не будет никак, уж извините. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
phiss25 0 26 ноября, 2007 Опубликовано 26 ноября, 2007 · Жалоба rjmp Init; вектор сброса rjmp ext0; вектор запуска по внешнему прерыванию reti; rjmp CUPT1; вектор прерывания по захвату ;______________________________________________________________________ Init: ldi temp,64 ; out GIMSK,temp ; ldi temp,15 ; out WDTCR,temp ; ldi temp,low(RAMEND); out SPL,temp ; ldi temp,255 ; out DDRB,temp ldi temp,0 ; out DDRD,temp ldi temp,0 ; out PortD,temp ; clr temp ; out UCR,temp ; ldi temp,128 ; out ACSR,temp ; clr temp ; out TCCR1A,temp ; ldi temp,65 ; out TCCR1B,temp ; ldi temp,51 ; ldi temp,0 ; out TCCR0,temp ; ldi temp,8 ; out TIMSK,temp ; ldi temp,128 ; out SREG,temp ; SON:sleep ;_____________________________________________________________________ ;Программа измерения: ext0: CUPT1: in PrL,ICR1L ;сохраняем захваченное значение(по первому пришедшему импульсу) in PrH,ICR1H ;значения таковы,что перенос разряда не нужен tst tempL ;ждем второй импульс,т.е. проверяем записалось ли знечение второго импульса brne M1 ;в регистр tempL,если да, то вычисляем разницу,если нет-ждем mov tempL,PrL ; mov tempH,PrH ;след. импульс M:nop ; rjmp M ; M1:sub tempL,PrL ;значения таковы,что перенос разряда не нужен sbc tempH,PrH ; reti ; И еще,есть мысль обнулять TCNT1 перед началом измерения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться