podstawy uC lab

LAB ostateczna

WR_CMD EQU 0FF2CH

RD_STATUS EQU 0FF2EH

WR_DATA EQU 0FF2DH

RD_DATA EQU 0FF2FH

INIT EQU 038H

CLEAR EQU 001H

LCD_ON EQU 00FH

SEKUNDY EQU 0

MINUTY EQU 0

GODZINY EQU 0

jest_sek EQU 0

CZAS EQU 50

CYKLE EQU (65536 - CZAS*1000)

ORG 0

call set_timer

CALL inicjuj

SJMP $

ORG 0BH

INC R7

CJNE R7,#20,DALEJ2

MOV R7,#0

CALL licz

CALL disp_time

dalej2:

RETI

set_timer:

CLR TR0

CLR TF0

ANL TMOD,#11110000B

ORL TMOD, #00000001B

MOV TL0, #LOW(CYKLE)

MOV TH0, #HIGH(CYKLE)

SETB EA

SETB ET0

SETB TR0

RET

licz:

push ACC

INC SEKUNDY

mov A,SEKUNDY

CJNE A,#60,DALEJ

MOV SEKUNDY,#0

INC MINUTY

mov A,SEKUNDY

CJNE A,#60,DALEJ

mov MINUTY,#0

INC GODZINY

DALEJ:

pop acc

RET

write_cmd:

PUSH ACC

MOV DPTR,#RD_STATUS

loop_:

MOVX A,@DPTR

JB ACC.7,loop_

MOV DPTR,#WR_CMD

POP ACC

MOVX @DPTR,A

RET

inicjuj:

MOV A,#INIT

CALL write_cmd

MOV A,#CLEAR

CALL write_cmd

MOV A,#LCD_ON

CALL write_cmd

RET

write_data:

PUSH ACC

MOV DPTR,#RD_STATUS

loop1_:

MOVX A,@DPTR

JB ACC.7,loop1_

MOV DPTR,#WR_DATA

POP ACC

MOVX @DPTR,A

RET

goto_xy:

mov R2,#0

JNB ACC.5, dalej3

mov R2,#1

dalej3:

mov R3, A

mov A, #00001111B

anl A, R3

mov R1,A

mov A,R2

mov B, #64

mul AB

add A,R1

orl A,#128

call write_cmd

Ret

disp_dec:

mov B,#10

div AB

add A, #'0'

call write_data

mov A,B

add A,#'0'

call write_data

Ret

disp_time:

push acc

mov A, #00000100B

call goto_xy

mov A,GODZINY

call disp_dec

mov A,#':'

call write_data

mov A,MINUTY

call disp_dec

mov A,#':'

call write_data

mov A,SEKUNDY

call disp_dec

pop acc

END

ORG 0

TIME EQU 50 ; Zmienna - czas do odmierzenia w ms

LOAD EQU (65536 - TIME*1000) ; Zmienna - liczba cykli potrzebnych do odmierzenia czasu

MOV P1, #00001111B ; Zapalenie 4 diod

MOV R0, #100 ; Licznik, ile razy ma być odliczone 50 ms, w R0

CALL ODMIERZ_X50MS_T ; Wywołanie procedury odliczającej 1 s timerem

MOV P1, #11110000B ; Zgaszenie 4 diod i zapalenie 4 pozostałych

MOV R0, #40 ; Licznik, ile razy ma być odliczone 50 ms, w R0

CALL ODMIERZ_X50MS_T ; Wywołanie procedury odliczającej 2 s timerem

MOV P1, #00001111B ; Zgaszenie 4 diod i zapalenie 4 pozostałych

SJMP $ ; Pętla instrukcji - zapobiega wejściu do procedury

ODMIERZ_X50MS_T:

CLR TR0 ; Wyłączanie timera

ANL TMOD, #0F0H ; Wyzerowanie rejestru sterującego timera nr 0

ORL TMOD, #1 ; Ustawienie trybu timera na 16 bitów

PETLA: ; Pętla, w której odmierzane jest 50ms(50 000 cykli)

MOV TH0, #HIGH(LOAD) ; Załadowanie starszych bitów zmiennej z liczbą cykli(stop)

MOV TL0, #LOW(LOAD) ; Załadowanie młodszych bitów zmiennej z liczbą cykli(start)

CLR TF0 ; Wyzerowanie bitu przepełnienia

SETB TR0 ; Włączenie timera

JNB TF0, $ ; Odliczanie dopóki nie nastąpi przepełnienie

DJNZ R0, PETLA ; Zmniejszenie licznika(R0) i jeśli > 0 - powtórzenie PETLA

RET ; Wyjście z procedury

END

LAB XXXX

LJMP START

ORG 100H

START:

LCALL TABLICA_KODOW ; wywoluje funkcje, która tworzy w pamieci tablice do zamiany kodu klawisza na wartosc

; Porty klawiatury

P5 EQU 0F8H

P7 EQU 0DBH

; Rejestry LCD

LCDstatus EQU 0FF2EH

LCDcontrol EQU 0FF2CH

LCDdataWR EQU 0FF2DH

; Funkcje LCD

INIT EQU 038H ; inicjalizuje wyswietlacz

CLEAR EQU 001H ; czysci wyswietlacz

HOME EQU 080H ; umieszcza kursor w pierwszej linii

HOME2 EQU 0C0H ; umieszcza kursor w drugiej linii

LCALL LCD_INIT

LCALL DELAY

LCALL WYCZYSC

MOV R2, #0x00 ; zeruje R2

ODCZYT:

MOV R0, #4 ; iterator po 4 wierszach klawiatury

MOV R1, #01111111B ; maska do aktywacji kolejnych wierszy klawiatury

PETLA1:

ORL P5, #11110000B ; reset portu P5 - dezaktywuje wszystkie wiersze

MOV A, R1 ; kopiuje maske z R1 do A

ANL P5, A ; aktywuje odpowiedni wiersz klawiatury

MOV A, P7 ; kopiuje zawartosc P7 do A – odczytuje kod kolumny

ORL A, #11110000B ; ustawia starsza, nieistotna czesc na 1

CPL A ; neguje A

JZ PETLA2 ; jezeli A=0 skok do petla2 - nic nie jest wcisniete

CPL A ; odtwarza A po negacji

ANL A, R1 ; sklada kod klawisza

MOV R2, A ; zapisuje kod w R2

LJMP ODCZYT ; skok do odczyt – rozpoczyna skanowanie od nowa

PETLA2:

MOV A, R1 ; kopiuje do akumulatora aktualna maske z R1

RR A ; przesuwa maske o 1 bit w prawo, czyli

; zmienia aktywny wiersz na nastepny

MOV R1, A ; wpisuje do R1 nowa maske

DJNZ R0, PETLA1 ; jezeli --R0 =! 0 to skok do petla1, czyli

; powtarza skanowanie dla nastepnego wiersza

; Program znajduje sie w tym miejscu jezeli R0=0

; oznacza to, ze przeskanowal wszystkie wiersze

MOV A, R2 ; umieszcza zawartosc R2 w A

JZ ODCZYT ; jezeli A(R2) = 0 to znaczy ze zaden klawisz nie zostal ostatnio wcisniety, wiec rozpoczyna skanowanie od nowa

; Program znajduje sie w tym miejscu jezeli ostatnio zostal wcisniety i zwolniony jakis klawisz, a jego kod nie zostal dotychczas wyswietlony

MOV DPH, #0x80 ; umieszcza stala 80 w starszej czesci DPTR

MOV DPL, R2 ; umieszcza kod klawisza w mlodszej czesci DPTR

MOVX A, @DPTR ; umieszcza wartosc klawisza w A

JZ WYCZYSC

LCALL LCD_WRITE_CHAR ; wyswietla wartosc klawisza na wyswietlaczu

MOV R2, #0x00 ; zeruje R2 – zapobiega repetycji

LJMP ODCZYT

WYCZYSC:

LCALL LCD_CLEAR

LJMP ODCZYT

NOP

NOP

NOP

JMP KONIEC

; Definicje funkcji

LCD_INIT:

MOV DPTR,#LCDcontrol ; ustawia wzskaznik DPTR na rejestr funkcji wyswietlacza

MOV A, #INIT

MOVX @DPTR, A ; inicjalizuje wyswietlacz

MOV A, #CLEAR

MOVX @DPTR, A ; czysci wyswietlacz

MOV A, #HOME

MOVX @DPTR, A ; ustawia kursor w pierszej linii

MOV R6, #16

MOV R7, #32

RET

LCD_CLEAR:

MOV DPTR,#LCDcontrol ; ustawia wzskaznik DPTR na rejestr funkcji wyswietlacza

MOV A, #CLEAR

MOVX @DPTR, A ; czysci wyswietlacz

MOV A, #HOME

MOVX @DPTR, A ; ustawia kursor w pierszej linii

MOV R6, #16

MOV R7, #32

RET

LCD_WRITE_CHAR: ; funkcja wyswietlajaca znak zapisany w A na wyswietlaczu

PUSH ACC ; odklada A na stos

BUSY:

MOV DPTR, #LCDstatus

MOVX A, @DPTR

JB ACC.7, BUSY ; jezeli wyswitlacz jest zajety, to czekaj

MOV A, R7

JNZ CHECK_LINE

LCALL LCD_CLEAR

LJMP WRITE

CHECK_LINE:

MOV A, R6

JNZ WRITE

MOV DPTR,#LCDcontrol ; ustawia wzskaznik DPTR na rejestr funkcji wyswietlacza

MOV A, #HOME2

MOVX @DPTR, A ; ustawia kursor w drugiej linii

MOV R6, #16

WRITE:

POP ACC ; zdejmuje A ze stosu

MOV DPTR,#LCDdataWR ; ustawia wzskaznik DPTR na rejestr wypisywania danych

MOVX @DPTR,A ; wyswietla znak

DEC R7

DEC R6

RET

TABLICA_KODOW: ; funkcja umieszczajaca w pamieci kody klawiszy

;0

MOV DPTR, #0x80EB

MOV A, #48

MOVX @DPTR, A

;1

MOV DPTR, #0x8077

MOV A, #49

MOVX @DPTR, A

;2

MOV DPTR, #0x807B

MOV A, #50

MOVX @DPTR, A

;3

MOV DPTR, #0x807D

MOV A, #51

MOVX @DPTR, A

;4

MOV DPTR, #0x80B7

MOV A, #52

MOVX @DPTR, A

;5

MOV DPTR, #0x80BB

MOV A, #53

MOVX @DPTR, A

;6

MOV DPTR, #0x80BD

MOV A, #54

MOVX @DPTR, A

;7

MOV DPTR, #0x80D7

MOV A, #55

MOVX @DPTR, A

;8

MOV DPTR, #0x80DB

MOV A, #56

MOVX @DPTR, A

;9

MOV DPTR, #0x80DD

MOV A, #57

MOVX @DPTR, A

;A

MOV DPTR, #0x807E

MOV A, #65

MOVX @DPTR, A

;B

MOV DPTR, #0x80BE

MOV A, #66

MOVX @DPTR, A

;C

MOV DPTR, #0x80DE

MOV A, #67

MOVX @DPTR, A

;#

MOV DPTR, #0x80ED

MOV A, #35

MOVX @DPTR, A

;D

MOV DPTR, #0x80EE

MOV A, #68

MOVX @DPTR, A

;*

MOV DPTR, #0x80E7

MOV A, #42

MOVX @DPTR, A

RET ; koniec funkcji TABLICA_KODOW

; opoznienie

DELAY:

MOV R0, #200

DELAY_1:

MOV R1, #255

DELAY_2:

DJNZ R1, DELAY_2

DJNZ R0, DELAY_1

RET

KONIEC:

END START

LAB4

WR_CMD EQU 0FF2CH ; RW=0, RS=0

WR_DATA EQU 0FF2DH ; RW=0, RS=1

RD_STATUS EQU 0FF2EH ; RW=1, RS=0

;RD_DATA EQU 0FF2CH ; RW=1, RS=1 ??

INS_CLEAR EQU 001H

INS_FUNCT_SET EQU 038H

INS_DISPLAY_ON EQU 00EH

ENTRY_MODE_SET EQU 006H

ORG 0

LCALL init

MOV DPTR, #text

LCALL PISZ

SJMP $

KOMENDA:

PUSH DPH

PUSH DPL

LCALL wait_while_busy

MOV DPTR, #WR_CMD

MOVX @DPTR, A

POP DPL

POP DPH

RET

write_data:

PUSH DPH

PUSH DPL

LCALL wait_while_busy

MOV DPTR, #WR_DATA

MOVX @DPTR, A

POP DPL

POP DPH

RET

wait_while_busy:

PUSH ACC

MOV DPTR, #RD_STATUS

busy_loop:

MOVX A, @DPTR

JB ACC.7, busy_loop

POP ACC

RET

PISZ:

MOVX A, @DPTR

JZ PISZ_end

LCALL write_data

INC DPTR

SJMP PISZ

PISZ_end:

RET

;-----------------------------------------------

init:

MOV A, #INS_FUNCT_SET

LCALL KOMENDA

MOV A, #INS_CLEAR

LCALL KOMENDA

MOV A, #INS_DISPLAY_ON

LCALL KOMENDA

MOV A, #ENTRY_MODE_SET

LCALL KOMENDA

RET

text: DB 'EIT & INF',0

END

____________________________________________________________________________________________________

tekst1: DB 'ala ma kota', 0

tekst2: DB 'Zan & Miki :)', 0

LEDS EQU P1

LCD_INSTRUCTION_CLEAR EQU 001H

LCD_INSTRUCTION_DISPLAY_ON EQU 00EH

LCD_INSTRUCTION_FUNCTION_SET EQU 038H

LCD_ADDR_READ_STATUS EQU 0FF2EH

LCD_ADDR_WRITE_COMMAND EQU 0FF2CH

LCD_ADDR_WRITE_DATA EQU 0FF2DH

ORG 0

SJMP main

; --------------------------------------------------

; main()

; --------------------------------------------------

main:

LCALL lcd_init

;;MOV A, #'A'

;;LCALL lcd_write_data

MOV DPTR, tekst1

LCALL lcd_patch

main_loop:

MOV A, LEDS

CPL A

MOV LEDS, A

SJMP main_loop

; --------------------------------------------------

; procedura czekajaca doputy wyswietlacz bedzie juz dostepny

; --------------------------------------------------

lcd_wait_while_busy:

PUSH ACC ; odkladamy A na stos

MOV DPTR, #LCD_ADDR_READ_STATUS ; prosimy wyswietlacz o zwrocenie statusy, musimy sprawdzic czy nie jest zajety

lcd_wait_while_busy_loop:

MOVX A, @DPTR ; wrzucamy odpowiedz wyswietlacza do akumulatora

JB ACC.7, lcd_wait_while_busy_loop ; sprawdzamy 7 bit akumulatora (BF - busy flag), jesli wyswietlacz jest zajety to zapetlamy sie

POP ACC ; sciagamy A ze stosu

RET

; --------------------------------------------------

; wyslanie komendy do wyswietlacza

; komenda w A

; --------------------------------------------------

lcd_write_cmd:

LCALL lcd_wait_while_busy

MOV DPTR, #LCD_ADDR_WRITE_COMMAND ; przesylamy odpowiedni kod do wyswietlacza

MOVX @DPTR, A ; przesylamy zawartosc akumulatora do wyswietlacza

RET

; --------------------------------------------------

; wyslanie danych do wyswietlacza

; dane w A

; --------------------------------------------------

lcd_write_data:

LCALL lcd_wait_while_busy

MOV DPTR, #LCD_ADDR_WRITE_DATA ; przesylamy odpowiedni kod do wyswietlacza

MOVX @DPTR, A ; przesylamy zawartosc akumulatora do wyswietlacza

RET

; --------------------------------------------------

; inicjalizacja wyswietlacza LCD

; --------------------------------------------------

lcd_init:

MOV A, #LCD_INSTRUCTION_FUNCTION_SET

LCALL lcd_write_cmd

MOV A, #LCD_INSTRUCTION_CLEAR

LCALL lcd_write_cmd

MOV A, #LCD_INSTRUCTION_DISPLAY_ON

LCALL lcd_write_cmd

RET

; --------------------------------------------------

; przejscie do wspolrzednych x/y w wyswietlaczu

; argument w A, mlodsze 4 bity - pozycja x, 5 bit - pozycja y (jak 0 to gora jak 1 to dol)

; --------------------------------------------------

lcd_gotoxy:

RET

; --------------------------------------------------

; wysylanie tekstu, w DPTR wskaznik na tekst

; --------------------------------------------------

lcd_patch:

MOVX A, @DPTR

JZ lcd_patch_end ; sprawdzamy czy akumulator jest zerem

LCALL lcd_write_data

INC DPTR

SJMP lcd_patch ; wysylamy nastepny znak

lcd_patch_end:

RET

END

LAB 3

P5 EQU 0F8H

P7 EQU 0DBH

LJMP START

ORG 100H

START:

MOV DPH,#0x80;

MOV DPL,#0x11;

MOV A,#0x11;

MOVX @DPTR,A;

MOV DPL,#21h;

MOV A,#2h;

MOVX @DPTR, A;

MOV DPL,#31h;

MOV A,#3h;

MOVX @DPTR,A;

MOV DPL,#12h;

MOV A,#4h;

MOVX @DPTR, A;

MOV DPL,#22h;

MOV A,#5h;

MOVX @DPTR, A;

MOV DPL,#32h;

MOV A,#6h;

MOVX @DPTR, A

MOV DPL,#13h;

MOV A, #7h;

MOVX @DPTR, A

MOV DPL,#23h;

MOV A,#8h;

MOVX @DPTR, A

MOV DPL,#32h;

MOV A, #9h;

MOVX @DPTR, A

MOV DPL,#34h;

MOV A, #0h;

MOVX @DPTR, A

MOV DPL,#41h;

MOV A,#10;

MOVX @DPTR, A

MOV DPL,#42h;

MOV A, #11;

MOVX @DPTR, A

MOV DPL,#43h;

MOV A,#12;

MOVX @DPTR,A

MOV DPL,#44h;

MOV A, #13;

MOVX @DPTR, A

MOV DPL,#34h;

MOV A,#14;

MOVX @DPTR, A

MOV DPL,#14h;

MOV A,#15;

MOVX @DPTR, A;

START1:

MOV P5, #01111111B

MOV R5, #4

PETLA1:

MOV A, P7

CPL A

JZ PETLA2

CPL A

XRL A, P5

CPL A

MOV DPL, A;

MOVX A, @DPTR;

CPL A;

MOV P1,A

JMP MARTWAPETLA

POWROT:

MOV P1, #0FFh

PETLA2:

MOV A, P5

RR A

MOV P5, A

DJNZ R5,PETLA1

MARTWAPETLA:

MOV R5, #0FFH

CZEKANIE1:

MOV R4, #0100

CZEKANIE2:

DJNZ R4,CZEKANIE2

DJNZ R5,CZEKANIE1

JMP POWROT

JMP START1

NOP

NOP

NOP

JMP $

END START1

nasze na zajeciach 2

P5 EQU 0F8H

P7 EQU 0DBH

LJMP START

ORG 100H

START:

MOV DPH,#0x80; znaczące bajty dla klawiatury

MOV DPL,#0x11; znając każdy adres przycisku przyporządkowujemy mu nowy adres

MOV A,#0x11;

MOVX @DPTR,A; i skladamy go w 16 bitowy

; i tak przez wszytskie 16 klawiszy

MOV DPL,#21h;

MOV A,#2h;

MOVX @DPTR, A;

MOV DPL,#31h;

MOV A,#3h;

MOVX @DPTR,A;

MOV DPL,#12h;

MOV A,#4h;

MOVX @DPTR, A;

MOV DPL,#22h;

MOV A,#5h;

MOVX @DPTR, A;

MOV DPL,#32h;

MOV A,#6h;

MOVX @DPTR, A

MOV DPL,#13h;

MOV A, #7h;

MOVX @DPTR, A

MOV DPL,#23h;

MOV A,#8h;

MOVX @DPTR, A

MOV DPL,#32h;

MOV A, #9h;

MOVX @DPTR, A

MOV DPL,#34h;

MOV A, #0h;

MOVX @DPTR, A

MOV DPL,#41h;

MOV A,#10;

MOVX @DPTR, A

MOV DPL,#42h;

MOV A, #11;

MOVX @DPTR, A

MOV DPL,#43h;

MOV A,#12;

MOVX @DPTR,A

MOV DPL,#44h;

MOV A, #13;

MOVX @DPTR, A

MOV DPL,#34h;

MOV A,#14;

MOVX @DPTR, A

MOV DPL,#14h;

MOV A,#15;

MOVX @DPTR, A;

START1:

MOV P5, #01111111B

MOV R5, #4

PETLA1:

MOV A, P7

CPL A

JZ PETLA2

CPL A

XRL A, P5

CPL A

MOV DPL, A;

MOVX A, @DPTR;

CPL A;

MOV P1,A;

PETLA2:

MOV A, P5

RR A

MOV P5, A

DJNZ R5,PETLA1

JMP START1

NOP

NOP

NOP

JMP $

END START1

;NASZE NA ZAJECIACH 1

P5 EQU 0F8H

P7 EQU 0DBH

LJMP START

ORG 100H

START:

MOV P5, #01111111B

MOV R5, #4

PETLA1:

MOV A, P7

CPL A

JZ PETLA2

CPL A

XRL A, P5

CPL A

MOV P1, A

PETLA2:

MOV A, P5

RR A

MOV P5, A

DJNZ R5,PETLA1

JMP START

NOP

NOP

NOP

JMP $

END START

;KLAWIATURA 2

$NOMOD51

$NOLIST

#include<reg517.h>

$LIST

LJMP START

ORG 100h

START:

MOV R2,#4 ;licznik wierszy

MOV R1,#07Fh ;adres pierwszego wiersza

petla1:

MOV P5,R1 ; na P5 adres pierwszego wiersza

MOV A,P7 ;do akumulatora wartosc portu P7

XRL A,#0FFh ; exor sprawdzenie czy jakis klawisz wcisniety

JZ petla2 ;jesli nie wcisniety skacz do petli 2

MOV A,P7 ; przeniesienie do akumulatora wartosci portu P7

ANL A,R1 ;operacja and na akumulatorze i wartosci wiersza

MOV P1,A ;przeniesienie na diody akumulatora

petla2:

MOV A,R1 ;przeniesienie do akumulatora adresu wiersza

RR A ; przesuniecie bitowe

MOV R1,A ; przesylanie akumulatora do adresu wiersza

DJNZ R2,petla1 ;dekrementacja i jesli licznik wierszy jest rozny od 0 to skok

SJMP START ; powrot do poczatku

JMP $

END

;KLAWIATURA 1

$NOMOD51

$NOLIST

#include<reg517.h>

$LIST

LJMP START

ORG 100h

START:

MOV R2,#4 ;licznik wierszy

MOV R1,#07Fh ;adres pierwszego wiersza

petla1:

MOV P5,R1 ; na P5 adres pierwszego wiersza

MOV A,P7 ;do akumulatora wartosc portu P7

XRL A,#0FFh ; exor sprawdzenie czy jakis klawisz wcisniety

JZ petla2 ;jesli nie wcisniety skacz do petli 2

MOV A,P7 ; przeniesienie do akumulatora wartosci portu P7

ANL A,R1 ;operacja and na akumulatorze i wartosci wiersza

MOV P1,A ;przeniesienie na diody akumulatora

petla2:

MOV A,R1 ;przeniesienie do akumulatora adresu wiersza

RR A ; przesuniecie bitowe

MOV R1,A ; przesylanie akumulatora do adresu wiersza

DJNZ R2,petla1 ;dekrementacja i jesli licznik wierszy jest rozny od 0 to skok

SJMP START ; powrot do poczatku

JMP $

END

LAB2

LJMP START

ORG 100H

START:

; Diody na porcie P3

ORL P3, #00111100B

CLR P3.2

LCALL DELAY

CLR P3.3

LCALL DELAY

CLR P3.4

LCALL DELAY

CLR P3.5

LCALL DELAY

SETB P3.2

LCALL DELAY

SETB P3.3

LCALL DELAY

SETB P3.4

LCALL DELAY

SETB P3.5

LCALL DELAY

NOP

NOP

NOP

; -------------------

; brzeczyk

MOV R0, #255

PETLA_B:

CLR P3.2

MOV R1, #50

DELAY_B:

DJNZ R1, DELAY_B

SETB P3.2

DJNZ R0, PETLA_B

NOP

NOP

NOP

; -------------------

; brzeczyk 1000kHZ

P6 EQU 0FAH

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

NOP

NOP

NOP

; -------------------

; Diody na porcie P1

MOV P1,#0xFF

LCALL DELAY

MOV R2, #255

PETLA_P1:

MOV A, P1

DEC A

MOV P1, A

LCALL DELAY

DJNZ R2, PETLA_P1

NOP

NOP

NOP

; -------------------

LJMP KONIEC

; opoznienie

DELAY:

MOV R0, #250

DELAY_1:

MOV R1, #255

DELAY_2:

DJNZ R1, DELAY_2

DJNZ R0, DELAY_1

RET

; ------------------

KONIEC:

END START

------------------------------------------------------------------------------------------------

LJMP START

ORG 100H

START:

MOV B, #10

PETLA:

MOV P1,#10101010B

MOV R1,#0AFH

TAMTAM: MOV R0, #0FFH

TUTU : DJNZ R0 , TUTU

DJNZ R1, TAMTAM

MOV P1,#01010101B

MOV R1,#0FFH

TAMTAM1: MOV R0, #0FFFFH

TUTU1 : DJNZ R0 , TUTU1

DJNZ R1, TAMTAM1

DJNZ B, PETLA

P6 EQU 0FAH

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

LCALL DELAY

LCALL DELAY

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

LCALL DELAY

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

ORL P6, #00010000B ; P6.4 = 1

LCALL DELAY

ANL P6, #11101111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

LCALL DELAY

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

ORL P6, #01000000B ; P6.4 = 1

LCALL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6.4 = 0

LCALL DELAY

LCALL DELAY

JMP START

NOP

NOP

NOP

LJMP KONIEC

DELAY:

MOV R0, #170

DELAY_1:

MOV R1, #255

DELAY_2:

DJNZ R1, DELAY_2

DJNZ R0, DELAY_1

RET

; ------------------

KONIEC:

END START


Wyszukiwarka

Podobne podstrony:
Podstawy Programowania Lab 1 dod
matrialy, PWR [w9], W9, 5 semestr, Podstawy elektrotechniki Lab, MATERIAŁY, podst ele lab - swistak,
PODSTAWY AUTOMATYKI lab 1
elektronika ćw 4- tyrystor i trika, Szkoła, Semestr 4, Podstawy elektroniki, Bart, Podstawy Elektron
Podstawy Automatyki Lab 10 CW3 Układy sekwencyjne elektroniczne
Podstawy Automatyki Lab 10 CW1 Układy przełączające oparte na elementach stykowych
Str. tytułowa, Automatyka i Robotyka, Semestr IV, Podstawy Elektroniki, lab
Podstawy Automatyki Lab 2010 CW1 Układy przełączając…
Podstawy-Automatyki-Lab-2010-CW1-Układy-przełączając…
Podstawy Automatyki Lab 2014 CW3 Badania regulatora dwupołożeniowego
sprawko ćw2, Szkoła, Semestr 4, Podstawy elektroniki, Bart, Podstawy Elektroniki LAB, Podstawy Elekt
Podstawy Programowania Lab 7
strona tytulowa elektronika, Szkoła, Semestr 4, Podstawy elektroniki, Bart, Podstawy Elektroniki LAB
Sprawozdanie nr I, PWR [w9], W9, 5 semestr, Podstawy elektrotechniki Lab, MATERIAŁY, podst ele lab -
ćw 26 - sprawko moje, Szkoła, Semestr 4, Podstawy elektroniki, Bart, Podstawy Elektroniki LAB, Podst
ćw. 23 - Podst. Elektroniki, Szkoła, Semestr 4, Podstawy elektroniki, Bart, Podstawy Elektroniki LAB

więcej podobnych podstron