Evo ga bez gosub i pauza. U potprogramu gasisve mora biti neka pauza jer se program odmah vraća na početak prije nego stignem otpustit taster, pa se pripadajuća dioda odmah upali..
ADCON1 = 7 'Turn off ADC
CMCON = 7 'Turn off comparator
TRISA = $FF
TRISB = $00
portb=0
SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTB.1
SYMBOL LED3=PORTB.2
SYMBOL T1=PORTA.0
SYMBOL T2=PORTA.1
SYMBOL T3=PORTA.2
A VAR BYTE
B var byte
POC:
b=1
A=0
BUTTON t1,0,255,0,a,1,led1ON
A=0
BUTTON t2,0,255,0,a,1,led2ON
A=0
BUTTON t3,0,255,0,a,1,led3ON
GOTO POC
LED1ON:
TOGGLE LED1
goto test
LED2ON:
TOGGLE LED2
goto test
LED3ON:
TOGGLE LED3
goto test
gasisve:
PORTB=0
pause 2000
GOTO POC
test:
if (t1=0) or (t2=0) or (t3=0) and (b<50) then
b=b+1
pause 100
goto test
endif
if b=>40 then
goto gasisve
else
goto poc
endif
end
'****************************************************************
'* Name : code_service.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 15.01.2013 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEFINE OSC 4
ADCON1 = 7
CMCON = 7
TRISA = $FF
TRISB = $00
SYMBOL LED1=PORTB.0
SYMBOL LED2=PORTB.1
SYMBOL LED3=PORTB.2
SYMBOL T1=PORTA.0
SYMBOL T2=PORTA.1
SYMBOL T3=PORTA.2
A1 VAR BIT : A1 = 1
A2 VAR BIT : A2 = 1
A3 VAR BIT : A3 = 1
B VAR BYTE : B = 1
PORTB = 0
'**************************** GLAVNA PETLJA ************************************
MAIN:
DO
'---------------------------- PROVJERA TIPKE 1 ---------------------------------
IF T1 = 0 THEN ' AKO JE PRITISNUTA TIPKA
PAUSE 20 ' DEBOUNCE 20 mS
IF T1 = 0 THEN ' OPET PROVJERI TIPKU
IF A1 = 1 THEN ' I AKO NIJE BILA PRETHODNO PRITISNUTA
TOGGLE LED1 ' UPALI ILI UGASI LED
A1 = 0 ' I OZNAČI DA JE TIPKA PRITISNUTA
ENDIF '
ENDIF '
ELSE ' AKO TIPKA NIJE PRTISNUTA
A1 = 1 ' OZNAČI DA NIJE PRITISNUTA
ENDIF
'---------------------------- PROVJERA TIPKE 2 ---------------------------------
IF T2 = 0 THEN ' KAO I KOD TIPKE 1
PAUSE 20
IF T2 = 0 THEN
IF A2 = 1 THEN
TOGGLE LED2
A2 = 0
ENDIF
ENDIF
ELSE
A2 = 1
ENDIF
'---------------------------- PROVJERA TIPKE 3 ---------------------------------
IF T3 = 0 THEN ' KAO I KOD TIPKE 1
PAUSE 20
IF T3 = 0 THEN
IF A3 = 1 THEN
TOGGLE LED3
A3 = 0
ENDIF
ENDIF
ELSE
A3 = 1
ENDIF
'---------------------------- GASENJE LED-ICA ----------------------------------
IF (A1 & A2 & A3) = 0 THEN ' AKO JE BILO KOJA OD TIPKI PRITISNUTA
B = B + 1 ' POVEĆAJ BROJAČ
IF B => 250 THEN ' I AKO JE PROŠLO 5S (20mS * 250 = 5S)
PORTB = 0 ' UGASI SVE LED-ICE
B = 0 ' I PONIŠTI BROJAČ NA 0
ENDIF
ELSE ' AKO NIJE PRITISNUTA NI JEDNA TIPKA
B = 0 ' PONIŠTI BROJAČ NA 0
ENDIF
LOOP
'*******************************************************************************
Sve radi u glavnoj petlji i ne koristi se funkcija BUTTON, već se debounce radi direktnom provjerom tipke nakon 20ms, ujedno se to koristi i za brojač od 5s, kojim gasiš sve LED-ice. Nije mi se dalo pisat komentare za svaku tipku posebice
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Ovo izgleda lijepo i profesionalnije.. Samo negdje je greška. Kad ubacim u proteus,program ne radi. Jedna dioda samo brzo treperi kad joj je pritisnut pripadajući taster. Ali bez obzira što ne radi, uvidom u ovaj program lijepo vidi se i drugi moguć način..
Kad ubacim tvoj dsn file u proteus onda radi. Ali kad idem tvoj fajl kompilirat iz MCS-a onda se onako čudno ponaša.. Već sam i prije primjećivao da mi se nekad poneki primjer nelogično ponaša. Znači nešto mi definitivno ne štima sa MCS-om.. Ja se još ubio pokušavajući skužit di je greška u tvom primjeru..
i ni to neradi slucajno sam zakacijo kristal rukom kad ga pipkam ledica sija-nije kontakt al sija samo dok lupkam kristal a moj veliki program samo kad se ubacuje zatinja ledica jer trebe nesto definisati jos? kondenzatori su 22pf ka masi a kristak 20mhz,pic je 16f877a
E je si ga napilio, pa pufff na 20 MHz . Za takvu konfiguraciju moraš kod programiranja postavit Fosc1=1 i Fosc0=0 (HS oscilator). Kondenzatori od kristala prema masi moraju bit cca. 22pF. Uostalom dobro prouči stranice 144, 145 i 146 od datasheet-a (146, 147 i 148 u readeru). Osim toga ne može svaki kristal radit na tom mjestu, izričito kažu da treba bit "parallel cut crystal". Evo ti izvadak:
The PIC16F87XA
oscillator design requires the use of a parallel cut crystal.
Use of a series cut crystal may give a frequency out
of the crystal manufacturer’s specifications.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....