Sari la conținut
ELFORUM - Forumul electronistilor

Intreruperi PIC16F628


Vizitator jerry7

Postări Recomandate

Vizitator jerry7

Buna tuturor! As a avea o rugaminte: m-ar putea ajuta si pe mine cineva sa inteleg cum pot construi o functie de intrerupere in C pentru un PIC16F628???...ceva sfaturi cum functioneaza o intrerupere , va rog daca ma poate ajuta cineva!? P.S. mentionez ca lucrez cu compilatorul de la HI Tech C din MpLab...si doresc sa-l programez cu ICD2

Link spre comentariu
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • sosoi

    2

  • gr1ph0n

    2

Top autori în acest subiect

Ai mai jos un exemplu de cod cu intreruperi pe TMR0

Sper sa te ajute

 

#include <pic.h>	__CONFIG (UNPROTECT & HS & WDTDIS & BORDIS & LVPDIS & PWRTEN);//###############################################//		Function definition ;void inipic();//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//		Main Function ;void main(){	inipic();		for(;;){		//Bucla infinita			}}//###############################################//		Tratarea intreruperilorvoid interrupt intVector(void){//.......aici verifici intreruperile	T0IF = 0;	TMR0 = 0;}void inipic(){	INTCON = 0xA0;	//Enable T0IE & GIE	OPTION = 0x00;}
Link spre comentariu
Vizitator jerry7

Buna!...as mai avea o nelamurire: INTRC oscillator, semnifica ca am intern un oscilator de 4Mhz dar apoi stiu ca intern Oscilatorul in general este divizat la 4...cum ramane cu acesta??? intern voi avea OSC/4 sau voi lucra efectiv cu 4mhz? ...pentru ca astfel in primul caz: as avea 1 intruction cycle -> 1 us ...daca cazul 2 1 instruction cycle se va efectua in -> 4 us

Link spre comentariu
Vizitator jerry7

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Ai mai jos un exemplu de cod cu intreruperi pe TMR0Sper sa te ajuteCod:#include __CONFIG (UNPROTECT & HS & WDTDIS & BORDIS & LVPDIS & PWRTEN);//###############################################// Function definition ;void inipic();//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$// Main Function ;void main(){ inipic(); for(;;){ //Bucla infinita }}//###############################################// Tratarea intreruperilorvoid interrupt intVector(void){//.......aici verifici intreruperile T0IF = 0; TMR0 = 0;}void inipic(){ INTCON = 0xA0; //Enable T0IE & GIE OPTION = 0x00;} """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" OK sosoi...as putea sa fac cu TMR0 o intrerupere care sa aduca o alta intrerupere si atat timp cat acea intrerupere nu e finalizata sa nu iasa din TMR0 interrupt...??? am sa explic mai exact ce vreau: " vreau ca daca apas pe un buton(intrerupere la RB0) sa imi apara o intrerupere TMR0 -> si aici sa numar 30s si daca mai apas inca odata RB0 sa mai adauge la acele 30s inca 30 s ( 30s + ce a ramas din 30s anterior )

Link spre comentariu

Buna!...as mai avea o nelamurire: INTRC oscillator, semnifica ca am intern un oscilator de 4Mhz dar apoi stiu ca intern Oscilatorul in general este divizat la 4...cum ramane cu acesta??? intern voi avea OSC/4 sau voi lucra efectiv cu 4mhz? ...pentru ca astfel in primul caz: as avea 1 intruction cycle -> 1 us ...daca cazul 2 1 instruction cycle se va efectua in -> 4 us

Ca si in cazul oscilatorului extern, si oscilatorul intern este divizat la 4, asta inseamna ca va efectua 1 instructiune/1 us.Daca frecventa nu ar fi fost divizata, ai fi avut 1 instructiune/250 ns si nu la 4 us.
Link spre comentariu

...as putea sa fac cu TMR0 o intrerupere care sa aduca o alta intrerupere

Chestia asta nu este posibila.

 

TMR0 il vei folosi pentru a genera un tact, tact care il vei folosi ca baza de timp pentru a genera acele 30 secunde iar intreruperea de pe RB0 o vei folosi pentru a incrementa o variabila in care vei tine cont de cate ori a fost apasat butonul.

* Din bucla in care verifici intreruperile trebuie sa iesi pe cat de repede posibil, akolo in cazul tau faci :

//###############################################// Tratarea intreruperilorvoid interrupt intVector(void){	if(RB0){	contorRB0++;	}}
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări