skraceni kurs ucenja picbasica

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

U cemu gresim? :(

Code: Select all

'----------------------------------------------------------------
symbol T=PORTA.0 'Taster
symbol S1=PORTA.1 'Taster 1
symbol S2=PORTA.2 'Taster 2
symbol LED1=PORTB.0  ' Svetlosna indikacija 1
symbol LED2=PORTB.1   'Svetlosna indikacija 2
'------------------Promenljive-----------------------------------

'----------------Inicijalizacija----------------------------------
TRISA=$FF 'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
'----------------Program------------------------------------------
Pocetak: 

if T = 0 and s1 = 0 and s2 = 0 then Greska  
if T = 0 and s1 = 0 and s2 = 1 then Greska 
if T = 0 and s1 = 1 and s2 = 1 then Greska
if T = 1 and s1 = 1 and s2 = 1 then Greska1
if T = 1 and s1 = 1 and s2 = 0 then greska1
if T = 1 and s1 = 0 and s2 = 0 then Greska1 

 
goto pocetak
'---------------Greska--------------------------------------------
Greska:
high led1
high led2
goto pocetak
'----------------Greska1-----------------------------------------
Greska1:
high led1
LOW led2
goto pocetak

'-------------------Uredu-------------------------------------
Uredu:
Low led1
low led2

goto pocetak
end
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Vido 1 gresku, a dalje :?

Code: Select all

'----------------------------------------------------------------
symbol T=PORTA.0 'Taster
symbol S1=PORTA.1 'Taster 1
symbol S2=PORTA.2 'Taster 2
symbol LED1=PORTB.0  ' Svetlosna indikacija 1
symbol LED2=PORTB.1   'Svetlosna indikacija 2
'------------------Promenljive-----------------------------------

'----------------Inicijalizacija----------------------------------
TRISA=$FF 'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
'----------------Program------------------------------------------
Pocetak: 

if T = 0 and s1 = 0 and s2 = 0 then Greska  
if T = 0 and s1 = 0 and s2 = 1 then Greska 
if T = 0 and s1 = 1 and s2 = 1 then Greska
if T = 1 and s1 = 1 and s2 = 1 then Uredu
if T = 1 and s1 = 1 and s2 = 0 then greska1
if T = 1 and s1 = 0 and s2 = 0 then Greska1 

 
goto pocetak
'---------------Greska--------------------------------------------
Greska:
high led1
high led2
goto pocetak
'----------------Greska1-----------------------------------------
Greska1:
high led1
LOW led2
goto pocetak

'-------------------Uredu-------------------------------------
Uredu:
Low led1
low led2

goto pocetak
end
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: skraceni kurs ucenja picbasica

Post by Kizo »

Code: Select all

if T = 0 and s1 = 0 and s2 = 0 then Greska  
if T = 0 and s1 = 0 and s2 = 1 then Greska 
if T = 0 and s1 = 1 and s2 = 1 then Greska
if T = 1 and s1 = 1 and s2 = 1 then Uredu
if T = 1 and s1 = 1 and s2 = 0 then greska1
if T = 1 and s1 = 0 and s2 = 0 then Greska1

Pretpostavljam da želiš skočiti na navedene labele. Gdje ti je naredba skoka?
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Da, treba da skoci do odredjene labele u kojoj izvrsi neku radnju, odnosno upali LED, koje ce biti upaljene dok se stanje u labeli "program" ne promeni gde bi onda skocio u 2 labelu u kojoj bi upalio neku drugu (ili istu ili obe) LED.
Znaci, program bi trebalo da stalno proverava stanje u labeli program (kombinaciju stisnutih tastera) i na osnovu njega menja kombinaciju upaljenih LED dioda,trenutnim menjanjem kombinacije stisnutih tastera menja se i kombinacija LED dioda koje sijaju. :?:
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: skraceni kurs ucenja picbasica

Post by Kizo »

Isprva sam mislio da si zaboravio nadopisati goto

Code: Select all

if T = 0 and s1 = 0 and s2 = 0 then GOTO Greska
no sad sam u helpu vidio da se može i izostaviti tako da nema greške, program uredno prolazi kompajliranje.
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Ma da, ali ipak ne radi kako treba

Code: Select all

symbol T=PORTA.0 'Taster
symbol S1=PORTA.1 'Taster 1
symbol S2=PORTA.2 'Taster 2
symbol LED1=PORTB.0  ' Svetlosna indikacija 1
symbol LED2=PORTB.1   'Svetlosna indikacija 2
'------------------Promenljive-----------------------------------
 
'----------------Inicijalizacija----------------------------------
TRISA=$FF 'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
'----------------Program------------------------------------------
Pocetak:

if  T = 0 and s1 = 0 and s2 = 0 then goto Greska 
if  T = 0 and s1 = 0 and s2 = 1 Then goto Greska
if  T = 0 and s1 = 1 and s2 = 1 Then goto Greska
if  T = 1 and s1 = 1 and s2 = 1 Then goto Uredu
if  T = 1 and s1 = 1 and s2 = 0 Then goto greska1
if  T = 1 and s1 = 0 and s2 = 0 Then goto Greska1


 
goto pocetak
'---------------Greska--------------------------------------------
Greska:
high led1
high led2

goto pocetak
'----------------Greska1-----------------------------------------
Greska1:
high led1
LOW led2

goto pocetak
'-------------------Uredu-------------------------------------
Uredu:
Low led1
low led2

goto pocetak
end
ocigledno mu jos ponesto nedostaje? :!: :?:
Branez
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 457
Joined: 22-04-2008, 16:27
Location: Maribor(SLO) Koprivnica(HR)
Contact:

Re: skraceni kurs ucenja picbasica

Post by Branez »

Code: Select all

symbol T=PORTA.0 'Taster
symbol S1=PORTA.1 'Taster 1
symbol S2=PORTA.2 'Taster 2
symbol LED1=PORTB.0  ' Svetlosna indikacija 1
symbol LED2=PORTB.1   'Svetlosna indikacija 2
'------------------Promenljive-----------------------------------

'----------------Inicijalizacija----------------------------------
TRISA=$FF 'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
'----------------Program------------------------------------------
Pocetak:

if  T = 0 and s1 = 0 and s2 = 0 then gosub Greska 
pause 10
if  T = 0 and s1 = 0 and s2 = 1 Then gosub Greska
pause 10
if  T = 0 and s1 = 1 and s2 = 1 Then gosub Greska
pause 10
if  T = 1 and s1 = 1 and s2 = 1 Then gosub Uredu
pause 10
if  T = 1 and s1 = 1 and s2 = 0 Then gosub greska1
pause 10
if  T = 1 and s1 = 0 and s2 = 0 Then gosub Greska1
pause 10
goto pocetak
'---------------Greska--------------------------------------------
Greska:
high led1
high led2

return
'----------------Greska1-----------------------------------------
Greska1:
high led1
LOW led2

return
'-------------------Uredu-------------------------------------
Uredu:
Low led1
low led2

return
end
Real Radios Glow in the Dark!
User avatar
Kizo
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 387
Joined: 01-11-2009, 22:40
Location: Hrvatska

Re: skraceni kurs ucenja picbasica

Post by Kizo »

treba da skoci do odredjene labele u kojoj izvrsi neku radnju, odnosno upali LED
uspješno skače, izvršava neku radnju, te pali LED
koje ce biti upaljene dok se stanje u labeli "program" ne promeni
i tako i je
gde bi onda skocio u 2 labelu u kojoj bi upalio neku drugu (ili istu ili obe) LED.
i ovo radi
Znaci, program bi trebalo da stalno proverava stanje u labeli program (kombinaciju stisnutih tastera)
provjerava
i na osnovu njega menja kombinaciju upaljenih LED dioda
mijenja
trenutnim menjanjem kombinacije stisnutih tastera menja se i kombinacija LED dioda koje sijaju.
i doista se mijenja
Ma da, ali ipak ne radi kako treba ocigledno mu jos ponesto nedostaje? :!: :?:
Kao što vidiš program radi upravo onako kako si ga napisao i opisao, tako da ćeš se morati malo više potruditi da svoje misli pretočiš u slova na tipkovnici. :azdaja:


@Branez: gledano s logičke strane, te strane nekog tko bi upotrebljavao takav uređaj, tvoj program radi identično kao njegov (namjerno?). Pause 10 nema nikakvog utjecaja osim da radi primitivni debounce. Opet nema objašnjenja… :?

Podržavam upotrebu gosub umjesto goto. :wink:
Branez
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 457
Joined: 22-04-2008, 16:27
Location: Maribor(SLO) Koprivnica(HR)
Contact:

Re: skraceni kurs ucenja picbasica

Post by Branez »

Kizo wrote:.....
Pause 10 nema nikakvog utjecaja osim da radi primitivni debounce.
.......
Tako je i bilo mišljeno. :|
Real Radios Glow in the Dark!
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Uz neke prepravke koje ce i dalje slediti izgleda ovako:

Code: Select all

symbol T=PORTA.0 'Taster
symbol S1=PORTA.1 'Taster 1
symbol S2=PORTA.2 'Taster 2
symbol LED1=PORTB.0  ' Svetlosna indikacija 1
symbol LED2=PORTB.1   'Svetlosna indikacija 2
'------------------Promenljive-----------------------------------

'----------------Inicijalizacija----------------------------------
TRISA=$FF 'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
'----------------Program------------------------------------------
Pocetak:

if  T = 1 and s1 = 0 and s2 = 0 then gosub Greska 
pause 10
if  T = 1 and s1 = 0 and s2 = 1 Then gosub Greska
pause 10
if  T = 1 and s1 = 1 and s2 = 0 Then gosub Greska
pause 10
'------------------------------------------------------------------
if  T = 0 and s1 = 0 and s2 = 0 Then gosub greska1
pause 10
if  T = 0 and s1 = 0 and s2 = 1 Then gosub greska1
pause 10
if  T = 0 and s1 = 1 and s2 = 0 Then gosub greska1
pause 10
'--------------------------------------------------------------------
if  T = 0 and s1 = 1 and s2 = 1 Then gosub Uredu
pause 10
if  T = 1 and s1 = 1 and s2 = 1 Then gosub Uredu
pause 10
goto pocetak

'---------------Greska--------------------------------------------
Greska:
high led1
high led2

return
'----------------Greska1-----------------------------------------
Greska1:
high led1
LOW led2

return
'-------------------Uredu-------------------------------------
Uredu:
Low led1
low led2

return
end
Hvala na savetima :) kojih nikad dosta
Branez
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 457
Joined: 22-04-2008, 16:27
Location: Maribor(SLO) Koprivnica(HR)
Contact:

Re: skraceni kurs ucenja picbasica

Post by Branez »

Pogledaj u Pomoći:
SELECT CASE
Help wrote:CASE statements, in some cases, are easier to use than multiple IF.. THENs. These statements are used to compare a variable with different values or ranges of values, and take action based on the value.

The variable used in all of the comparisons is specified in the SELECT CASE statement. Each CASE is followed by the statements to be executed if the CASE is true. IS may be used to specify a comparison other than equal to. If none of the CASEs are true, the statements under the optional CASE ELSE statement are executed. An END SELECT closes the SELECT CASE.
Real Radios Glow in the Dark!
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

:idea:

Code: Select all

symbol T=PORTA.0 'Taster
symbol S1=PORTA.1 'Taster 1
symbol S2=PORTA.2 'Taster 2
symbol LED1=PORTB.0  ' Svetlosna indikacija 1
symbol LED2=PORTB.1   'Svetlosna indikacija 2
'------------------Promenljive-----------------------------------

'----------------Inicijalizacija----------------------------------
TRISA=$FF 'Svi portovi A su ulazni
TRISB=$00  'Svi portovi B su izlazni
'----------------Program------------------------------------------
Pocetak:

if  T = 1 and s1 = 0 and s2 = 0 then gosub Greska 
pause 10
if  T = 1 and s1 = 0 and s2 = 1 Then gosub Greska
pause 10
if  T = 1 and s1 = 1 and s2 = 0 Then gosub Greska
pause 10
'------------------------------------------------------------------
if  T = 0 and s1 = 0 and s2 = 0 Then gosub greska1
pause 10
if  T = 0 and s1 = 0 and s2 = 1 Then gosub greska1
pause 10
if  T = 0 and s1 = 1 and s2 = 0 Then gosub greska1
pause 10
'--------------------------------------------------------------------
if  T = 0 and s1 = 1 and s2 = 1 Then gosub Uredu
pause 10
if  T = 1 and s1 = 1 and s2 = 1 Then gosub Uredu
pause 10
goto pocetak

'---------------Greska--------------------------------------------
Greska:
high led1
high led2

return
'----------------Greska1-----------------------------------------
Greska1:
high led1
LOW led2

goto uslovi
'-------------------Uredu----------------------------------------
Uredu:
Low led1
low led2

return
'-----------------Uslovi------------------------------------------
Uslovi:
if  T = 0 and s1 = 1 and s2 = 1 Then goto Uredu
pause 10
if  T = 1 and s1 = 1 and s2 = 1 Then goto Uredu
pause 10
goto uslovi
end
Branez
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 457
Joined: 22-04-2008, 16:27
Location: Maribor(SLO) Koprivnica(HR)
Contact:

Re: skraceni kurs ucenja picbasica

Post by Branez »

electron wrote:Zamislio sam da kad upadne u gresku1 tu program ostaje zaglavljen dok se ne ispuni jedan od uslova
:?: Dali je sada kako si zamislio?
Real Radios Glow in the Dark!
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Sad radi kako treba 8)
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Display i 16F877A

Post by electron »

Imam problema sa ispisivanjem na display, inace radi se o 16F877A i WINSTAR WH1602B-TMI-ET0...Ili sam pogresio sa kodom i shemom koji su iz knjige od V. Milanovica ili je problem u disp?

Code: Select all

'Program demonstrira rad sa LCD displejom 16F877A
'koji je prikljucen na port D


	       DEFINE  LCD_DREG    PORTD  'I/O port na kome se nalazi LCD
	       DEFINE  LCD_DBIT    4       
	       DEFINE  LCD_RSREG   PORTD
	       DEFINE  LCD_RSBIT   2	  'Register select pin
	       DEFINE  LCD_EREG    PORTD
	       DEFINE  LCD_EBIT    3	  'Enable pin
	       DEFINE  LCD_BITS    4	  '4-bitni data bus 
	       DEFINE  LCD_LINES   2 	  'LCD ima dva reda karaktera

           B0 Var byte   'Promenljiva koju koristi BUTTON
           Symbol T1 = PORTA.2 'Taster T1
           Symbol T2 = PORTA.1 'Taster T2 
           Symbol T3 = PORTA.0 'Taster T3
           
           pause 1000
 
           Lcdout $fe, 1,   " Primer LCD" 'Ispisi u prvom redu
	       Lcdout $fe, $C0, "  programa " 'Ispisi u drugom redu
	       Pause 2000
                
           
Pocetak:
           B0 = 0
           button T1,0,255,0,B0,1,Tekst1  
           
           B0 = 0
           button T2,0,255,0,B0,1,Tekst2
           
           B0 = 0
           button T3,0,255,0,B0,1,Tekst3
           
           Goto pocetak

'--------Podprogram za prikaz prvog teksta-------           
Tekst1:
	       Lcdout $fe, $C0, "Pritisnut T1"
	       Pause 2000
           Return

'--------Podprogram za prikaz drugog teksta-------           
Tekst2:
	       Lcdout $fe, $C0, "Pritisnut T2"
	       Pause 2000
           Return

'--------Podprogram za prikaz treceg teksta-------           
Tekst3:
	       Lcdout $fe, $C0, "Pritisnut T3"
	       Pause 2000
           Return
                          
           End
User avatar
sindja1204
Odlično uznapredovao
Odlično uznapredovao
Posts: 792
Joined: 03-05-2009, 11:57
Location: Beograd

Re: skraceni kurs ucenja picbasica

Post by sindja1204 »

Ubaci na pocetak i sledece komande
TRISD=$00
TRISA=$FF
ADCON1=7

Code: Select all

'Program demonstrira rad sa LCD displejom 16F877A
'koji je prikljucen na port D
         TRISD=$00
         TRISA=$FF

          DEFINE  LCD_DREG    PORTD  'I/O port na kome se nalazi LCD
          DEFINE  LCD_DBIT    4       
          DEFINE  LCD_RSREG   PORTD
          DEFINE  LCD_RSBIT   2     'Register select pin
          DEFINE  LCD_EREG    PORTD
          DEFINE  LCD_EBIT    3     'Enable pin
          DEFINE  LCD_BITS    4     '4-bitni data bus
          DEFINE  LCD_LINES   2      'LCD ima dva reda karakt

          ADCON1=7

           B0 Var byte   'Promenljiva koju koristi BUTTON
           Symbol T1 = PORTA.2 'Taster T1
           Symbol T2 = PORTA.1 'Taster T2
           Symbol T3 = PORTA.0 'Taster T3
           
           pause 1000

           Lcdout $fe, 1,   " Primer LCD" 'Ispisi u prvom redu
          Lcdout $fe, $C0, "  programa " 'Ispisi u drugom redu
          Pause 2000
               
           
Pocetak:
           B0 = 0
           button T1,0,255,0,B0,1,Tekst1 
           
           B0 = 0
           button T2,0,255,0,B0,1,Tekst2
           
           B0 = 0
           button T3,0,255,0,B0,1,Tekst3
           
           Goto pocetak

'--------Podprogram za prikaz prvog teksta-------           
Tekst1:
          Lcdout $fe, $C0, "Pritisnut T1"
          Pause 2000
           Return

'--------Podprogram za prikaz drugog teksta-------           
Tekst2:
          Lcdout $fe, $C0, "Pritisnut T2"
          Pause 2000
           Return

'--------Podprogram za prikaz treceg teksta-------           
Tekst3:
          Lcdout $fe, $C0, "Pritisnut T3"
          Pause 2000
           Return
                         
           End
SKOLS
Pocetnik na forumu
Pocetnik na forumu
Posts: 48
Joined: 06-02-2011, 17:28
Location: Skopje,Makedonija
Contact:

Re: skraceni kurs ucenja picbasica

Post by SKOLS »

odlicen kurs.Mnogu mi pomogna vo vrska so karakterite za na LCD displej,sakam da ve prasam ne za LCD displej potocno za tastatura,kako da gi procitam ASCII znacite od nejze i da gi prikazam na LCD displej.Koj komandi da gi koristam za da gi procitam tie znaci?Ako moze pomos.
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Tajmer

Post by electron »

Sta li sam ovde zeznuo? Odbrijava mi ok ako tajmer podesim do 1 min, a ako ga podesim npr. od 01:05 odbroji prvo taj 1 min. i to kao 1 sec onda tih 5 sec?

Code: Select all

pocetak:
  
  portb=0
  if set=0 then sec=sec+1
  if sec>=60  then sec=0:minu=minu+1
  if minu>=60 then minu=0
  if start=0 then   odbrojavanje
  
  pause 20

  
  
  lcdout $fe,1, "SET:     ",Dec2 minu,":", Dec2 sec
  
  pause 100
  
  goto pocetak

Code: Select all

Odbrojavanje:
 portb=0
 high led

 for dminu=0 to minu
 for dsec=0 to sec
  
 if dsec=sec then  sec=0 
 if dminu=minu then minu=0

 
 lcdout $fe,$c0, "START:   ",DEC2 dminu,":", DEC2 dsec

 pause 1000
 next dsec
 next dminu
 low led
goto pocetak
User avatar
sindja1204
Odlično uznapredovao
Odlično uznapredovao
Posts: 792
Joined: 03-05-2009, 11:57
Location: Beograd

Re: skraceni kurs ucenja picbasica

Post by sindja1204 »

Kao sto si definisao sec i min u prvom delu isto to uradi i kod odbrojavanja sa dsec i dminu. I pogledaj ovaj deo koda.

Code: Select all

for dminu=0 to minu
for dsec=0 to sec
 
if dsec=sec then  sec=0
if dminu=minu then minu=0
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Post by electron »

Mislis?

Code: Select all

odbrojavanje:
If dsec=60 Then dsec=0:dminu=dminu+1
  If dminu>=60Then dminu=0 
  If dminu=minu:dsec-1=sec


 pause 1000
 If dminu=minu:dsec-1=sec Then  pocetak
Post Reply