sveriame lemputės aukštos kai Timer0 perpildymo

M

M3GAPL3X

Guest
Hi guys,

Aš stengiuosi atlikti paprastas Timer0 programa jei lemputės šviesos išjungimas ir ne po 1 sekundę.Aš naudojant 8 bitų laikmatį, 31 kHz, vidaus LPINSRC laikrodis su 1:30 iki scaler.LED's nėra sveriame išjungimo ir kaip ir kaip ne kartą.Jie tiesiog vyksta nuo išvykti beveik instanteously.

Štai mano kodas:

Kodas:/ / LED bus mirksìti ir ne kas 1 sekundė be pertraukinėja# include <p18f14k50.h>/ / pragma kodai

# pragma config FOSC = IRC / / kad Vidaus generatorius/ / funkcija prototipams

void init (void);void main ()

(

TRISC = 0x00; / / nustatyti PORTC tiek rezultatų

LATC = 0x00;init ();o (1)

(/ / jei overflow vėliava yra nustatyta timer0, nutvieksti lemputės, anuliuoti overflow vėliava bit ir atkurti TMR0L baitų į 0x05

jei (INTCONbits.TMR0IF == 1)

(

LATC = 0xFF;

/ / INTCONbits.TMR0IF = 0;

TMR0L = 0x05;

))

)/ / Funkcija initalize generatorius registrai

void init (tuščia)

(

OSCCONbits.SCS1 = 1;

/ / kad 31 kHz kHz laikrodis

OSCCONbits.IRCF2 = 0;

OSCCONbits.IRCF1 = 0;

OSCCONbits.IRCF0 = 0;OSCCONbits.OSTS = 0; / / prietaisas veikia iš vidaus generatorius

OSCTUNEbits.INTSRC = 0 / / 31 kHz, prietaisas yra gaunami tiesiogiai iš LFINTOSC/ / Configure Timer0

T0CONbits.T08BIT = 1; / / Timer0 sukonfigūruotas kaip 8 bitų registrą/ / Vidaus Instrukcija ciklo Clocka

T0CONbits.T0CS = 0;T0CONbits.PSA = 0;

/ / Configure prescale vertė 1:32

T0CONbits.T0PS2 = 0;

T0CONbits.T0PS1 = 1;

T0CONbits.T0PS0 = 0;/ / load TMR0L, kurių vertė 05

TMR0L = 0x05;

INTCONbits.TMR0IF = 0;/ / įjungti TMR0 po įjungimo visų susijusių registrų

T0CONbits.TMR0ON = 1;

)
/**************** PASTABOS *************

Su 31 kHz, laikrodis, dažnis 31 kHz / 4 = apie 8 kHz.
8 kHz atitinka

į ,125 ms į komandą, kad 8000 per sekundę.
Su 32 bitų anksto Skaliarinė,

instrukcijas už ss 4.
Todėl apie 250 impulsų per sekundę.
8 bitų laikmatį, gali turėti

didžiausia vertė 256, todėl apkrova TMR0L su 0x05.

* /
 
Čia yra mano kodas mirksi lemputės yra grindžiamas timer0 dėl 12F675.Jis naudoja pertraukinėja tačiau pačios procesas.

hope it helps.

Kodas:

/ / preload laikmatç su kompensuoti, siekiant padėti prisitaikyti laiko# include <htc.h>__CONFIG (MCLRDIS & Unprotect & BORDIS & WDTDIS & INTIO & PWRTEN);/ / aparatūros konfigūracija

# define nLED 2 / / LED dėl gpio2

# define MaxCnt 1000000 / 250 / / maksimalus skaičius iki flip LED

# define T0Offset (255-250 3) / / timer0 kompensuoti kad laikmatis viršija tiksliai 250 ciklų (= 250us)unsigned char sGPIO / / shadow gpiotuščia nutraukti LED (void) (

statinio unsigned int T0Counter = MaxCnt / / inicijuoti t0 skaitliukas.
"statinis" išlaikyti vertė

T0IF = 0; / / išvalyti nutraukti vėliava

TMR0 = T0Offset / / Load laikmatç su kompensuoti

T0Counter-= 1;

jei (T0Counter == 0) (

T0Counter = MaxCnt / / reset T0Counter

sGPIO ^ = (1 <<nLED); / / flash nLED pin

)

)tuščia

main (void)

(

TRISIO = ~ (1 <<nLED); / / visi gpio smeigtukai įvesti kitas nei nLED ir nButtonLED

GALIMYBė = 0b11011000 / / įsteigimo galimybių registre;

/ / 1 / / GPPU: prisitraukimas neįgaliesiems

/ / 1 / / INTEDG: nutraukti dėl didėjančio kraštas

/ / 0 / / T0CS: timer0 šaltinis pasirinkite - vidinio laikrodžio ciklas

/ / 1 / / T0SE: timer0 krašto pasirinkite - nutraukti dėl aukšto iki žemo transisiton

/ / 1 / / PSA: prescaler atrinkti sergėtojas

/ / 000 / / PS0 .. 2: prescaler norma pasirinkite - 000 = 1/ / GPPU = 1; INTEDG = 1; T0CS = 0; T0SE = 1; PSA = 0;sGPIO = 0; / / aišku gpio smeigtukaiT0IE = 1; / / įjungti laikmatį 0 pertraukti

ei () / / kad pasaulio nutraukti.
= GIE = 1;o (1) (

/ / TODO Auto-generated pagrindinė funkcija

GPIO = sGPIO;

)

)

 
Ačiū!I'll take a look at it.Actually I figured it out.

Čia yra mano galutinis kodą, jei kas nors dar nori, kad ji:

Kodas:/ / LED bus mirksìti ir ne kas 1 sekundė be pertraukinėja# include <p18f14k50.h>/ / pragma kodai

# pragma config FOSC = IRC / / kad Vidaus generatorius/ / funkcija prototipams

void init (void);void main ()

(

TRISC = 0x00; / / nustatyti PORTC tiek rezultatų

init ();

o (1)

(

/ / jei overflow vėliava yra nustatyta timer0, nutvieksti lemputės, anuliuoti overflow vėliava bit ir atkurti TMR0L baitų į 0x05

jei (INTCONbits.TMR0IF == 1)

(

LATC ^ = 0xFF;

INTCONbits.TMR0IF = 0;

TMR0L = 0x00;

))

)/ / Funkcija initalize generatorius registrai

void init (tuščia)

(

OSCCONbits.SCS1 = 1;

/ / kad 31 kHz kHz laikrodis

OSCCONbits.IRCF2 = 0;

OSCCONbits.IRCF1 = 0;

OSCCONbits.IRCF0 = 0;OSCCONbits.OSTS = 0; / / prietaisas veikia iš vidaus generatorius

OSCTUNEbits.INTSRC = 0 / / 31 kHz, prietaisas yra gaunami tiesiogiai iš LFINTOSC/ / Configure Timer0

T0CONbits.T08BIT = 1; / / Timer0 sukonfigūruotas kaip 8 bitų registrą/ / Vidaus Instrukcija ciklo Clocka

T0CONbits.T0CS = 0;T0CONbits.PSA = 0;

/ / Configure prescale vertė 1:32

T0CONbits.T0PS2 = 1;

T0CONbits.T0PS1 = 0;

T0CONbits.T0PS0 = 0;/ / load TMR0L, kurių vertė 05

TMR0L = 0x00;

INTCONbits.TMR0IF = 0;/ / įjungti TMR0 po įjungimo visų susijusių registrų

T0CONbits.TMR0ON = 1;

)
/**************** PASTABOS *************

Su 31 kHz, laikrodis, dažnis 31 kHz / 4 = apie 8 kHz.
8 kHz atitinka

į ,125 ms į komandą, kad 8000 per sekundę.
Su 32 bitų anksto Skaliarinė,

instrukcijas už ss 4.
Todėl apie 250 impulsų per sekundę.
8 bitų laikmatį, gali turėti

didžiausia vertė 256, todėl apkrova TMR0L su 0x05.

* /
 

Welcome to EDABoard.com

Sponsor

Back
Top