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