-
Problemy ze skończeniem programu na DSM51 (symulacja otwierania/zamykania bramy).
witam was. Piszę program na pracę przejściową do szkoły który bedzie symulował otwieranie i zamykanie bramy. Oczywiście wszystko bedzie symulowane na zaprojektowanej przeze mnie płytce. Diody ułożone jedna po drugiej bedą sie zapalały w prawą stronę jednoczesnie przy tym bedzie mrugała dioda sygnalizująca działanie programu. Narazie wszystko jest realizowane i symulowane na dsm51 a wyświetlacz 7segmentowy symuluje te diody a dioda TEST tak zwany kogut który bedzie mrugał i sygnalizował zamykanie lub otwieranie bramy.
Program do tej pory napisany jest który symuluje zamykanie bramy (zapalanie segmentów w prawo od a-h tworząc cyfrę 8. Potrzebuję teraz by po zapaleniu tej 8. program zaczął odejmować w lewo i gaził je po kolei w lewą stronę od h-a. Po wielu probach i wielu nieudanych probach zwracam się do was o pomoc. Oto program: tyle wiem że Trzeba dopisać bliźniaczą pętlę. Z tym, że w R2 wyzerować bit za pomocą ACC.7 przy każdym powtórzeniu i przesuwać rozkazem RR, aż do spełnienia warunku R2=0
[syntax=asm]
;.TITLE 'SEGMENTY'
;============================
SEG_ON EQU P1.6 ;linia wygaszania wyświetlacza
LED EQU P1.7 ;Dioda TEST podłączona do P1.7
LJMP START
ORG 100H
START:
MOV R6,#8 ;Iloś zapalenia diody TEST
MOV R0,#CSDB ;R0 - adres bufora wyświetlaczy
MOV R1,#CSDS ;R1 - adres wyboru wskaźnika
MOV R2,#1 ;segment pierwszy
MOV A,R2
MOVX @R0,A
CLR SEG_ON ;załączenie wyświetlacza
LOOP:
MOV R4,#30 ;licznik świecenia jednego segmentu
;Świecenie jednego segmentu na wyświetlaczach
LOOP1:
MOV R5,#2 ;licznik wskaźników
MOV R3,#10000000B ;wskaźnik 7
;Przeglądanie kolejnych wskaźników
LOOP2:
MOV A,R3 ;wybór kolejnego wskaźnika
RR A
MOV R3,A
MOVX @R1,A
MOV A,#10 ;czas przeglądania - świecenia
LCALL DELAY_MS ;pojedyńczego wskaźnika
DJNZ R5,LOOP2 ;pętla po wskaźnikach
DJNZ R4,LOOP1 ;pętla świecenia jednego segmentu
MOV A,R2 ;kolejny segment wskaźników
RL A
ORL A,R2
MOV R2,A
MOVX @R0,A
LOOP3:
;Pętla mrugania diody TEST
CLR LED ;zeruj linię -zapal diodę
MOV A,#5 ;czekaj czas 10*100ms=1s
LCALL DELAY_100MS ;podprogram z EPROMu
SETB LED ;ustaw linię -zgaś diodę
MOV A,#5 ;czekaj czas 10*100ms=1s
LCALL DELAY_100MS
DJNZ R6,LOOP ;powtórz
LOOP4:
NOP
SJMP LOOP4
[/syntax]
Mam nadzieję że uzyskam jakaś pomoc tutaj ponieważ po wielu próbach w szkole i na innych forach nic sie nie ruszyło w tym kierunku. Niestety
Tagi
Zasady Postowania
- Nie możesz zakładać nowych tematów
- Nie możesz pisać wiadomości
- Nie możesz dodawać załączników
- Nie możesz edytować swoich postów
-
Forum Rules