Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CSEG AT 0
- JMP START
- CSEG AT 0x100
- RAND3:
- MOV A,R6
- MOV B,#13 ; do B wpisz 0Dh
- MUL AB ; mnozenie A przez B, wynik wpisywany jest do rejestrów B i A (bardziej znaczacy bajt do B, mniej znaczacy bajt do A)
- ADD A,#171 ; dodaj do A liczbe 0ABh
- MOV R6,A
- MOV B,#3
- DIV AB ; dziel A przez B, calkowita czesc do A, reszta do B
- RET ; powrot do miejsca wywolania podprogramu
- KONIEC:
- CLR TR0 ;On/off timera: 1-on, 0-off
- MOV A,#255
- CPL A
- MOV P2,A
- RESTART:
- MOV A,#0xFF ; wartosc odpowiadajaca braku wcisniecia przycisku
- CJNE A,P3,START ; porownuje A ze stanem P3, jezeli ROZNE to jump do RESTART
- SJMP RESTART
- ZWIEKSZ:
- CLR TR0
- INC R4
- JMP MAIN
- ZMNIEJSZ:
- CLR TR0
- DEC R4
- JMP MAIN
- START:
- MOV R4,#200 ; do R4 podaj domyslny czas swiecenia (podana wartosc x 1/20 s)
- MAIN:
- LCALL RAND3 ; wywolanie "podprogramu" w celu losowania liczby 1-3
- MOV R1,B ; do R1 przenies wylosowana liczbe
- MOV A,#1
- LOOP1:
- RL A ; przesun o 1 bit w lewo, czyli 1->2, 2->4, 2->1 itd.
- DJNZ R1,LOOP1 ; dekrementacja R1, dopoki R1 != 0 to skok, to ustawia liczbe odpowiadajaca swieceni diodu (np. 0100000)
- MOV R2,A ; do R2 wrzuc ktora dioda ma sie swiecic
- CPL A ; zaneguj akumulator (swiecenie na niskim stanie)
- MOV P2,A ; ustaw diody
- MOV A,R4
- MOV R3,A ; do R3 wrzuc domyslny czas swiecenia
- TIMER:
- MOV TH0,#0xff ; starszy bajt TIMERa0 ustawiony na 255
- MOV TL0,#0xfd ; mlodszy bajt TIMERa0 ustawiony na 253
- MOV TMOD,#01 ; 16-bitowy timer 0
- SETB TR0 ; startujemy timer 0
- CLR TF0 ; wyczyszczenie Bitu ustawianego w momencie przepelnienia na timerze 0
- ; sprawdzenie, czy wcisniety przycisk odpowiadajacy diodzie
- MOV A,P3 ; pobierz do A ustawienie przyciskow (ustawienie typu: 1101111)
- MOV B,R2 ; do B wstaw ktora dioda ma sie swiecic (ustawienie typu: 0100000)
- CPL A ; zaneguj A, czyli ustawienie typu: 0010000
- ANL A,B ; wymnozenie logiczne A i B, wynik do A
- JNZ KONIEC ; jezeli A != 0 to skok, co odpowiada sytuacji, gdy A = B, a wiec wcisnieto przycisk odpowiadajacy diodzie
- ; sprawdzenie, czy wcisniety przycisk odpowiadajacy zwiekszeniu czasu swiecenia
- MOV A,P3 ; pobierz do A ustawienie przyciskow (ustawienie typu: 1101111)
- MOV B,#10000000b
- CPL A ; zaneguj A, czyli ustawienie typu: 0010000
- ANL A,B ; wymnozenie logiczne A i B, wynik do A
- JNZ ZWIEKSZ ; jezeli A != 0 to skok, co odpowiada sytuacji, gdy wcisniety S7
- ; sprawdzenie, czy wcisniety przycisk odpowiadajacy zmniejszniu czasu swiecenia
- MOV A,P3 ; pobierz do A ustawienie przyciskow (ustawienie typu: 1101111)
- MOV B,#01000000b
- CPL A ; zaneguj A, czyli ustawienie typu: 0010000
- ANL A,B ; wymnozenie logiczne A i B, wynik do A
- JNZ ZMNIEJSZ ; jezeli A != 0 to skok, co odpowiada sytuacji, gdy wcisniety S6
- RET_POINT:
- JNB TF0,$ ; sprawdza TF0, jezeli TF0 == 0 to skok
- DJNZ R3,TIMER ; dekrementacja R3 i jezeli R3 != 0 to skok
- CLR TR0 ; On/off timera: 1-on, 0-off - CLR daje 0
- JMP MAIN
- END
- ///////LAB 2
- CSEG AT 0
- JMP 100h
- CSEG AT 100h
- start:
- MOV A,P3
- petla:
- CJNE A,P3,dioda
- SJMP petla
- dioda:
- MOV R0,P3
- MOV A,P2
- XLR A,R0
- CPL A
- MOV P2, A
- sjmp start
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement