Vizitator jerry7 Postat Februarie 21, 2011 Partajează Postat Februarie 21, 2011 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
gr1ph0n Postat Februarie 22, 2011 Partajează Postat Februarie 22, 2011 Poate te ajuta site-ul asta: http://www.gooligum.com.au/tutorials.html Cred ca gasesti si pentru varianta ta de compilator. Pentru intreruperi de pe aceeasi pagina iti recomand "Midrange PIC Architecture and Assembly Language", chiar daca foloseste ASM iti explica ceea ce doresti tu sa afli: "intreruperile". Link spre comentariu
sosoi Postat Februarie 22, 2011 Partajează Postat Februarie 22, 2011 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 Postat Februarie 25, 2011 Partajează Postat Februarie 25, 2011 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 Postat Februarie 25, 2011 Partajează Postat Februarie 25, 2011 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 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
gr1ph0n Postat Februarie 25, 2011 Partajează Postat Februarie 25, 2011 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 usCa 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
sosoi Postat Februarie 25, 2011 Partajează Postat Februarie 25, 2011 ...as putea sa fac cu TMR0 o intrerupere care sa aduca o alta intrerupereChestia 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum