Sari la conținut
ELFORUM - Forumul electronistilor

Ajutor incepator 16f690 (pickit 2)


Vizitator sorinpetrila

Postări Recomandate

Vizitator sorinpetrila

Am inceput si eu cu greu . Am pornit de la lectiile prezentate la pickit2 si le-am modificat vrand sa obtin cate ceva. Acum stau de o zi intreaga si ma intreb ce am gresit.Programul original care functioneaza:

#include __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) cblock 0x20Delay1 ; Define two file registers for theDelay2 ; delay loop endc org 0Start: bsf STATUS,RP0 ; select Register Page 1 bcf TRISC,0 ; make IO Pin B.0 an output bcf STATUS,RP0 ; back to Register Page 0MainLoop: bsf PORTC,0 ; turn on LED C0OndelayLoop: decfsz Delay1,f ; Waste time. goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions decfsz Delay2,f ; The outer loop takes and additional 3 instructions per lap * 256 loops goto OndelayLoop ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec. ; call it a two-tenths of a second. bcf PORTC,0 ; Turn off LED C0OffDelayLoop: decfsz Delay1,f ; same delay as above goto OffDelayLoop decfsz Delay2,f goto OffDelayLoop goto MainLoop ; Do it again... end

Am incercat sa maresc delay-ul pentru a mentine ledul aprins mai mult:

#include __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) cblock 0x20Delay1 ; Define two file registers for theDelay2Delay3 ; delay loop endc org 0Start: bsf STATUS,RP0 ; select Register Page 1 bcf TRISC,0 ; make IO Pin B.0 an output bcf STATUS,RP0 ; back to Register Page 0MainLoop: bsf PORTC,0 ; turn on LED C0OndelayLoop: decfsz Delay1,f ; Waste time. goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions decfsz Delay2,f ; The outer loop takes and additional 3 instructions per lap * 256 loops goto OndelayLoop decfsz Delay3,f ; Waste time. goto OndelayLoop ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions ; call it a two-tenths of a second. bcf PORTC,0 ; Turn off LED C0OffDelayLoop: decfsz Delay1,f ; same delay as above goto OffDelayLoop decfsz Delay2,f goto OffDelayLoop decfsz Delay3,f goto OffDelayLoop goto MainLoop ; Do it again... end

Ledul ramane doar aprins :sparge: Unde am gresit? Merci anticipat pentru ajutor.
Link spre comentariu
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • sofian

    2

  • izua

    2

Zile populare

Top autori în acest subiect

Vizitator sorinpetrila

Ledul clipește, dar suficient de repede cât să treacă de limita de remanență vizuală a ochiului. Mărește delay-ul.

In primul program exista doar delay 1 si 2...apoi am adaugat delay3 si la on si la off....ledul sta aprins
Link spre comentariu

Mărește valoarea delay-ului. Defapt, inițializeaz-o la ceva înainte să o mărești. Tu acolo ai delay[x], dar valorile lor inițiale sunt ce s-o nimeri prin ram (valori complet aleatoare), nu ceva cunoscut. Dacă valorile alea sunt 0 nici nu vei avea delay.

 

Poți calcula valorile folosind utilitarul ăsta.

Link spre comentariu
Vizitator sorinpetrila

Am pus 2 secunde in urmatorul program......se aprinde, se stinge si asa ramane

 

#include <p16F690.inc>    __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)    cblock 0x20Delay1                   ; Define two file registers for theDelay2Delay3                   ; delay loop     endc           org 0Start:     bsf       STATUS,RP0          ; select Register Page 1     bcf       TRISC,0             ; make IO Pin B.0 an output     bcf       STATUS,RP0          ; back to Register Page 0	movlw	0x11	movwf	Delay1	movlw	0x5D	movwf	Delay2	movlw	0x05	movwf	Delay3MainLoop:     bsf       PORTC,0             ; turn on LED C0OndelayLoop:     decfsz    Delay1,f            ; Waste time.       goto      OndelayLoop         ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions     decfsz    Delay2,f            ; The outer loop takes and additional 3 instructions per lap * 256 loops     goto      OndelayLoop              decfsz    Delay3,f            ; Waste time.       goto      OndelayLoop         ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions                                   ; call it a two-tenths of a second.           bcf       PORTC,0             ; Turn off LED C0OffDelayLoop:     decfsz    Delay1,f            ; same delay as above     goto      OffDelayLoop     decfsz    Delay2,f     goto      OffDelayLoop     decfsz    Delay3,f     goto      OffDelayLoop     goto      MainLoop            ; Do it again...     end      
Link spre comentariu
Vizitator sorinpetrila

trebuie sa initialiezi din nou valorile delay1,2,3 dupa ce se stinge ledul altfel o sa ai delay maxim

cum fac asta? care e comanda? (scuze...chiar sunt incepator)Multumesc.
Link spre comentariu

Prima data incarci valorile ptr delay si dupa aceea apelezi delay

 

     org 0Start:     bsf       STATUS,RP0          ; select Register Page 1     bcf       TRISC,0             ; make IO Pin B.0 an output     bcf       STATUS,RP0          ; back to Register Page 0MainLoop:	bsf       PORTC,0             ; turn on LED C0	call Load_Delay	call Delay	bcf       PORTC,0             ; Turn off LED C0	call Load_Delay	call Delay	goto MainLoopLoad_Delay:	movlw   0x11	movwf   Delay1	movlw   0x5D	movwf   Delay2	movlw   0x05	movwf   Delay3	returnOndelayLoop:	decfsz    Delay1,f	goto      OndelayLoop	decfsz    Delay2,f	goto      OndelayLoop	decfsz    Delay3,f	goto      OndelayLoop	return
Link spre comentariu
Vizitator sorinpetrila

Prima data incarci valorile ptr delay si dupa aceea apelezi delay

     org 0Start:     bsf       STATUS,RP0          ; select Register Page 1     bcf       TRISC,0             ; make IO Pin B.0 an output     bcf       STATUS,RP0          ; back to Register Page 0MainLoop:	bsf       PORTC,0             ; turn on LED C0	call Load_Delay	call Delay	bcf       PORTC,0             ; Turn off LED C0	call Load_Delay	call Delay	goto MainLoopLoad_Delay:	movlw   0x11	movwf   Delay1	movlw   0x5D	movwf   Delay2	movlw   0x05	movwf   Delay3	returnOndelayLoop:	decfsz    Delay1,f	goto      OndelayLoop	decfsz    Delay2,f	goto      OndelayLoop	decfsz    Delay3,f	goto      OndelayLoop	return
Merci ...am prins ideea
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