Sari la conținut
ELFORUM - Forumul electronistilor

ledul nu clipeste pe 16f628a


gimsys

Postări Recomandate

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               ;returnend
si ledul nu clipeste , ce am gresit ?

folosesc oscilatorul intern ledul sta doar aprins pe RA 1

Link spre comentariu
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • gimsys

    2

  • junior

    1

  • francezu

    1

Zile populare

Top autori în acest subiect

am dezactivat cu

CMCON equ 1FhMOVLW    0x07     ; Load 7 into W registerMOVWF    CMCON  ; CMCON = contents of W register 7h
dar tot nu merge , parca nu ar merge loop-ul , ca daca pun manual ca off portul respectiv se stinge becul
Link spre comentariu

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

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