Håller på och skriver en kod där interrupt sker med hjälp av timer 0. Får dock lite problem. När jag stegar igenom min kod så nollställs GIE biten när jag stegar över den första bsf instruktionen. Frågan är ju kort och gott varför?
Detta innebär ju att jag inte får några interrupt mer (dock är T0IE biten fortfarande 1:a och också flaggan T0IF blir också 1 när overflow sker som sig bör)
Kan det ha med programmiljön? (Mplab IDE v8.84)
Kan också tillägga att det är PIC16f690 och att jag bara simulerat det i MPLAB SIM än så länge
Jag vet inte om det är det, men du har ingen banksel innan du kör din bsf PORTB,5.
Du har en banksel PORTB i slutet av init men du borde ha den i slutet av din init_timer0
Det är väl kanske förvisso sant att det ser snyggare ut men å andra sidan så finns "banksel TMR0" i slutet av "init_timer0" och eftersom TMR0 ligger i samma bank som PORTB så borde väl rätt bank vara vald ändå?
Och vad egentligen har bankvalet att göra med GIE biten?
I första delen av init_timer0 ligger detta:
movlw irq
movwf 0x04
Här är tanken alltså att den skall lägga adressen till interrupt rutinen på adress 4. Men är det så att den skriver över värdet på adress 4 med "bsf PORTB,5"? Det ser ju onekligen ut så när jag tänker efter...
Ska kolla lite närmare på detta när jag kommer hem. Det känns som jag missat lite med adressen till interrupt rutinen och kanske är det också där det spökar lite (eller mycket).
Bola skrev:I första delen av init_timer0 ligger detta:
movlw irq
movwf 0x04
Här är tanken alltså att den skall lägga adressen till interrupt rutinen på adress 4. Men är det så att den skriver över värdet på adress 4 med "bsf PORTB,5"? Det ser ju onekligen ut så när jag tänker efter...
movwf 0x04 skriver till adress 4 i SRAM. Vid interrupt hoppar programpekaren till adress 4 i FLASH. SRAM är helt skiljt från FLASH. Data i FLASH kan inte skrivas över med en enkel instruktion.
Ja, som flera har sagt, den tanken är helt uppåt väggarna...
Du behöver helt enkelt läsa på lite mer, specielt om "memory
architecture" (eller vad kapitlet nu kallades) i databladet.
Notera också att de exempelfiler (t.ex 16F690TMPO.ASM) som
följer med MPLAB ger en bra hint om hur det ska/kan se ut.