Vizitator sorinpetrila Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 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... endAm 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 Unde am gresit? Merci anticipat pentru ajutor. Link spre comentariu
izua Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 Ledul clipește, dar suficient de repede cât să treacă de limita de remanență vizuală a ochiului. Mărește delay-ul. Link spre comentariu
Vizitator sorinpetrila Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 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
izua Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 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 Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 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
sofian Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 trebuie sa initialiezi din nou valorile delay1,2,3 dupa ce se stinge ledul altfel o sa ai delay maxim Link spre comentariu
Vizitator sorinpetrila Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 trebuie sa initialiezi din nou valorile delay1,2,3 dupa ce se stinge ledul altfel o sa ai delay maximcum fac asta? care e comanda? (scuze...chiar sunt incepator)Multumesc. Link spre comentariu
sofian Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 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 Postat Iulie 5, 2010 Partajează Postat Iulie 5, 2010 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
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