Timers en interrupts

I

Impakt

Guest
Ik wil graag begrijpen hoe timers en interupts werk (maakt niet uit de MCU).Ik weet dat timers zijn registers waarvan de waarde wordt verhoogd telkens wanneer een instructie wordt uitgevoerd.Wat gebeurt er wanneer zij tot het maximale waarde?En wanneer heeft een interrput voordoet?Wat gebeurt er na?

 
Wanneer een timer zijn maximale waarde bereikt (dat FFH's (255d) voor 8-bit, ffffh (65535d) voor 16 bit timer) overloop optreedt en het begint van het begin (00h). Als u hebt ingeschakeld haar te onderbreken, het springt naar de interrupt vector-adres wanneer de overloop occurs.By die manier kan je een code uitvoeren op specifieke tijd intervals.That 's de basis uitleg

 
coshkun wrote:

.By that way you can run some code at specific time intervals.
Als u hebt ingeschakeld haar te onderbreken, springt het aan de interrupt vector-adres wanneer de overloop optreedt.
Op die manier kun je een code uitvoeren op bepaalde tijdstippen.
 
Ik weet niet welke taal je use.In assemblage (ex: 8051), aan het begin van programma's die je zou kunnen zien dat de lijnen:
org 00h
sjmp start
org 0BH
sjmp timer

0BH is de timer0 vector address.When timer0 overflows, PC springt onderbreken om de 0BH adres automatisch en voert "sjmp timer" regel.
U moet interrupts studie, eerste.

 
Hi Impakt,
Als ik me goed herinner, gebruik je de PIC micro, ja?Als dat het geval is, je interruptvector (in de 12Fxx en 16Fxx apparaten) is 0x04.De 18Fxxx heeft meer dan een, want het heeft een lage en hoge prioriteit interrupts.(Ik denk 0x04 en de 0x08, maar dat is alleen uit het geheugen, zal de data sheet te vertellen ...)
Je moet dan, schrijf de code voor uw interrupt handler, en plaats deze op dat vector.Je hebt ook om de interrups u wilt - dat wil zeggen: timer overflow, verandering op pin, serRx, Tx, enz. en in staat stellen gebruik wereldwijde onderbreekt.De data sheet voor uw specifieke deel zal u de details over hoe dit te doen.
Ik vergeet als je de montage gebruikt, of een hoger niveau van taal.
Quote:

Kunt u meer specifieke please?
Wanneer gaat de interrupt triggers?
Wat is de interrupt vector adres?
Bedankt!
 
Ik gebruik CCS-C voor dit project en ik heb een code van een kleine robot op basis van een code die door de producent te ontwikkelen.Ik heb zoiets als:
Code:/ / Timer 0 voor Scheduler

setup_timer_0 (RTCC_DIV_4);

set_timer0 (0);

enable_interrupts (INT_TIMER0);

....

# INT_TIMER0

void Scheduler_Interrupt (void) / / Interne Taakbeheer, Interrupt om de 200 met ons

(

....

)

 
hello Impakt

sorry voor het niet hebben antwoord op uw vraag.
i'have dezelfde vraag, maar voor MSP430

Code:

# pragma vector = PORT1_VECTOR / / PORT_1 Interrupt Service Routine (ISR)

__interrupt void PORT1_ISR (void)
 
Hi Impakt,

OK, ik probeer alles en antwoord:
Quote:

Deze functie void Scheduler_Interrupt (void) zal worden uitgevoerd everytime timer 0 overloopt?

 
Zoals ik al eerder zei, de robot heeft 8 infrarood sensoren: 6 voor obstakel vermijden en 2 voor lijn volgt.U kunt zien dat de robot op http://www.k-team.com/kteam/index.php?site=1&rub=3&upPage=148&page=16&version=EN.
Ik begrijp niet het algoritme.Hier is de code een zone:
Code:

geval FrontZone:

set_adc_channel (FrontLeft);

Delay_us (12);

__IR_Light [FrontLeft] = read_adc ();

set_adc_channel (FrontRight);

Delay_us (12);

__IR_Light [FrontRight] = read_adc ();

set_adc_channel (Front);

Delay_us (12);

__IR_Light [Front] = read_adc ();

output_high (PIN_B2);

Delay_us (300);

__IR_Proximity [Front] = __IR_Light [Front] - read_adc ();

set_adc_channel (FrontLeft);

Delay_us (12);

__IR_Proximity [FrontLeft] = __IR_Light [FrontLeft] - read_adc ();

set_adc_channel (FrontRight);

Delay_us (12);

__IR_Proximity [FrontRight] = __IR_Light [FrontRight] - read_adc ();

output_low (PIN_B2);

break;

 
Hoi,
Nou lijkt dit uit een switch-statement, iets als schakelaar op sensor lezingen, en in dit geval, de FrontZone, lijkt het alsof het een AD conversie begint door te bellen naar de functie set_adc_channel (whichSensor)
die de juiste sensor selecteert om te lezen.
Het slaat dan de lezing in de array __IR_Light [n] vertragingen voor een toverspreuk,
Vervolgens leest de volgende sensor.
Het heeft drie sensoren aan de voorkant, vertragingen voor een tijdje (300 uS,) dan stelt pin B2 hoog.Wat is er op deze pin?I'm guessing het is een IR-zender?Het vergelijkt dan de vorige lezing opgeslagen in __IR_Light [n] met een nieuwe meting, en slaat de daaruit voortvloeiende verschil in de array __IR_Proximity [n]
Dan naar de volgende sensor maak een andere vergelijking.

Ik hoop dat dit het maken van zin is het zo laat, en ik heb om het te sluiten.Ik kom terug in de ochtend met meer.

Oh, nam ik een kijkje op de pagina die u gewezen op maar ik weet niet zeker welk product / source code waarmee u werkt.Ik denk dat je je broncode hier?Als het is, zal ik een kijkje nemen op het.Als ik wist welke BOT, kan waarschijnlijk verklaren veel beter.

Groeten,
Robert

 
hai

een vector is niets anders dan een vooraf gedefinieerd programma geheugen locatie (normaliter de startlocatie) die wordt gespecificeerd door de fabrikant van de chip.die cannnot worden gewijzigd door de programmeur
in de eerste plaats is de reset vector waar het systeem eerst te lezen op het moment van inschakelen of reset.we niet kan houden deze locatie blank.next zijn de interruprvector.the interrupt is niets anders dan iets aan het systeem van purticular situation.when kennis is er geen interrupt.the systeem zal uitvoeren van de normale werkzaamheden en wanneer een interrupt optreedt de systemen controllwill spring naar de currusponding reset vector waar wij de oplossing voor dat programma moet purticular interrupt.this programma heet interrupt service routine (ISR). complition na van de ISR, zal het systeem terug naar de vorige plaats en blijven wat zij aan het doen was

hoop dat dit duidelijk ur doubts.if niet pls feelfree weer mail, we r hier om u te helpendank usunish

 
Ik begrijp het niet deze lijn:
Code:

__IR_Proximity [Front] = __IR_Light [Front] - read_adc ();
 
Hoi,
Quote:

Code:

__IR_Proximity [Front] = __IR_Light [Front] - read_adc ();Als __IR_Light [Front] is de waarde rood van ADC-kanaal, read_adc () dat is, niet zal het resultaat 0 (nul)?
Dan zal niet de waarde afgedrukt op het HyperTerminal zijn 0???

 

Welcome to EDABoard.com

Sponsor

Back
Top