[ boogi @ 16.02.2013. 18:08 ] @
Pozdrav

pišem neki programčić u mikroBasicu za PIC pa imam problem oko sub procedure.

Naime, iz main:-a se poziva sub procedura "provjera_set_tastera" koja provjerava stanje RB7 i ako je stanje 1 i nakon par prozivanja ( npr 5) iste sub procedure se stekne uslov da je a=5 trebao bi da sa tog mjesta skočim na novu sub proceduru "podesavanje_sata" i po završetku ove druge da se vratim u prvu sub proceduru a po zavrsetku nje u main:

Prilikom kreiranja projeka u message prozoru dobijam pruku
192:20 E-3 Identifier 'podesavanje_sata' was not declared SAT.pbas

Kako da riješim problem?

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub procedure provjera_set_tastera

TRISB = 255

tast = testbit( PORTB,7 )

if tast = 1 then a=a+1 else a=0
end if
delay_ms(100)
if a = 5 then podesavanje_sata
end if
if a=5 then a=0
end if

end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub procedure podesavanje_sata



end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
[ boogi @ 16.02.2013. 18:29 ] @
Mislim da bi moglo i ovako:

[ ZAS011 @ 16.02.2013. 20:21 ] @
Kao prvo, preporučio bih ti da programe pišeš malo preglednije i da ti budu "logično nazubljeni":
Code:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub procedure provjera_set_tastera

  TRISB = 255

  tast = testbit( PORTB,7 )

  if tast = 1 then
    a=a+1
  else
    a=0
  end if

  delay_ms(100)
  if a = 5 then
    podesavanje_sata
  end if

  if a=5 then
    a=0
  end if

end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
sub procedure podesavanje_sata



end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Nisam 100% siguran, ali ovom paskalolikom basic-u, čini mi se, trebaju i zagrade "()" čak i ako ne prenisiš nikakav parametar podprogramu (proceduri).

Code:
  if a = 5 then
    podesavanje_sata()
  end if


Eto zašto ne mogu da "svarim" MicroB
[ boogi @ 16.02.2013. 21:05 ] @
Hvala na sugestijama vezano za "nazubljenja".

() ne rade ali ono što sam postavio u drugom postu mi radi posao.
[ ZAS011 @ 16.02.2013. 21:42 ] @
Ono što si napisao u drugom post-u je sve u okviru jedne procedure, nemaš poziv druge procedure, imaš samo GoTo
[ boogi @ 17.02.2013. 21:01 ] @
Tacno. Znam da je tako ali me mrzilo da se smaram i da trošim vrijeme kako pozvati proceduru iz procedure kad mi ovo radi posao.

Bitno mi je bilo da, dok se ne stekne odredjeni uslov, dio programa se ne izvršava. Isprva sam imao ideju da kad se stekne uslov da pozovem drugu proceduru a sad sam napravio da dio prve procedure jednostavno preskočim dok se ne stekne uslov.

Hvala
[ Genie_1984 @ 18.02.2013. 10:00 ] @
Sve što je potrebno je da proceduru koju pozivaš definišeš pre nego što je pozoveš, odnosno :

Code:


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

sub procedure podesavanje_sata



end sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

sub procedure provjera_set_tastera

  TRISB = 255

  tast = testbit( PORTB,7 )

  if tast = 1 then
    a=a+1
  else
    a=0
  end if

  delay_ms(100)
  if a = 5 then
    podesavanje_sata
  end if

  if a=5 then
    a=0
  end if

end sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Zagrade () mogu ali ne moraju...
Pozdrav
[ boogi @ 18.02.2013. 19:57 ] @
Bravo!
Radi!

Eto, čovjek nešto i nauči. Znači, redosljed je bitan.

Hvala!