Poprzedni temat «» Następny temat
IAR E.W. - problem z pętlą (śmieci na wyjściu)
Autor Wiadomość
ghazi 
Nowy na forum



Wiek: 30
Dołączył: 01 Lut 2008
Posty: 77
Skąd: Wrocław
Wysłany: 2009-03-31, 18:39   IAR E.W. - problem z pętlą (śmieci na wyjściu)

Witajcie,

chciałbym wykonać program (tj. zasymulować uC), który stworzy tzw. maszerującą jedynkę. Np. mamy 8 diod ułożonych jedna za drugą. Zapala się pierwsza, gaśnie, zapala się druga, gaśnie, zapala się trzecia etc. Wszystko ma się dzieć z opóźnieniem x sekund. I z tym opoznieniem jest problem.

Narazie wypracowałem coś takiego:


Kod:

#include "msp430.h"
;-------------------------------------------------------------------------------
           ORG     0F000h                  ; Progam Start (4K Flash device)
;-------------------------------------------------------------------------------
RESET         mov.w   #02C0h,SP               ; Set stackpointer (256B RAM device)
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
SetupP1      bis.b   #001h,&P5DIR            ; Set P5.1 to output direction
 
Mainloop:    RLC.B   &P2OUT

loop:           xor.b    #007h,&P1OUT
Wait            mov.w   #000003,R15
Delay          dec.w   R15
                 jnz     Delay
                  jmp     Mainloop
;-------------------------------------------------------------------------------
;           Interrupt Vectors
;-------------------------------------------------------------------------------
           ORG     0FFFEh                  ; MSP430 RESET Vector
           DW      RESET                   ;
           END


Program działa bez pętli opóźniajacej, ale chcialbym, zeby diody paliły się ok. 1 sekundy. Dodanie loop powoduje pojawienie się "smieci" na wyjsciu 2POUT :(

Prosze o porady, jak mozna spowolnic proces zapalania sie diod (a wlasciwie przedluzyc czas swiecenia kazdej po koleji).
 
 
     
Wesker 
Nowy na forum



Wiek: 36
Dołączył: 01 Lut 2006
Posty: 27
Skąd: Leżajsk
Wysłany: 2009-03-31, 21:30   

Właściwie to opóźnienie wydaje się być dobrze zrobione. Samo opóźnienie proponuje sprawdzić zmieniając stan pojedynczego wyprowadzenia np. xor.b #001h, &P2OUT. Natomiast brakuje mi odpowiedniego ustawienia portu 2 w Twoim programie. Wypróbuj ten fragment:

Kod:
  mov.b #0ffh, &P2DIR ; wszystkie linie wyjściowe
  mov.b #001h, &P2OUT ; stan początkowy
Mainloop  rlc.b &P2OUT ; obrót portu 2 z wykorzystaniem znacznika C
Delay dec.w R15 ; zmniejsz R15
  jnz Delay ; jeśli R15 ≠ 0 to pozostań w petli opóźniającej
  jmp Mainloop ; skocz na początek pętli głównej


Port zostanie wyzerowany, gdy 1 znajdzie się w C, ale później ponownie zostanie przesunięta na początek portu 2.
 
     
ghazi 
Nowy na forum



Wiek: 30
Dołączył: 01 Lut 2008
Posty: 77
Skąd: Wrocław
Wysłany: 2009-03-31, 21:53   

@Wesker, naprowadziłeś mnie na dobry trop :)

Być może moj programik jest wykonany "lewą ręką za prawe ucho", ale działa :) Zostawiam go dla potomnych:

Kod:
#include "msp430.h"
;-------------------------------------------------------------------------------
           ORG     0F000h                  ; Progam Start (4K Flash device)
;-------------------------------------------------------------------------------
RESET       mov.w   #02C0h,SP               ; Set stackpointer (256B RAM device)
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
SetupP1     bis.b   #001h,&P5DIR            ; Set P5.1 to output direction
 
 
 
            mov.w   #000008,R14
hop:        xor.b   #007h,&P5OUT
Wait        mov.w   #000002,R15             ; sekundy do oczekiwania
Delay       dec.w   R15
            JNZ     Delay 
 
            RLA.B   &P5DIR
            dec.w   R14
            JNE     hop                   ; jesli R14<>0 idz do hop
            JC      RESET                 ; jesli R14=0 resetuj

;-------------------------------------------------------------------------------
;           Interrupt Vectors
;-------------------------------------------------------------------------------
           ORG     0FFFEh                  ; MSP430 RESET Vector
           DW      RESET                   ;
           END

   

 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,02 sekundy. Zapytań do SQL: 10