Napisałem program który zaświeca na przemian dwie linijki diodowe (7 czerwonych, 7 zielonych), poziom niski na porcie P2 zapala diody zielone a wysoki czerwone. Teraz mam tak zmodyfikować program aby jedna linijka diodowa się rozjaśniała a druga w tym czasie przyciemniała i na odwrót. Tylko nie mam pojęcia jak takie coś zrealizować, będę bardzo wdzięczny za jakieś rady jak zmodyfikować program.
Kod: Zaznacz cały
NAME efektLED
T0_r EQU 0CCCCh
IRAM_r EQU 07Fh
LED_cz EQU P3.3
LED_z EQU P3.5
;------------------------------------------------
BSEG at 0h ;segment w obszarze bitowym BDATA
FLAGA DBIT 01h ;zarezerwuj bit zerowy bajtu 20h,
;(zmienna bitowa o nazwie Flaga)
;------------------------------------------------
DSEG at 21h ;segment danych w obszarze DATA
L_cz DS 01h ;deklaracja jedno bajtowej zmiennej (adres 21h w DATA)
L_z DS 01h ;dyrektywa DS rezerwuje na zmienną podaną liczbę bajtów
;------------------------------------------------
CSEG at 0000h
ljmp Start
;------------------------------------------------
ORG 000Bh
ljmp Int_T0
;-------------------------------------------------
Start:
mov SP,#60 ;wskaźnik stosu domyślnie jest ustawiony na 07h
orl TMOD,#0000$0001b ;inicjalizacja układu czasowo – licznikowego
mov TH0,#HIGH(T0_r)
mov TL0,#LOW(T0_r)
orl IE,#1000$0010b
setb TR0
mov R0,#IRAM_r ;czyszczenie pamięci wewnętrznej
clr A
Reset:
mov @R0,A
djnz R0,Reset
Dodaj:
mov R1,#0000$0001b ;zapalanie kolejnej diody
Dodaj1:
mov A,L_cz
orl A,R1
mov L_cz,A ;ustawienie wartości wyświetlanej na LED czerwon.
xrl A,#1111$1111b
mov L_z,A ;ustawienie wartości wyświetlanej na LED zielonych
mov A,R1
rl A
mov R1,A
cjne R0,#100,$ ;opóźnienie zmieniania wyświetlanych wartości
mov R0,#0
cjne R1,#0000$0001b,Dodaj1 ;przejście do kolejnego cyklu – zmiana pętli
Odejmij:
mov R1,#1111$1110b ;gaszenie kolejnej diody
Odejmij1:
mov A,L_cz
anl A,R1
mov L_cz,A
xrl A,#1111$1111b
mov L_z,A
mov A,R1
rl A
mov R1,A
cjne R0,#100,$
mov R0,#0
cjne R1,#1111$1110b,Odejmij1
ljmp Dodaj
;-----------------------------------------------
Int_T0: ;obsługa przerwania od T0
mov TH0,#HIGH(T0_r)
mov TL0,#LOW(T0_r)
inc R0
cpl FLAGA ;FLAGA znacznik realizowanej części podprogramu
jb FLAGA,Int_cz ;zmiana aktywnej linijki LED setb LED_cz ;wyświetlanie informacji na diodach zielonych
mov P2,L_z ;pobieranie informacji ze zmiennej L_z clr LED_z
reti
Int_cz:
setb LED_z ;wyświetlanie informacji na diodach czerwonych
mov P2,L_cz ;pobieranie informacji ze zmiennej L_cz clr LED_cz
reti
;-----------------------------------------------
END