Vizitator s_marius Postat Noiembrie 13, 2006 Partajează Postat Noiembrie 13, 2006 Salut Sunt incepator in ale microcontrolerelor.Pentru cine este in aceeasi situatie asta poate va ajuta: http://www.tehnopress.ro/tehnica.php Acum incep cu problema. Am urmatorul cod comentat asa cum cred eu ca este.Programul ar trebui sa incrementeze ACC de fiecare data cand am depasire pe Timer1 prin intrerupere 001bh si rutina numara. org 000hjmp init org 0001bh ;intrerupere de la T1 jmp numara retiorg 100hinit: mov a,#00h mov r2,#00h mov r3,#00h mov tl1,#0fah ;initializare tl1 cu #fah a.i sa nu am decat vreo cateva cicluri de numarare mov th1,#0ffh mov tmod,#050h ;GATE=0 (numaratorul este validat cu TR1 setat) C/T=1 timer=numarator pe 16 biti(M11=0,M01=1) mov ie,#88H ;validare sistem de intrerupere(EA=1-validare gen. intr.; ET1=1 activare intr. de la T1) setb tr1 ;pornire timer1start: setb p3.5 clr p3.5 mov r2,tl1 mov r3,th1 mov r0,a jmp startnumara: mov tl1,#0fah ;reinitializare tl1 mov th1,#0ffh ;reinitializare th1 clr tf1 ;reinitializare tf1(overflow t1) inc a retiEND Problema este ca nu imi este generata intreruperea, sau asa cred eu sau poate de vina este simulatorul.Pls ajutati-ma cu un raspuns. Link spre comentariu
psanyi Postat Noiembrie 13, 2006 Partajează Postat Noiembrie 13, 2006 S-ar putea sa nu fie initializata stiva. Si dupa cum se pare pinul 3.5 se stinge si se reaprinde cu frecventa ceasului sistem ,daca ai pe el un led sta mereu aprins start: mov r2,tl1 mov r3,th1 mov r0,alo: setb p3.5 .... ;verifici ac. daca are val dorita jmp lo ;daca nu inapoi clr p3.5 jmp lo Link spre comentariu
Vizitator s_marius Postat Noiembrie 14, 2006 Partajează Postat Noiembrie 14, 2006 Tot ce este acolo r0,r1,r2 sunt sa vad care sunt valorile lui t1 dar asta nu ma intereseaza.Deci eu vreau sa folosesc si timer1 si timer0 si anume:timer0 pus pe temporizator iar cand am overflow sa apelez o rutina care sa imi incrementeze timerul1(pus pe numarator) prin modificarea p3.5 care la randul lui sa imi genereze o intrerupere.Problema este ca daca folosesc t1 ca temporizator imi merge dar ca numarator nu imi genereaza intreruperea. Link spre comentariu
Vizitator valah Postat Noiembrie 17, 2006 Partajează Postat Noiembrie 17, 2006 Salut Sunt incepator in ale microcontrolerelor. Se vede din codul scris :smt003 . In primul rand nu cred ca ai citit foarte bine manualul hardware al procesoarelor din familia 8051. Ce procesor folosesti??? Daca te mai intereseaza subiectul am sa-ti continui expunerea cazului si am sa te ajut cu programul si explicatii suplimentare. nu de alta dar daca nu mai postezi un raspuns inseamna ca ai rezolvat si sa nu-mi mai bat degetele de pomana. OK?? Link spre comentariu
Vizitator s_marius Postat Noiembrie 17, 2006 Partajează Postat Noiembrie 17, 2006 Este primul meu cod scris.Vreau sa folosesc un at89s52, si in primul rand vreau sa iti multumesc pentru ca esti dispus sa imi oferi ajutor. Ii dau seama ca un specialist vede un novice la prima vedere dar totusi unde este greseala mea in expunerea codului? Ce mi-a scapat ? De fapt codul de acolo era sa vad eu daca imi merge cea ce vreau. Proiectul meu presupune urmatoarele: -timerul0-temporizator la overflow genereaza intreruperea de la adresa 000bh -timer1-numarator, rutina de la intreruperea generata de timer0 prin actiuni soft asupra pinului p3.5 incrementeaza timer1.La overflow imi este generata intreruperea de la adresa 001bh. Tmod=051h ;t1 numarator,t0 temporizator IE=8Ah ;ea=1 validare generala intreruperi ET1=1 ET0=1 Pornesc timerele prin tr0 si tr1. Codul meu org 000hjmp init org 000bh jmp secunda reti org 001bh jmp numara retiorg 100hinit: mov sp,#060h setb p3.5 mov a,#00h mov tl0,#01h mov th0,#076h mov tl1,#04fh mov th1,#0fbh mov tmod,#051h mov ie,#08aH setb tr1 setb tr0start: ;......................... ;......................... jmp startsecunda: mov tl0,#0fah mov th0,#0ffh clr tf0 clr p3.5 setb p3.5 retinumara: mov tl1,#0fah mov th1,#0ffh clr tf1 retiENDProblema este ca partea cu timer1 nu merge. Astept raspunsul tau ,si iti multumesc din nou ca iti gasesti timp si pentru mine. Link spre comentariu
Vizitator s_marius Postat Noiembrie 18, 2006 Partajează Postat Noiembrie 18, 2006 Valah cred ca ai uitat de mine.Ma intereseaza subiectul de prea ma intereseaza.Pb este ca eu sunt la nivelul cel mai de jos adica cel putin nu am un microcontroler si un programator , si deocamdata folosesc un nenorocit de simulator demo care cred ca imi face oarece probleme.Astept raspunsurile pe care mi le-ai promis. Link spre comentariu
Vizitator s_marius Postat Noiembrie 19, 2006 Partajează Postat Noiembrie 19, 2006 Sunt complet dezamagit.Chiar nu este nimeni care sa ma ajute? Link spre comentariu
nicul Postat Noiembrie 19, 2006 Partajează Postat Noiembrie 19, 2006 ma intereseaza si pe mine simulatorul ala, chiar nenorocit si demo.poti sa-mi dai zici de unde l-ai descarcat? Link spre comentariu
Vizitator s_marius Postat Noiembrie 20, 2006 Partajează Postat Noiembrie 20, 2006 Adrese simulatoare: http://www.fstsoftware.com/ http://www.vaultbbs.com/sim8052/ Link spre comentariu
Vizitator s_marius Postat Noiembrie 22, 2006 Partajează Postat Noiembrie 22, 2006 Sau poate asta: http://www.vaultbbs.com/pinnacle/p52v1130.exe Link spre comentariu
costy35 Postat Noiembrie 30, 2006 Partajează Postat Noiembrie 30, 2006 Uitati-va si pe http://costy35.3x.ro ... (este facuta de mine,intr-adevar!). Poate gasiti ceva ce va intereseaza.Si eu am luato de la zero si sunt inca la inceput.Daca aveti vre-o nelamurire... Link spre comentariu
Vizitator Xizzard Postat Martie 27, 2007 Partajează Postat Martie 27, 2007 Nu am inteles exact ce vrei sa faci... dar uite o bucatica de cod care genereaza pe pinul 3 (P1.2) o frecventa de 1Hz. Daca vrei mai mult ajutor da`mi mai multe detalii. Codul e scris pentru 8052 @ 11059200Hz...iar simularea e ok. Daca vrei mai multe detalii trimite un PM sau mail. unsigned ind _counter;void Ceva(){ // Seteaza sursa intreruperii: Timer 1 in mod 1, counter TMOD = ( TMOD & 0xF0 ) | 0x10; // Incarcata in T1H,T1L - 0xA645-> Overflow la 25ms TH1 = 0xA6; TL1 = 0x45; EA = 1; // Enable all interrupts TF1 = 0; // TCON -> Timer 1 Overflow Flag = 0 ET1 = 1; // IE -> Activeaza intreruperea Timer 1 TR1 = 1; // TCON -> Incepe sa numere}// end Ceva()// Tratarea Intreruperilorvoid TimerT1( void ) interrupt 3{ _counter++; // 20 * 25 = 500ms if( _counter == 20 ){ P1_2 =! P1_2; _counter = 0; } TH1 = 0xA6; TL1 = 0x45; TR1 = 1;}// end TimerT1()[/code] later edit: valoarea pt 25ms este defapt A645h scuzati, m`am grabit. 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