реклама на сайте
подробности

 
 
17 страниц V  « < 14 15 16 17 >  
Reply to this topicStart new topic
> tiny2313 & mega8, посоветуйте плз
archi2000
сообщение Dec 17 2006, 00:08
Сообщение #226


Участник
*

Группа: Новичок
Сообщений: 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 в прерывании от компаратора?
Судя по симптомам работы прошивки где-то это прерывание в основной программе постоянно не разрешается и срабатывает только один раз и время для насоса не идет.
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 18 2006, 14:15
Сообщение #227


Частый гость
**

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



а может возникать неразбериха из за того что мк в некоторых п/п в режим sleep уходит, там же в регистр mcucr записывается
ldi rin,0b10010000 ;
out mcucr,rin ;
sleep
или это не играет роли??? Еще у меня возникла идея, можно ли как нить в главном цикле проследить состояние некоторых регистров, то есть по ходу выполнения в главном цикле уйти на п/п которая мне отобразит содержимое нужного мне регистра??? Просто не могу сообразить как эту п/п сделать.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 18 2006, 14:25
Сообщение #228


Местный
***

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



Зачем п\п? Просто читаешь и зажигаешь "диоды". И вставляешь код программы туда куда надо smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 18 2006, 14:34
Сообщение #229


Частый гость
**

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



Цитата(Wild007 @ Dec 18 2006, 14:25) *
Зачем п\п? Просто читаешь и зажигаешь "диоды". И вставляешь код программы туда куда надо smile.gif

что то я не пойму никак...как так читаешь и зажигаешь??? Объяните пожалуста как это реализовать
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 18 2006, 14:49
Сообщение #230


Местный
***

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



Типа:
Код
IN R16, GICR
SBRC R16,1<<INT1
ЗАЖЕЧЬ "ДИОД"
....

Дальше по програме.
А "диод" ты зажигать умеешь smile.gif

Сообщение отредактировал Wild007 - Dec 18 2006, 14:50


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 18 2006, 15:20
Сообщение #231


Частый гость
**

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



Я вот так сделал:
IN radr, GICR
SBRC radr,1<<INT1
sbr svet,0b00010000
а компилятор мне пишет:
C:\avr\datchik\dat.asm(694): error: Operand 2 out of range: 0x80
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 18 2006, 15:33
Сообщение #232


Местный
***

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



Sorry:
SBRC radr,INT1


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 18 2006, 16:26
Сообщение #233


Частый гость
**

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



а как можно сделать так чтобы у меня в обработчике прерывания каждый раз когда происходит прерывание, диод инвертировался (т.е. если диод горел, то потухнет, если не горел, то загорится)???
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 18 2006, 16:48
Сообщение #234


Местный
***

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



Вот так:
Код
sbrs svet, 0b00010000
rjmp BBB
sbr svet,0b00010000
rjmp AAA
BBB:
cbr svet,0b00010000
AAA:
......


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 19 2006, 10:58
Сообщение #235


Частый гость
**

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



я вот так сделал в прерывании от INT1:
sbrs svet,4
rjmp BBB
cbr svet,0b00010000
rjmp AAA
BBB:
sbr svet,0b00010000
AAA:
все нормально вроде моргает. В прерывании сравниваю с "5", диод моргает а насос не выключается. Вот если запустить цикл и после включения насоса нажать "стоп", то потом четко после пяти срабатываний насос отключается.
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 19 2006, 11:17
Сообщение #236


Частый гость
**

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



а когда я в п/п помимо отключения насоса помещаю еще вот эти команды :
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
то все нормально считается и отключается
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 19 2006, 11:18
Сообщение #237


Местный
***

Группа: Свой
Сообщений: 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 "морганий" выполняется этот код, то насос должен выключаться?


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 19 2006, 11:40
Сообщение #238


Частый гость
**

Группа: Свой
Сообщений: 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
Они выполняются в главном цикле, но без них насос почему то не отключается
Go to the top of the page
 
+Quote Post
Wild007
сообщение Dec 19 2006, 11:45
Сообщение #239


Местный
***

Группа: Свой
Сообщений: 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
Они выполняются в главном цикле, но без них насос почему то не отключается

Т.е. ты хочешь заменить эту "кучку" smile.gif команд на одну?


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Dec 19 2006, 12:05
Сообщение #240


Частый гость
**

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



нет, мне надо чтобы в п/п отключался только насос, а он не отключается пока не выполнятся эти команды, но они должны выполнятся только в главном цикле. т.е. между ними судя по всему существует какая то взаимосвязь, основаная непонятно на чем.
Go to the top of the page
 
+Quote Post

17 страниц V  « < 14 15 16 17 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 01:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016