|
|
  |
tiny2313 & mega8, посоветуйте плз |
|
|
|
Dec 17 2006, 00:08
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 30-09-05
Пользователь №: 9 098

|
Извините, что вмешиваюсь в ваш диалог. Вот прерывание таймера1 из вложенной программы
timer1: push zh ; push zl ; push rin ; push rin1 ; push rin2 ; in rin1,sreg ; запомнить регистр состояния
wdr
ldi radr,npop_0 ; выключить нагрев rcall decod ldi radr,dater_0 rcall decod ldi radr,nprod_0 rcall decod
sbrc reg_flgs,2 ; переход если это rjmp mer5 ; окончание импульса ldi rin,0b00001010 ; ; out wdtcr,rin ; установить WDT на 65мс.
ldi rin,$fc ; установить timer1 на 0.0005с. out tcnt1h,rin ; FFFF-FC17=3E8=1000 тактов ldi rin,$17 ; out tcnt1l,rin ;
; ldi rin,$f8 ; установить timer1 на 0.001с. * ; out tcnt1h,rin ; FFFF-F82F=7d0=2000 тактов * ; ldi rin,$2f ; * ; out tcnt1l,rin ; *
sbr reg_flgs,0b00000100; на выдерж. 0,001с.
clr zh ; ldi zl,NCHEAT ; прочитать канал нагрева ld rin2,z ; tst rin2 ; если ноль, то brne mer1 ldi radr,npop_1 ; включить поперечный нагрев rcall decod
mer3: out sreg,rin1 ; pop rin2 ; pop rin1 ; pop rin ; pop zl ; pop zh ; reti ; Выход
Есть замечания 1. Регистр sreg прячется не в стек а в регист rin1 В тоже время из прерывания timer1 вызывается процедура decod в которой тоже используются регистры. Лучше написать так
push rin1 in rin1, sreg push rin1 (тело прерывания) pop rin1 out sreg,rin1 pop rin1
Так у тебя написан этот код для Timer0
2. Прошелся поиском по файлу, где ты пишешь в регист TIMSK Есть три места - в начале программы разешаем оба таймера 0 и 1, В прерывании Timer1 идет запрет этого же прерывания Есть еще судя по комментариям разрешение прерывания от Таймера1 в прерывании от компаратора? Судя по симптомам работы прошивки где-то это прерывание в основной программе постоянно не разрешается и срабатывает только один раз и время для насоса не идет.
|
|
|
|
|
Dec 18 2006, 14:49
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672

|
Типа: Код IN R16, GICR SBRC R16,1<<INT1 ЗАЖЕЧЬ "ДИОД" .... Дальше по програме. А "диод" ты зажигать умеешь
Сообщение отредактировал Wild007 - Dec 18 2006, 14:50
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 18 2006, 16:48
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672

|
Вот так: Код sbrs svet, 0b00010000 rjmp BBB sbr svet,0b00010000 rjmp AAA BBB: cbr svet,0b00010000 AAA: ......
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 19 2006, 11:18
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672

|
Не понял. Ты же сам писал, что: Цитата(Terapefft @ Dec 13 2006, 10:44)  Я поставил все эти команды в п/п обработки прерывания INT1: cnt_int1: push rin in rin1,sreg ; запомнить регистр push rin1 ; inc cntdat ; cpi cntdat,$01 ; brne NNN ldi radr,gpop_0 ; развести поперечные губки rcall decod ldi radr,gprod_0 ; развести продольные губки rcall decod ldi radr,torm_0 ; отпустить тормоз rcall decod ldi radr,pc1_0 ; выключить счетчик rcall decod ldi radr,doza_0;отключить насос rcall decod sbr reg_flgs,0b00000001 ;флаг насоса ; clr cntdat sbr svet,0b00010000 ; светить Т1 clr rin ; запрет прерывания out gicr,rin ;NNN: pop rin1 ; out sreg,rin1 pop rin reti и теперь насос отключается И если после 5 "морганий" выполняется этот код, то насос должен выключаться?
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 19 2006, 11:40
|

Частый гость
 
Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052

|
сейчас у меня п/п такая: cnt_int1: push radr push rin in rin1,sreg ; push rin1
sbrs svet,4 rjmp BBB cbr svet,0b00010000 rjmp AAA BBB: sbr svet,0b00010000 AAA:
inc cntdat cpi cntdat,5 brne NNN ldi radr,dat_0 ; rcall decod ; ldi radr,gprod_0 ; rcall decod ; ldi radr,gpop_0 ; rcall decod ldi radr,torm_0 ; rcall decod ldi radr,pc1_0 ; rcall decod ldi radr,doza_0; rcall decod
clr cntdat
; clr rin ; запрет прерывания INT1 ; out gicr,rin NNN: pop rin1 ; out sreg,rin1 pop rin pop radr reti я специально не запрещал прерывания, пока насос не сработает, чтобы посмотреть после пяти импульсов выключится или нет. Сейчас то он нормально считает и выключает. Просто мне надо отвязатся от этих команд : ldi radr,dat_0 ; rcall decod ; ldi radr,gprod_0 ; rcall decod ; ldi radr,gpop_0 ; rcall decod ldi radr,torm_0 ; rcall decod ldi radr,pc1_0 ; rcall decod Они выполняются в главном цикле, но без них насос почему то не отключается
|
|
|
|
|
Dec 19 2006, 11:45
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672

|
Цитата(Terapefft @ Dec 19 2006, 10:40)  Просто мне надо отвязатся от этих команд : ldi radr,dat_0 ; rcall decod ; ldi radr,gprod_0 ; rcall decod ; ldi radr,gpop_0 ; rcall decod ldi radr,torm_0 ; rcall decod ldi radr,pc1_0 ; rcall decod Они выполняются в главном цикле, но без них насос почему то не отключается Т.е. ты хочешь заменить эту "кучку"  команд на одну?
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|