Evo napisao sam kako si zamislio:
define OSC 4
OSCCON=%01101000
TRISB=%00000000 ' Port B je izlazni
ANSELB=%0000000 ' Port B je digitalni
ms var word
Timerbit var bit
PortB.0=0
PortB.1=0
INTCON.5 = 0 'Onemoguci TMR0 prekide
ms=0
OPTION_REG = %1000010 '010 preskaler postavi u odnos 1:8
TMR0=6 'Postavi vrednost TMR0
INTCON.5=1 'Omoguci TMR0 prekide
INTCON.7=1 'Omoguci sve prekide
ON INTERRUPT goto Int_Sub
'------------Glavni program--------------------------
Pocetak:
Gosub Izlazi
PortB.3=1
pause 1000
PortB.3=0
pause 1000
Goto Pocetak
'------Podprogram obrade prekida-----------------------
disable
Int_Sub:
INTCON.2=0
Timerbit=1
ms = ms + 2
INTCON.7=1 'Omoguci prekide
INTCON.5=1 'Omoguci prekide
resume 'Vrati se iz rutine prekida
'----------Podprogram za kontrolu I/O pinova----------------
Izlazi:
If Timerbit=0 then return
Timerbit=0
select case ms
case 6
PortB.0=0
case 10
PortB.1=1
case 16
PortB.1=0
case 20
PortB.0=1
ms = 0
end select
Return
End
Ali ovako nece da radi a namerno sam u glavnom programu stavio da kontroler nesto drugo radi.
Tek kad ostavim slobodnu glavnu petlju tada radi uredno oscilovanje.
Razlog zbog kog nece ovo ovako da radi je sto se iz interapt potprograma skace direktno u glavnu petlju a trebalo bi odmah na potprogram IZLAZI.
define OSC 4
OSCCON=%01101000
TRISB=%00000000 ' Port B je izlazni
ANSELB=%0000000 ' Port B je digitalni
ms var word
Timerbit var bit
PortB.0=0
PortB.1=0
INTCON.5 = 0 'Onemoguci TMR0 prekide
ms=0
OPTION_REG = %1000010 '010 preskaler postavi u odnos 1:8
TMR0=6 'Postavi vrednost TMR0
INTCON.5=1 'Omoguci TMR0 prekide
INTCON.7=1 'Omoguci sve prekide
ON INTERRUPT goto Int_Sub
'------------Glavni program--------------------------
Pocetak:
Gosub Izlazi
PortB.3=1
pause 1000
PortB.3=0
pause 1000
Goto Pocetak
'------Podprogram obrade prekida-----------------------
disable
Int_Sub:
INTCON.2=0
Timerbit=1
ms = ms + 2
INTCON.7=1 'Omoguci prekide
INTCON.5=1 'Omoguci prekide
resume 'Vrati se iz rutine prekida
'----------Podprogram za kontrolu I/O pinova----------------
Izlazi:
If Timerbit=0 then return
Timerbit=0
select case ms
case 6
PortB.0=0
case 10
PortB.1=1
case 16
PortB.1=0
case 20
PortB.0=1
ms = 0
end select
Return
End
Ali ovako nece da radi a namerno sam u glavnom programu stavio da kontroler nesto drugo radi.
Tek kad ostavim slobodnu glavnu petlju tada radi uredno oscilovanje.
Razlog zbog kog nece ovo ovako da radi je sto se iz interapt potprograma skace direktno u glavnu petlju a trebalo bi odmah na potprogram IZLAZI.