gimsys Postat Octombrie 27, 2009 Partajează Postat Octombrie 27, 2009 am scris programul de mai jos status equ 03htrisa equ 85hporta equ 05hCOUNT1 equ 08h ;First counter for our delay loopsCOUNT2 equ 09h ;Second counter for our delay loopsbsf status,5 ;Go to Bank 1movlw 00h ;Put 00000 into Wmovwf trisa ;Move 00000 onto TRISA bcf status,5 ;Come back to Bank 0;turn the led onStart movlw 02h ; write 00010 la registerul w movwf porta ; muta contentu de la w la port a;****Add a delay call delay ;****Delay finished, now turn the LED off**** movlw 00h ; write 00000 la registerul w movwf porta ; muta contentu de la w la port a; back to startgoto Start delay Loop1 decfsz COUNT1,1 ;This second loop keeps the LED goto Loop1 ;turned off long enough for us to decfsz COUNT2,1 ;see it turned off goto Loop1 ;Loop2 decfsz COUNT1,1 ;This second loop keeps the LED goto Loop2 ;turned off long enough for us to decfsz COUNT2,1 ;see it turned off goto Loop2 ;returnendsi ledul nu clipeste , ce am gresit ? folosesc oscilatorul intern ledul sta doar aprins pe RA 1 Link spre comentariu
junior Postat Octombrie 27, 2009 Partajează Postat Octombrie 27, 2009 Dezactiveaza partea analogica CMCON=7 . Link spre comentariu
gimsys Postat Octombrie 27, 2009 Autor Partajează Postat Octombrie 27, 2009 am dezactivat cu CMCON equ 1FhMOVLW 0x07 ; Load 7 into W registerMOVWF CMCON ; CMCON = contents of W register 7hdar tot nu merge , parca nu ar merge loop-ul , ca daca pun manual ca off portul respectiv se stinge becul Link spre comentariu
francezu Postat Octombrie 27, 2009 Partajează Postat Octombrie 27, 2009 Ledul se stinge,dar doar pentru cateva microsecunde, si normal ca se vede ca si cum ar sta aprins tot timpul. Trebuie sa bagi o intarziere (call delay)si dupa ce ai facut portul in 0 ( led stins) abia apoi poti sa te intorci la Start.Incearca asa : status equ 03htrisa equ 85hporta equ 05hCOUNT1 equ 08h ;First counter for our delay loopsCOUNT2 equ 09h ;Second counter for our delay loopsbsf status,5 ;Go to Bank 1movlw 00h ;Put 00000 into Wmovwf trisa ;Move 00000 onto TRISA bcf status,5 ;Come back to Bank 0;turn the led onStart movlw 02h ; write 00010 la registerul w movwf porta ; muta contentu de la w la port a;****Add a delay call delay ;****Delay finished, now turn the LED off**** movlw 00h ; write 00000 la registerul w movwf porta ; muta contentu de la w la port a call delay; back to startgoto Start delay Loop1 decfsz COUNT1,1 ;This second loop keeps the LED goto Loop1 ;turned off long enough for us to decfsz COUNT2,1 ;see it turned off goto Loop1 ;Loop2 decfsz COUNT1,1 ;This second loop keeps the LED goto Loop2 ;turned off long enough for us to decfsz COUNT2,1 ;see it turned off goto Loop2 ;returnend LE : In rutina de intarziere vad ca folosesti niste contoare ,dar nu le incarci nicaieri cu niste valori la inceput.In momentul alimentarii pic-ului continutul ram-ului e oarecum random,si anumite constante ce trebuiesc tinute in ram este necesar sa fie actualizate din memoria program. In plus pentru o rutina de intarziere,contoarele trebuiesc reincarcate la fiecare intrare in rutina,pentru ca pe masura executiei acesteia valoarea din contoare se altereaza.Incerca generatorul de la : http://www.piclist.com/techref/piclist/ ... /delay.htm 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