Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » возврат не в начало цикла
возврат не в начало цикла
mnbv Дата: Сб, 28.09.2013, 17:19  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 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


ЯНДЕКС Дата: 28.09.2013
Monolith Дата: Сб, 28.09.2013, 17:28  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

Ну как бы вид основного цикла программы вот:

start:
****
****
****
goto start

с подпрограммами:

start:
****
****
gosub label1
****
goto start

label1:
Return
mnbv Дата: Сб, 28.09.2013, 17:33  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Это понятно. Но почему нельзя сделать так, как в моём примере?
Monolith Дата: Сб, 28.09.2013, 17:42  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

mnbv, У каждого языка программирования существует архитектура и если эту архитектуру нарушать нарушиться и сам алгоритм выполнения.... мне вот не нравиться АСМ хотя будучи студентом его штудировал.... лучше писать на том языке который  позволяет мыслить и видеть картину в общем, а не использовать то что все и просто не понимая вставлять шаблоны.
mnbv Дата: Сб, 28.09.2013, 17:54  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Согласен. Но: мне нужно инициировать переменные, придав им начальные значения, затем войти в цикл, где значения этих переменных будут модифицированы. Получается, что при возврате на начало цикла я вновь вернусь к начальным значениям переменных?
Более того, ранее написанные программы, с начальным присвоением значений прекрасно работают. Proton 3.5.2.6. , не переустанавливал. Что же произошло? Если бы я разбирался в асме, можно было бы посмотреть куда возвращается цикл, но это - если бы.

Сообщение отредактировал mnbv - Сб, 28.09.2013, 17:59
Monolith Дата: Сб, 28.09.2013, 18:14  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Я привёл простейший пример, иллюстрирующий непонятку, в нём нет никаких начальных значений переменных, модифицируемых в ходе выполнения цикла. Мне не нужно дрыгать лапкой, это демо_прога для упрощения описания проблемы Если нетрудно и версия протона совпадает, скомпилируйте hex, станет попонятнее.
Сообщение отредактировал mnbv - Сб, 28.09.2013, 18:17
Monolith Дата: Сб, 28.09.2013, 18:20  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 30
Репутация: 0   ±
Замечания:   ±
На сайте с 04.08.2013

Статус: Offline

ЗАДАЧУ сформулируйте и сейчас нарисую и схемку и прошивку...
mnbv Дата: Сб, 28.09.2013, 18:27  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Спасибо, не надо, там относительно большая и уже работающая прога (мышеловка :-P ), решил к ней дописать маленькое удобное дополнение, и обнаружил проблему.  Просто hex из сообщения №1.
MiXaS Дата: Сб, 28.09.2013, 20:10  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 14   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Спасибо, MiXaS. Увы мне! С год назад был подобный случай, разобрался и забыл. А сейчас собака была включена  (в исходной программе)из-за snooze. При попытке локализации проблемы всё обрезал, а конфиг забыл. Знал бы асм, посмотрел бы, куда возврат.
Как решить проблему знаю - WDTCON.0 туды-сюды. Тему можно закрыть.

Сообщение отредактировал mnbv - Вс, 29.09.2013, 00:48
MiXaS Дата: Вс, 29.09.2013, 15:22  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Я имел в виду, что в конфиге WDT_OFF , а в программе:
    WDTCON.0 = 1                ' собака включена
    Snooze 4                    ' 288 мсек
    WDTCON.0 = 0                ' собака выключена

Так и собаки сыты и овцы целы smile
MiXaS Дата: Вс, 29.09.2013, 17:10  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

А!! Тогда ясно! У меня же не было полного кода
Форум Picbasic.ru » Программирование МК » Proton PicBasic » возврат не в начало цикла
Страница 1 из 11
Поиск: