Jump to content

Welcome to vip-cxema.org

logo3.png

The forum has a section for guests, where you can ask your questions without registration: Вопросы и ответы

By registering, you will be able to send private messages, receive notification of replies to topics. You can always send a message, many restrictions are removed.


Evgeniy

Программирование на PicBasic Pro Урок №2

Recommended Posts

При написании программ, не забываем про конфигурирование микроконтроллера, его внутренней периферии!

Простой проект на pic12f675. При нажатии на кнопку начинают по очереди моргать 2 светодиода, при повторном нажатии светодиоды отключаются.

В архиве проект протеуса, прошивка и исходный код.

 

 

 

'****************************************************************
@ device pic12F675, CPD_OFF, PROTECT_ON, MCLR_OFF, PWRT_ON, WDT_Off, INTRC_OSC_NOCLKOUT
'****************************************************************

'****************************************************************
trisio = %11111100
CMCON = %00000111 ' Отключаем встроенный компаратор
ANSEL = %00000000 ' Set AN0 analog
adcon0 = %00000000 'АЦП
OPTION_REG.7 = 0
WPU = %00010000 ' Подтягивающие резисторы (автоматически выключаются при установке порта на вывод)
'****************************************************************


'****************************************************************
key var gpio.4
stat var bit
buf var byte
'****************************************************************
stat = 0
gpio = 0
'****************************************************************

'****************************************************************
main:
button key,0,255,255,buf,1,ledmod
if stat = 0 then main
GPIO = %000000001
pause 500
GPIO = %000000010
pause 500
goto main
'****************************************************************


'****************************************************************
LedMod:
if stat = 0 then
stat = 1
else
stat = 0
gpio = 0
endif
pause 200
goto main
'****************************************************************

 

 

lesson_2.zip

Share this post


Link to post
Share on other sites
 
: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
 

Если я правильно понял вопрос, то можно. При нажатии на кнопку начинает выполняться другая программа.

Share this post


Link to post
Share on other sites
 

Добавь в твой код: 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
 

У тебя длинные паузы, поэтому с командами типа 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
 

Здравствуйте. Не подскажете, как реализовать алгоритм, при котором возможно будет менять скорость переключения светодиодов с помощью 2-х кнопок (больше-меньше)?. Я так понял, вместо паузы (pause) нужно вставить переменную и реализовывать в  ней. Не подскажете что нужно добавить в эту переменную, какой код?

Share this post


Link to post
Share on other sites
 

Типа такого:

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
 

Типа такого:

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
 
 

Попробуй программу из архива. Там же проект в протеусе! Там же ответ, как добавить кнопку для уменьшения паузы.

Спасибо большое!

Share this post


Link to post
Share on other sites
 
 
 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...



×
  • Create New...