возврат не в начало цикла
|
|
mnbv |
Дата: Сб, 28.09.2013, 17:19 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Понадобилось выполнить однократное действие в начале программы. Написал, но это действие выполняется циклически, так, как бы оно выполнялось внутри петли. См. упрощённую донельзя программу, речь идёт о GPIO.1 = 1 на 2 секунды. В чём может быть дело?Код Device 12F683 Declare Reminders = OFF ' Xtal = 4 Config INTOSCIO, CP_OFF, CPD_OFF, PWRTE_OFF, MCLRE_ON, BOD_On, WDT_ON ' CMCON0 =7 ' TRISIO = %00001001 Dim p As Word ' '******* begin: GPIO.1 = 1 DelayMS 2000 GPIO = 0 '********************************* loop: ' For p=0 To 3 GPIO.1 = 1 DelayUS 300 ' GPIO.1 = 0 DelayUS 300 ' Next p DelayMS 100 GoTo loop '********************************* End
|
|
|
|
Monolith |
Дата: Сб, 28.09.2013, 17:28 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
30
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
Ну как бы вид основного цикла программы вот:
start: **** **** **** goto start
с подпрограммами:
start: **** **** gosub label1 **** goto start
label1: Return
|
|
|
|
mnbv |
Дата: Сб, 28.09.2013, 17:33 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Это понятно. Но почему нельзя сделать так, как в моём примере?
|
|
|
|
Monolith |
Дата: Сб, 28.09.2013, 17:42 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
30
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
mnbv, У каждого языка программирования существует архитектура и если эту архитектуру нарушать нарушиться и сам алгоритм выполнения.... мне вот не нравиться АСМ хотя будучи студентом его штудировал.... лучше писать на том языке который позволяет мыслить и видеть картину в общем, а не использовать то что все и просто не понимая вставлять шаблоны.
|
|
|
|
mnbv |
Дата: Сб, 28.09.2013, 17:54 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Согласен. Но: мне нужно инициировать переменные, придав им начальные значения, затем войти в цикл, где значения этих переменных будут модифицированы. Получается, что при возврате на начало цикла я вновь вернусь к начальным значениям переменных? Более того, ранее написанные программы, с начальным присвоением значений прекрасно работают. Proton 3.5.2.6. , не переустанавливал. Что же произошло? Если бы я разбирался в асме, можно было бы посмотреть куда возвращается цикл, но это - если бы.
Сообщение отредактировал
mnbv - Сб, 28.09.2013, 17:59
|
|
|
|
Monolith |
Дата: Сб, 28.09.2013, 18:14 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
30
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
переменных я не вижу вернее объявления их то что я вижу по коду.... включить порт задержка 2 с выключить затем цикл и потом зачем то снова возврат в цикл.....
у вас основной цикл: loop: ' For p=0 To 3 GPIO.1 = 1 DelayUS 300 ' GPIO.1 = 0 DelayUS 300 ' Next p DelayMS 100 GoTo loop
Добавлено (28.09.2013, 18:14) --------------------------------------------- т.е. чтобы просто вкл\выкл диода сделать
Device 12F683 Declare Reminders = OFF ' Xtal = 4 Config INTOSCIO, CP_OFF, CPD_OFF, PWRTE_OFF, MCLRE_ON, BOD_On, WDT_ON ' CMCON0 =7 ' TRISIO = %00001001 Dim p As Word ' '******* loop: ' GPIO.1 = 1 DelayMS 2000 GPIO = 0 GoTo loop '*********************************
|
|
|
|
mnbv |
Дата: Сб, 28.09.2013, 18:15 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Я привёл простейший пример, иллюстрирующий непонятку, в нём нет никаких начальных значений переменных, модифицируемых в ходе выполнения цикла. Мне не нужно дрыгать лапкой, это демо_прога для упрощения описания проблемы Если нетрудно и версия протона совпадает, скомпилируйте hex, станет попонятнее.
Сообщение отредактировал
mnbv - Сб, 28.09.2013, 18:17
|
|
|
|
Monolith |
Дата: Сб, 28.09.2013, 18:20 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
30
Замечания:
±
На сайте с 04.08.2013
Статус:
Offline
|
ЗАДАЧУ сформулируйте и сейчас нарисую и схемку и прошивку...
|
|
|
|
mnbv |
Дата: Сб, 28.09.2013, 18:27 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Спасибо, не надо, там относительно большая и уже работающая прога (мышеловка :-P ), решил к ней дописать маленькое удобное дополнение, и обнаружил проблему. Просто hex из сообщения №1.
|
|
|
|
MiXaS |
Дата: Сб, 28.09.2013, 20:10 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Интересный случий! Как-то на янковском сайте видел такую констркуцию:
Main: a = 0
While a = 0
... ... ... ... ...
Wend
Может поможет
Добавлено (28.09.2013, 20:10) --------------------------------------------- Блин! Сразу не глянул, Вам поверил! У вас собака включена! WDT_ON. Надеюсь знаете что это?? Ставите OFF и все работает
Сообщение отредактировал
MiXaS - Сб, 28.09.2013, 20:10
|
|
|
|
anatol |
Дата: Сб, 28.09.2013, 20:45 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Ветвления, ветвления... Что проще - две подпрограммы в основной, причем вторая в бесконечном цикле Она тоже может быть из подпрограмм.Код device 12F683 Declare Reminders = OFF ' Xtal = 4 Config INTOSCIO, CP_OFF, CPD_OFF, PWRTE_OFF, MCLRE_ON, BOD_On, WDT_ON ' CMCON0 =7 ' TRISIO = %00001001 Dim p As Word ' '******* begin: GPIO.1 = 1 DelayMS 2000 GPIO = 0 GoTo loop
End '********************************* loop: ' For p=0 To 3 GPIO.1 = 1 DelayUS 300 ' GPIO.1 = 0 DelayUS 300 ' Next p DelayMS 100 GoTo loop '*********************************
|
|
|
|
mnbv |
Дата: Вс, 29.09.2013, 00:39 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Спасибо, MiXaS. Увы мне! С год назад был подобный случай, разобрался и забыл. А сейчас собака была включена (в исходной программе)из-за snooze. При попытке локализации проблемы всё обрезал, а конфиг забыл. Знал бы асм, посмотрел бы, куда возврат. Как решить проблему знаю - WDTCON.0 туды-сюды. Тему можно закрыть.
Сообщение отредактировал
mnbv - Вс, 29.09.2013, 00:48
|
|
|
|
MiXaS |
Дата: Вс, 29.09.2013, 15:22 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата Знал бы асм, посмотрел бы, куда возврат. Как решить проблему знаю - WDTCON.0 туды-сюды.
Можно работать и без знания АСМ. По крайней мере много задач можно решить.
Включить собаку можно ещё и вот так Код Config INTOSCIO, CP_OFF, CPD_OFF, PWRTE_OFF, MCLRE_ON, BOD_On, WDT_OFF '
В Вашем примере мне помог протеус. Я отследил как двигалась метка и понял что контроллер перезагружается, потом меня осинило, что скорее всего собака включена. Выключил, проверил, все работает. Как-то так.
Сообщение отредактировал
MiXaS - Вс, 29.09.2013, 15:25
|
|
|
|
mnbv |
Дата: Вс, 29.09.2013, 16:30 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Я имел в виду, что в конфиге WDT_OFF , а в программе: WDTCON.0 = 1 ' собака включена Snooze 4 ' 288 мсек WDTCON.0 = 0 ' собака выключена
Так и собаки сыты и овцы целы
|
|
|
|
MiXaS |
Дата: Вс, 29.09.2013, 17:10 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
А!! Тогда ясно! У меня же не было полного кода
|
|
|
|