Hallo allemaal,
Ik zit al een tijdje met het volgend probleem te kijken en ik kom er maar niet uit ...
Ik wil graag 4 timers/counters gebruiken en 1 keer de portb interrupt.
Omdat de poortb ingang gebruikt wordt voor een encoder systeem (trigger wheel) is het belangrijk dat er nooit een puls wordt overgeslagen.
Dus wanneer ik de priority bit van poort-b op 1 zet,verwacht ik dat wanneer een timer-overflow bezig is, de interrupt van poort-b direct erna volgt...
Ik heb dit allemaal getest met de volgende code:
code:
include 18f45k80
pragma target clock 64_000_000 -- oscillator frequency
pragma target OSC INTOSC_NOCLKOUT -- crystal or resonator
pragma target PLLEN enabled
pragma target WDT DISABLED -- watchdog
pragma target XINST DISABLED -- do not use extended instructionset
pragma target BROWNOUT DISABLED -- no brownout reset
pragma target FCMEN DISABLED -- no clock monitoring
pragma target IESO DISABLED -- no int/ext osc switching
pragma target MCLR internal -- external reset
--
OSCCON_SCS = 0 -- select primary oscillator
OSCTUNE_PLLEN = FALSE -- no PLL
OSCCON_IRCF = 0b111 -- 16 MHz (+ PLL -> 64 MHz)
OSCCON_SCS = 0b00 -- Clock determined by fuses
OSCTUNE_PLLEN = TRUE -- PLL enabled
pragma target SOSCSEL dig
--
--
enable_digital_io() -- all pins digital
include delay
const serial_hw2_baudrate = 19200
include serial_hardware2
serial_hw2_iniT()
const serial_hw_baudrate = 19200
include serial_hardware
serial_hw_init()
include print -- output library
t0con = 0b_1000_0000
t1con = 0b_0111_0001
t3con = 0b_0111_1101
t2con = 0b_0000_1000
t4con = 0b_0000_0111
intcon = 0b_1110_0000
intcon2 = 0b_1000_0100
intcon3 = 0b_1001_0000
rcon_IPEN = 1
intcon2_INTEDG2 = 1
ipr1_TMR1IP = 0
ipr2_TMR3IP = 0
intcon2_TMR0IP = 0
intcon3_int2ip = 1
pie2_tmr3ie = 1
intcon_tmr0ie = 1
intcon3_int2ie = 1
pie1_tmr1ie = 1
pie1_tmr2ie = 0
pie4_tmr4ie =1
procedure INT5 is
pragma interrupt
if pir1_tmr1if == 1 then
pir1_tmr1if = 0
DELAY_1S(2)
serial_hw2_write("1")
end if
end procedure
procedure INT4 is
pragma interrupt
if intcon_tmr0if == 1 then
intcon_tmr0if = 0
DELAY_1S(2)
serial_hw2_write("2")
end if
end procedure
procedure INT3 is
pragma interrupt
if pir2_tmr3if == 1 then
pir2_tmr3if = 0
DELAY_1S(2)
serial_hw2_write("3")
end if
end procedure
procedure INT2 is
pragma interrupt
if pir4_Tmr4IF == 1 then
pir4_tmr4if = 0
DELAY_1S(2)
serial_hw2_write("4")
end if
end procedure
procedure INT1 is
pragma interrupt
if intcon3_int2if == 1 then
intcon3_int2if = 0
DELAY_1S(2)
serial_hw2_write("5")
end if
end procedure
FOREVER LOOP
END LOOP
Dus wanneer ik mijn poort-b trigger met een drukknop zou er een 5 moeten volgen,maar er volgen eerst alle andere nummers en dan pas een 5....
Ik gebruikt Jal V2.4 als compiler.
Ik heb al van alles geprobeerd,maar niets geeft volle prioriteit aan poort b, kan iemand me vertellen wat ik fout doe ?