Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .area MAIN(ABS)
- .org 0x000
- LJMP START
- .org 0x00B
- LJMP TIMER
- .org 0x100
- START:
- ANL TMOD, #0xF0 ;INICJALIZACJA LICZNIKA I PRZERWAN
- ORL TMOD, #0x01
- SETB EA
- SETB ET0
- SETB TR0
- MOV R7,#0x08 ;LICZNIK PRZEKRECEN LICZNIKA
- MOV R0,#0x00 ;NUMER DIODY, KTORA MA SWIECIC
- SETB F0 ;KIERUNEK ZMIAN R0 1 - UP, 0 - DOWN
- MOV P1,#0xFF ;NA POCZATKU ZADNA DIODA NIE SWIECI
- CLR P3.4
- CLR P3.5
- MAIN:
- LJMP MAIN ;DO NOTHING
- TIMER:
- DJNZ R7,ENDINT ;JEZELI NIE CO OSMY, TO NIC NIE ROBIC OPROCZ ZMNIEJSZENIA
- MOV R7,#0x08 ;ZEROWANIE LICZNIKA PRZEKRECEN LICZNIKA
- JNB F0,DECREMENT ;JEZELI KIERUNEK ZMIAN TO 0, TO SKOK DO CZESCI DEKREMENTUJACEJ
- PREINCREMENT:
- ;;;;;;;;;JEZELI PSW.F0 = 1, CZYLI IDZIEMY W GORE
- INC R0 ;ZWIEKSZENIE NUMERU DIODY
- CJNE R0,#0x0B,SETDIODA ;JEZELI R0 JEST MNIEJSZE OD 0x0B, CZYLI MA PRAWIDLOWY NUMER DIODY, TO MOZNA SKOCZYC DO WYPISANIA TEGO NA ODPOWIEDNIA DIODE
- CLR F0 ;JEZELI R0 BYLO ROWNE 0x0B, TO TRZEBA ZEROWAC F0 I ZEJSC DO 0x0A, ZEBY ZMNIEJSZYC Z POWROTEM R0 DO PRZYZWOITEJ WARTOSCI
- ;;;;;;;;;JEZELI PSW.F0 = 0, CZYLI IDZIEMY W DOL
- DECREMENT:
- DEC R0 ;ZMNIEJSZENIE NUMERU DIODY
- CJNE R0,#0x00,SETDIODA ;JEZELI R0 JEST CO NAJMNIEJ 0x01, TO MOZNA PRZEJSC DO ZAPALANIA DIODY
- SETB F0 ;JEZELI R0 BYLO 0x00, TO TRZEBA USTAWIC F0 I SKOCZYC DO INKREMENTACJI, ZEBY PRZYWROCIC DOBRY NUMER DIODY W F0
- LJMP PREINCREMENT
- ;;;;;;;;;ZAPALANIE DOWOLNEJ DIODY WEDLUG NUMERU 0x01-0x0A UTRZYMYWANEGO W R0
- SETDIODA:
- CJNE R0,#0x02,WHATEVER1 ;CJNE USTAWI C NA 1, JEZELI R0 JEST MNIEJSZE OD 0x02
- WHATEVER1: ;SKOK JEST NIEPRZYDATNY, EFEKT UBOCZNY UZYSKIWANIA REZULTATU POROWNANIA W CJNE
- JB CY,DIODA1 ;JEZELI R0 JEST MNIEJSZE OD 0x02 (CO POZNAJE PO USTAWIONYM W CJNE BICIE C), TO ZNACZY, ZE R0 = 0x01.
- ;OPIERA SIE TO NA ZALOZENIU, ZE W TEJ CZESCI KODU R0 MA WARTOSCI Z ZAKRESU 0x01 DO 0x0A, O CO POSTARALEM SIE W POPRZEDNIEJ CZESCI KODU
- CJNE R0,#0x03,WHATEVER2 ;RESZTA ANALOGICZNIE
- WHATEVER2:
- JB CY,DIODA2
- CJNE R0,#0x04,WHATEVER3
- WHATEVER3:
- JB CY,DIODA3
- CJNE R0,#0x05,WHATEVER4
- WHATEVER4:
- JB CY,DIODA4
- CJNE R0,#0x06,WHATEVER5
- WHATEVER5:
- JB CY,DIODA5
- CJNE R0,#0x07,WHATEVER6
- WHATEVER6:
- JB CY,DIODA6
- CJNE R0,#0x08,WHATEVER7
- WHATEVER7:
- JB CY,DIODA7
- CJNE R0,#0x09,WHATEVER8
- WHATEVER8:
- JB CY,DIODA8
- CJNE R0,#0x0A,WHATEVER9
- WHATEVER9:
- JB CY,DIODA9
- LJMP DIODA10 ;JEZELI ZADNA Z POWYZSZYCH OPCJI NIE ZADZIALALA, TO ZNACZY, ZE R0 = 0A
- DIODA1: ;PROSTE I BRUTALNE
- MOV P1,#0b11111110
- LJMP BREAK
- DIODA2:
- MOV P1,#0b11111101
- LJMP BREAK
- DIODA3:
- MOV P1,#0b11111011
- LJMP BREAK
- DIODA4:
- MOV P1,#0b11110111
- LJMP BREAK
- DIODA5:
- MOV P1,#0b11101111
- LJMP BREAK
- DIODA6:
- MOV P1,#0b11011111
- LJMP BREAK
- DIODA7:
- MOV P1,#0b10111111
- LJMP BREAK
- DIODA8:
- MOV P1,#0b01111111
- CLR P3.4 ;9 DIODA MOGLA BYC ZAPALONA, A TERAZ JUZ NIE POWINNA
- LJMP BREAK
- DIODA9:
- MOV P1,#0xFF ;8 DIODA MOGLA BYC ZAPALONA, A TERAZ NIE POWINNA
- CLR P3.5 ;PODOBNIE 10
- SETB P3.4
- LJMP BREAK
- DIODA10:
- CLR P3.4 ;9 DIODA BYLA ZAPALONA, A TERAZ NIE POWINNA
- SETB P3.5
- BREAK: ;TEGO I PONIZSZEGO W ZASADZIE MOZNA BYLO UNIKNAC WOLAJAC WE WSZYSTKICH MIEJSCACH
- ;RETI ZAMIAST LJMP BREAK I LJMP ENDINT, ALE JUZ ZOSTAWIAM STRUKTURE W STYLU SWITCHA Z C
- ENDINT:
- RETI ;KONIEC PRZERWANIA
- END
Add Comment
Please, Sign In to add comment