8051 Tabor

Zestaw 1

Zadanie 1

CSEG AT 0

JMP start

CSEG At 100h

start:

MOV R6,#22h

MOV R7,#0DBh

;Load the second value into R4 and R5

MOV R4,#1Ah

MOV R5,#0F9h

;Call the 16-bit subtraction routine

LCALL SUBB16_16

SUBB16_16:

;Step 1 of the process

MOV A,R7 ;Move the low-byte into the accumulator

CLR C ;Always clear carry before first subtraction

SUBB A,R5 ;Subtract the second low-byte from the accumulator

MOV R3,A ;Move the answer to the low-byte of the result

;Step 2 of the process

MOV A,R6 ;Move the high-byte into the accumulator

SUBB A,R4 ;Subtract the second high-byte from the accumulator

MOV R2,A ;Move the answer to the low-byte of the result

;Return - answer now resides in R2, and R3.

RET

END

Zadanie 2

CSEG AT 0

JMP start

CSEG AT 100h

start:

mov r0,#5

MOV DPTR,#etykieta

MOV R1,#20h

loop:

MOVC A,@A+DPTR

MOV @R1,A

MOV a,#0

INC R1

INC DPTR

DJNZ r0,loop

CSEG AT 1000h

etykieta: db 11,21,4,18,8

END

Zadanie 3

Generator liczb pseudolosowych całkowitych w przedziale od 0 do 3

Dane EQU 20h

DaneEnd EQU 2Ah

Maska EQU 00000011B

Wskaznik1 EQU 1Eh

Wskaznik2 EQU 1Fh

CSEG AT 0

JMP start

CSEG AT 100h

start:

LCALL SRAND

losuj:

LCALL RAND

SJMP losuj

SRAND:

PUSH ACC

MOV Wskaznik1,#Dane

MOV A,Wskaznik1

ADD A,#3

MOV Wskaznik2,A

MOV A,#0

MOV R0,#10

MOV DPTR,#Fibonacci

MOV R1,#Dane

loop:

MOVC A,@A+DPTR

MOV @R1,A

MOV A,#0

INC R1

INC DPTR

DJNZ R0,loop

POP ACC

RET

RAND:

MOV R0,Wskaznik1

MOV R1,Wskaznik2

MOV A,@R0

MOV R2,A

MOV A,@R1

ADD A,R2

ANL A,#Maska

MOV R0,Wskaznik1

MOV @R0,A

PUSH ACC

MOV A,Wskaznik1

INC A

MOV Wskaznik1, A

CLR C

SUBB A,#DaneEnd

JNZ lab1

MOV Wskaznik1,#Dane

lab1:

MOV A,Wskaznik2

INC A

MOV Wskaznik2, A

CLR C

SUBB A,#DaneEnd

JNZ lab2

MOV Wskaznik2,#Dane

lab2:

POP ACC

RET

CSEG AT 1000h

Fibonacci: db 4,5,3,3,3,4,6,2,6,5

END

Zestaw 2

Zadanie 2

PROG SEGMENT CODE

LED BIT P2.0

SWITCH BIT P3.0

CSEG AT 0

JMP start

RSEG PROG

start:

CLR LED

loop:

JB SWITCH, loop

CPL LED

ACALL CZEKAJ ;opóźnienie konieczne, aby przełącznik działał stabilnie

SJMP loop

CZEKAJ:

MOV R0,#255

ODLICZAJ2:

MOV R1,#255

ODLICZAJ1:

NOP

NOP

DJNZ R1,ODLICZAJ1

DJNZ R0,ODLICZAJ2

RET

END

Zadanie 3

CSEG AT 0

JMP 100h

CSEG AT 100h

start:

MOV A,P3

loop:

CJNE A,P3,led

SJMP loop

led:

MOV R0,P3

MOV A,P2

XRL A,R0

CPL A

MOV P2,A

sjmp start

END

Zadanie 4

Listing 1 - zwiększanie/zmiejszanie czasu wyświetlania mrugających diod

Dane EQU 20h

DaneEnd EQU 2Ah

Maska EQU 00000011B

Wskaznik1 EQU 1Eh

Wskaznik2 EQU 1Fh

Step EQU 20

CSEG AT 0

JMP start

CSEG AT 100h

start:

LCALL SRAND

MOV R6,#55

MOV R7,#55

losuj:

MOV R5,#0

LCALL RAND

CJNE A,#0, next1

CLR P2.0

LJMP wait

next1:

CJNE A,#1,next2

CLR P2.1

LJMP wait

next2:

CJNE A,#2,next3

CLR P2.2

LJMP wait

next3:

CLR P2.3

wait:

LCALL CZEKAJ

MOV P2,#0FFh

LCALL CZEKAJ

CJNE R5,#1,test1

MOV A,R6

ADD A,#Step

MOV R6,A

MOV A,R7

ADD A,#Step

MOV R7,A

LJMP loop1

test1:

CJNE R5,#2,losuj

CLR C

MOV A,R6

SUBB A,#Step

MOV R6,A

CLR C

MOV A,R7

SUBB A,#Step

MOV R7,A

loop1:

LCALL SMALLLOOP

SJMP losuj

SRAND:

PUSH ACC

MOV Wskaznik1,#Dane

MOV A,Wskaznik1

ADD A,#3

MOV Wskaznik2,A

MOV A,#0

MOV R0,#10

MOV DPTR,#Fibonacci

MOV R1,#Dane

loop:

MOVC A,@A+DPTR

MOV @R1,A

MOV A,#0

INC R1

INC DPTR

DJNZ R0,loop

POP ACC

RET

RAND:

MOV R0,Wskaznik1

MOV R1,Wskaznik2

MOV A,@R0

MOV R2,A

MOV A,@R1

ADD A,R2

ANL A,#Maska

MOV R0,Wskaznik1

MOV @R0,A

PUSH ACC

MOV A,Wskaznik1

INC A

MOV Wskaznik1, A

CLR C

SUBB A,#DaneEnd

JNZ lab1

MOV Wskaznik1,#Dane

lab1:

MOV A,Wskaznik2

INC A

MOV Wskaznik2, A

CLR C

SUBB A,#DaneEnd

JNZ lab2

MOV Wskaznik2,#Dane

lab2:

POP ACC

RET

CZEKAJ:

MOV R0,07h

ODLICZAJ3:

MOV R1,06h

ODLICZAJ4:

JB P3.7, dalej1

MOV R5,#1

dalej1: JB P3.6, dalej2

MOV R5,#2

dalej2: NOP

NOP

DJNZ R1,ODLICZAJ4

DJNZ R0,ODLICZAJ3

RET

SMALLLOOP:

MOV R0,#255

ODLICZAJ1:

MOV R1,#255

ODLICZAJ2:

NOP

NOP

DJNZ R1,ODLICZAJ2

DJNZ R0,ODLICZAJ1

RET

CSEG AT 1000h

Fibonacci: db 4,5,3,3,3,4,6,2,6,5

END

Listing 2 Każde nieudane MaxHit prób zwiększa czas o STEP

Dane EQU 20h

DaneEnd EQU 2Ah

Maska EQU 00000011B

Wskaznik1 EQU 1Eh

Wskaznik2 EQU 1Fh

MaxHit EQU 5

Step EQU 50

CSEG AT 0

JMP start

CSEG AT 100h

start:

LCALL SRAND

MOV R5,#0

MOV R6,#100

MOV R7,#100

losuj:

LCALL RAND

CJNE A,#0, next1

CLR P2.0

LJMP wait

next1:

CJNE A,#1,next2

CLR P2.1

LJMP wait

next2:

CJNE A,#2,next3

CLR P2.2

LJMP wait

next3:

CLR P2.3

wait:

MOV R3,#4

LCALL CZEKAJ_NA_KLAWISZ

CJNE A,03h,KONTYNUUJ

SJMP KONIEC ;nacisnieto klawiszodpowiadajacy diodzie

KONTYNUUJ:

MOV P2,#0FFh ;gasze diode

LCALL CZEKAJ

CJNE R3,#4,KONTYNUUJ1 ;sprawdzam, czy nacisnieto jakis klawisz gdy dioda byla zapalona

SJMP losuj ;jesli nie to losowana nowa dioda

KONTYNUUJ1: ;nacisnieto jakis klawisz

INC R5

LCALL CZEKAJ

CJNE R5,#MaxHit,losuj

MOV R5,#0

MOV A,R6

ADD A,#STEP

MOV R6,A

MOV A,R7

ADD A,#STEP

MOV R7,A

SJMP losuj

KONIEC:

MOV P2,#0AAh

ACALL CZEKAJ

MOV P2,#055h

ACALL CZEKAJ

SJMP $

SRAND:

PUSH ACC

MOV Wskaznik1,#Dane

MOV A,Wskaznik1

ADD A,#3

MOV Wskaznik2,A

MOV A,#0

MOV R0,#10

MOV DPTR,#Fibonacci

MOV R1,#Dane

loop:

MOVC A,@A+DPTR

MOV @R1,A

MOV A,#0

INC R1

INC DPTR

DJNZ R0,loop

POP ACC

RET

RAND:

MOV R0,Wskaznik1

MOV R1,Wskaznik2

MOV A,@R0

MOV R2,A

MOV A,@R1

ADD A,R2

ANL A,#Maska

MOV R0,Wskaznik1

MOV @R0,A

PUSH ACC

MOV A,Wskaznik1

INC A

MOV Wskaznik1, A

CLR C

SUBB A,#DaneEnd

JNZ lab1

MOV Wskaznik1,#Dane

lab1:

MOV A,Wskaznik2

INC A

MOV Wskaznik2, A

CLR C

SUBB A,#DaneEnd

JNZ lab2

MOV Wskaznik2,#Dane

lab2:

POP ACC

RET

CZEKAJ:

MOV R0,#255

ODLICZAJ2:

MOV R1,#255

ODLICZAJ1:

NOP

NOP

DJNZ R1,ODLICZAJ1

DJNZ R0,ODLICZAJ2

RET

CZEKAJ_NA_KLAWISZ:

MOV R0,07h

ODLICZAJ3:

MOV R1,06h

ODLICZAJ4:

JB P3.0, dalej1

MOV R3,#0

dalej1:

JB P3.1, dalej2

MOV R3,#1

dalej2:

JB P3.2, dalej3

MOV R3,#2

dalej3:

JB P3.3, dalej4

MOV R3,#3

dalej4:

NOP

NOP

DJNZ R1,ODLICZAJ4

DJNZ R0,ODLICZAJ3

RET

CSEG AT 1000h

Fibonacci: db 4,5,3,3,3,4,6,2,6,5

END

Zestaw 3

Zadanie 1

LED EQU P2.6

CSEG AT 00h

LJMP Main

CSEG AT 30h

Main:

CLR LED

MOV TH0,#0

MOV TL0,#0

MOV TMOD,#1

SETB TR0

loop:

JNB TF0,$

CPL LED

CLR TF0

AJMP loop

END

Zadanie 2

SWITCH EQU P3.0

CSEG AT 00h

LJMP Main

CSEG AT 30h

Main:

MOV TH0,#76

MOV TL0,#01

MOV TMOD,#1

MOV R0,#0

MOV A,#0FEh

MOV P2,A

JB SWITCH,$ ;czekam na wcisniecie klawisza

SETB TR0

loop1:

JNB TF0,loop2 ;Jeżeli TF0 nie jest ustawione to nie ma przepełnienia, przebieg jałowy

MOV TH0,#76

MOV TL0,#01

CLR TF0

INC R0

CJNE R0,#20,loop2

MOV R0,#0

RL A

MOV P2,A

loop2:

JNB SWITCH,loop1

CLR TR0

AJMP Main

END

Zadanie 3

SWITCH EQU P3.4 ;wejscie T0

CSEG AT 00h

LJMP Main

CSEG AT 30h

Main:

MOV TMOD,#00010101B ;T1 - timer, T0 - licznik, oba 16-bitowe

JB SWITCH,$

MOV A,#20

MOV TH1,#76

MOV TL1,#01

SETB TR1 ;startujemy timer 0

SETB TR0

loop:

JNB TF1,$

MOV TH1,#76

MOV TL1,#01

CLR TF1

DJNZ ACC,loop

CLR TR1

;MOV A,TL0

; CJNE A,#1,next

; CLR P2.0

; AJMP koniec

;next:

; CJNE A,#2,next1

; CLR P2.1

; AJMP koniec

;next1:

; CJNE A,#3,next2

; CLR P2.2

; AJMP koniec

;next2:

; CJNE A,#4,koniec

; CLR P2.3

; AJMP koniec

;koniec:

MOV A,#FFh

MOV R0,TL0

CJNE R0,#0,next

AJMP koniec

next:

MOV R4,TL0

MOV A,#0FEh

roll:

DEC R4

CJNE R4,#0,next1

AJMP koniec

next1:

RL A

AJMP roll

koniec:

MOV P2,A

SJMP $

END

Zestaw 4

Zestaw 5

Zestaw 6

Zadanie 1

cseg at 0

jmp 100h

cseg at 100h

start:

JMP display0

MOV R0,#0

loop:

JB P3.0, $ ;czekam na nacisniecie klawisza

CALL CZEKAJ

INC R0

CJNE R0,#1,next2

JMP display1

next2:

CJNE R0,#2,next3

JMP display2

next3:

CJNE R0,#3,next4

JMP display3

next4:

CJNE R0,#4,next5

JMP display4

next5:

CJNE R0,#5,next6

JMP display5

next6:

CJNE R0,#6,next7

JMP display6

next7:

CJNE R0,#7,next8

JMP display7

next8:

CJNE R0,#8,next9

JMP display8

next9:

CJNE R0,#9,next10

JMP display9

next10:

MOV R0,#0

JMP display0

JMP loop

display0:

MOV P1,#0

SETB P1.0

MOV P2,#00111111B

JMP loop

display1:

MOV P1,#0

SETB P1.0

MOV P2,#00000110B

JMP loop

display2:

MOV P1,#0

SETB P1.0

MOV P2,#01011011B

JMP loop

display3:

MOV P1,#0

SETB P1.0

MOV P2,#01001111B

JMP loop

display4:

MOV P1,#0

SETB P1.0

MOV P2,#01100110B

JMP loop

display5:

MOV P1,#0

SETB P1.0

MOV P2,#01101101B

JMP loop

display6:

MOV P1,#0

SETB P1.0

MOV P2,#01111101B

JMP loop

display7:

MOV P1,#0

SETB P1.0

MOV P2,#00000111B

JMP loop

display8:

MOV P1,#0

SETB P1.0

MOV P2,#01111111B

JMP loop

display9:

MOV P1,#0

SETB P1.0

MOV P2,#01101111B

JMP loop

CZEKAJ:

MOV R2,#255

ODLICZAJ2:

MOV R1,#255

ODLICZAJ1:

NOP

NOP

DJNZ R1,ODLICZAJ1

DJNZ R2,ODLICZAJ2

RET

end


Wyszukiwarka

Podobne podstrony:
Konfiguracja pamięci mikrokontrolera 8051 dla programów napisanych w języku C
tabor podgrz, GASTRONOMIA
8051 Tutorial uart
asembler 8051 opis rozkazow
Mikrokomputer edukacyjny z 8051 cz 2
8051 wyswietlacz 7seg
8051 id 47295 Nieznany
Konspekt dla kl V GÓRA TABOR
8051 przerwania
8051
2013 OTZ OT tabor
PiguÅ‚a Tabor winczorek wstep do prawoznawstawa , © „Piguła” by Rafał Lesiecki
PiguÅ‚a Tabor winczorek wstep do prawoznawstawa , © „Piguła” by Rafał Lesiecki
Lista rozkazow 8051
Mikrokontroler 8051
Transport drogowy tabor
Podstawy Programowania Mikrokontrolera 8051

więcej podobnych podstron