M
M3GAPL3X
Guest
Hi guys,
Jeg forsøger at lave en simpel Timer0 program hvor LED-lyset slukket og end på efter 1 sekund.Jeg bruger et 8 bit timer, 31 kHz intern LPINSRC ur med en 1:30 pre-scaler.LED's er ikke toggling start og end på og end off igen.De er bare fra off til on næsten instanteously.
Her er min kode:
Code:/ / LED blinker til og fra hver 1 sekund uden afbryder# include <p18f14k50.h>/ / pragma koder
# pragma config FOSC = IRC / / muliggøre Indre Oscillator/ / funktion prototyper
void init (void);void vigtigste ()
(
TRISC = 0x00; / / sæt PORTC's som output
LATC = 0x00;init ();mens (1)
(/ / hvis overflow flag er sat for timer0, lyser LED, nulstille overflow flag bit og nulstille TMR0L lave byte til 0x05
if (INTCONbits.TMR0IF == 1)
(
LATC = 0xff;
/ / INTCONbits.TMR0IF = 0;
TMR0L = 0x05;
))
)/ / Funktion til initalize oscillator registre
void init (void)
(
OSCCONbits.SCS1 = 1;
/ / aktivere 31 kHz kHz ur
OSCCONbits.IRCF2 = 0;
OSCCONbits.IRCF1 = 0;
OSCCONbits.IRCF0 = 0;OSCCONbits.OSTS = 0; / / enheden kører fra interne oscillator
OSCTUNEbits.INTSRC = 0; / / 31 kHz enheden er direkte afledt LFINTOSC/ / configure Timer0
T0CONbits.T08BIT = 1 / / Timer0 konfigureret som en 8 bit register/ / Indre Instruction Cycle Clocka
T0CONbits.T0CS = 0;T0CONbits.PSA = 0;
/ / configure prescale værdien af 1:32
T0CONbits.T0PS2 = 0;
T0CONbits.T0PS1 = 1;
T0CONbits.T0PS0 = 0;/ / belastning TMR0L til en værdi af 05
TMR0L = 0x05;
INTCONbits.TMR0IF = 0;/ / aktivere TMR0 efter at gøre det muligt for alle relaterede registre
T0CONbits.TMR0ON = 1;
)
/**************** FODNOTER *************
Med en 31 kHz ur, frekvens er 31 kHz / 4 = ca 8 kHz.
8 kHz svarer
til ,125 ms per instruktion så 8000 instruktioner i sekundet.
Med en 32 bit pre-skalær,
instruktioner pr ms er 4.
Derfor omkring 250 tæller i sekundet.
En 8-bit timer kan holde
en max værdi for 256, så belastningen TMR0L med 0x05.
* /
Jeg forsøger at lave en simpel Timer0 program hvor LED-lyset slukket og end på efter 1 sekund.Jeg bruger et 8 bit timer, 31 kHz intern LPINSRC ur med en 1:30 pre-scaler.LED's er ikke toggling start og end på og end off igen.De er bare fra off til on næsten instanteously.
Her er min kode:
Code:/ / LED blinker til og fra hver 1 sekund uden afbryder# include <p18f14k50.h>/ / pragma koder
# pragma config FOSC = IRC / / muliggøre Indre Oscillator/ / funktion prototyper
void init (void);void vigtigste ()
(
TRISC = 0x00; / / sæt PORTC's som output
LATC = 0x00;init ();mens (1)
(/ / hvis overflow flag er sat for timer0, lyser LED, nulstille overflow flag bit og nulstille TMR0L lave byte til 0x05
if (INTCONbits.TMR0IF == 1)
(
LATC = 0xff;
/ / INTCONbits.TMR0IF = 0;
TMR0L = 0x05;
))
)/ / Funktion til initalize oscillator registre
void init (void)
(
OSCCONbits.SCS1 = 1;
/ / aktivere 31 kHz kHz ur
OSCCONbits.IRCF2 = 0;
OSCCONbits.IRCF1 = 0;
OSCCONbits.IRCF0 = 0;OSCCONbits.OSTS = 0; / / enheden kører fra interne oscillator
OSCTUNEbits.INTSRC = 0; / / 31 kHz enheden er direkte afledt LFINTOSC/ / configure Timer0
T0CONbits.T08BIT = 1 / / Timer0 konfigureret som en 8 bit register/ / Indre Instruction Cycle Clocka
T0CONbits.T0CS = 0;T0CONbits.PSA = 0;
/ / configure prescale værdien af 1:32
T0CONbits.T0PS2 = 0;
T0CONbits.T0PS1 = 1;
T0CONbits.T0PS0 = 0;/ / belastning TMR0L til en værdi af 05
TMR0L = 0x05;
INTCONbits.TMR0IF = 0;/ / aktivere TMR0 efter at gøre det muligt for alle relaterede registre
T0CONbits.TMR0ON = 1;
)
/**************** FODNOTER *************
Med en 31 kHz ur, frekvens er 31 kHz / 4 = ca 8 kHz.
8 kHz svarer
til ,125 ms per instruktion så 8000 instruktioner i sekundet.
Med en 32 bit pre-skalær,
instruktioner pr ms er 4.
Derfor omkring 250 tæller i sekundet.
En 8-bit timer kan holde
en max værdi for 256, så belastningen TMR0L med 0x05.
* /