Sari la conținut
ELFORUM - Forumul electronistilor

Pls ajutor cu timer


Vizitator s_marius

Postări Recomandate

Vizitator s_marius

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
  • Răspunsuri 11
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • psanyi

    1

  • nicul

    1

  • costy35

    1

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

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

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

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			retiEND
Problema 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

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
  • 2 săptămâni mai târziu...
  • 3 luni mai târziu...
Vizitator Xizzard

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

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