Evgeniy 274 Report post Posted May 31, 2016 При написании программ, не забываем про конфигурирование микроконтроллера, его внутренней периферии! Простой проект на pic12f675. При нажатии на кнопку начинают по очереди моргать 2 светодиода, при повторном нажатии светодиоды отключаются. В архиве проект протеуса, прошивка и исходный код. '****************************************************************@ device pic12F675, CPD_OFF, PROTECT_ON, MCLR_OFF, PWRT_ON, WDT_Off, INTRC_OSC_NOCLKOUT'****************************************************************'****************************************************************trisio = %11111100CMCON = %00000111 ' Отключаем встроенный компараторANSEL = %00000000 ' Set AN0 analogadcon0 = %00000000 'АЦПOPTION_REG.7 = 0WPU = %00010000 ' Подтягивающие резисторы (автоматически выключаются при установке порта на вывод)'****************************************************************'****************************************************************key var gpio.4stat var bitbuf var byte'****************************************************************stat = 0gpio = 0'****************************************************************'****************************************************************main:button key,0,255,255,buf,1,ledmodif stat = 0 then mainGPIO = %000000001pause 500GPIO = %000000010pause 500goto main'****************************************************************'****************************************************************LedMod:if stat = 0 thenstat = 1elsestat = 0gpio = 0endifpause 200goto main'**************************************************************** lesson_2.zip Share this post Link to post Share on other sites
yuriu8 0 Report post Posted June 10, 2016 :m led = %00001001 'red red pause 4000 led = %00011001 ' redy to go pause 2500 led = %00100001 'green pause 15000 led = %00010001 pause 4000 goto m 1 вопрос пожалуйста я вот запустил этот код (праграму) вазможна ли при нажатие другой кнопки штоб ето программа обарвалачья о другая включилачья или нет например goto в Share this post Link to post Share on other sites
VitalForce 67 Report post Posted June 13, 2016 Если я правильно понял вопрос, то можно. При нажатии на кнопку начинает выполняться другая программа. Share this post Link to post Share on other sites
Evgeniy 274 Report post Posted June 14, 2016 Добавь в твой код: button portA.0, 0,255,255,buf,1,programma2 В начале программы: buf var byte portA.0 - куда кнопка прицеплена. Не забываем про подтягивающий резистор на +5В. programma2 - метка с другой подпрограммой Если требуется вернуться, во вторую подпрограмму вставляем такую же строчку: button portA.0, 0,255,255,buf1,1,programma1 Только буфер другой (buf1), естественно, его тоже объявить надо в начале программы. Если кнопка будет другая, то пишем соответствующий порт. Если дребезг контактов нестрашен, то можно просто условие вставить: IF portA.0 = 0 THEN programma2 При нажатии на кнопку, нить выполнения программы выполнив условие перейдёт на метку programma2. В данном случае для перехода обратно лучше использовать другую кнопку. Share this post Link to post Share on other sites
Evgeniy 274 Report post Posted June 14, 2016 У тебя длинные паузы, поэтому с командами типа button придётся кнопку долго держать, пока выполнение программы не дойдёт до опроса кнопки. Для решения этой проблемы можно пойти двумя способами: 1. Использовать прерывания. 2. Взамен длинной паузы создать подпрограмму типа: pauses: for i = 0 to 100 button portA.0, 0,255,255,buf,1,programma2 pause 10 next i return там где необходима пауза, вставляем gosub pauses, можно несколько раз, для увеличения времени задержки. Во время такой паузы будет производиться опрос кнопки. Share this post Link to post Share on other sites
insomnium 0 Report post Posted January 12, 2017 Здравствуйте. Не подскажете, как реализовать алгоритм, при котором возможно будет менять скорость переключения светодиодов с помощью 2-х кнопок (больше-меньше)?. Я так понял, вместо паузы (pause) нужно вставить переменную и реализовывать в ней. Не подскажете что нужно добавить в эту переменную, какой код? Share this post Link to post Share on other sites
Evgeniy 274 Report post Posted January 13, 2017 Типа такого: For i=0 to timepause Pause 100 Gosub опрос кнопок Next i Меняя значение timepause, мы будем менять длительность паузы кратно 100мс. Можно тупо в передних операторе pause вместо числа установить переменную: Pause timepause Но в таком варианте периодичность опроса кнопок будет меняться вместе со значением паузы. Share this post Link to post Share on other sites
insomnium 0 Report post Posted January 13, 2017 Типа такого: For i=0 to timepause Pause 100 Gosub опрос кнопок Next i Меняя значение timepause, мы будем менять длительность паузы кратно 100мс. Можно тупо в передних операторе pause вместо числа установить переменную: Pause timepause Но в таком варианте периодичность опроса кнопок будет меняться вместе со значением паузы. Если вас не затруднит, объясните начинающему что я сделал не так. Пишу программу второй раз в жизни. Буду очень благодарен. У меня должен моргать один светодиод, с управлением скорости по одной кнопке (пока). В протеусе светодиод моргает с задержкой по умолчанию и скорость с кнопки не меняется. 'pic16f84a TrisA = %00000001 TrisB = %00000000 Led Var PortB.0 But var PortA.0 timepause var word i var byte Knopki: PortB = 0 Button but,0,255,255,timepause,1,speed 'изменение значения паузы кнопкой gosub main main: 'программа мигания одного светодиода led = 1 pause timepause + 300 'пауза по умолчанию 300 м.с. Led = 0 pause timepause + 300 'пауза по умолчанию 300 м.с. goto main speed: For i = 0 to timepause Pause 100 Gosub Knopki Next i Share this post Link to post Share on other sites
Evgeniy 274 Report post Posted January 13, 2017 Попробуй программу из архива. Там же проект в протеусе! Там же ответ, как добавить кнопку для уменьшения паузы. led.rar Share this post Link to post Share on other sites
insomnium 0 Report post Posted January 13, 2017 Попробуй программу из архива. Там же проект в протеусе! Там же ответ, как добавить кнопку для уменьшения паузы. Спасибо большое! Share this post Link to post Share on other sites
max_online87 0 Report post Posted January 26, 2017 Какой используется Протеус? У меня 7.10 Share this post Link to post Share on other sites
Evgeniy 274 Report post Posted January 27, 2017 Под уроками ссылки на исходники и протеус. Share this post Link to post Share on other sites