 |
www.polcz.fora.pl pcz
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
gosel
Dołączył: 28 Paź 2008
Posty: 87
Przeczytał: 0 tematów
Pomógł: 1 raz Ostrzeżeń: 0/5
|
Wysłany: Sob 16:39, 07 Lis 2009 Temat postu: Laborki 1 |
|
|
Kod: |
NAME PROGRAM
$INCLUDE (REG517.INC) ; dolaczenie pliku definicji rejestrow procesora 80C537
PROGRAM SEGMENT CODE ;definicja segmentu zawierającego kod programu
BITS SEGMENT BIT ;definicja segmentu danych pamięci zewnętrznej RAM
X_VARIABLES SEGMENT XDATA ;definicja segmentu danych pamięci zewnętrznej RAM
I_VARIABLES SEGMENT IDATA ;definicja segmentu danych pamięci wewnętrznej RAM (zakres 0..0ffh)
VARIABLES SEGMENT DATA ;definicja segmentu danych pamięci wewnętrznej RAM (zakres 0..07fh - dolna połówka)
org 0x8000 ; = równoważne z dyrektywą "CSEG AT 0x0000"
VectorTableAddr: JMP START ;skok na poczatek programu
RSEG PROGRAM ;informacja dla linkera - następne dane to kod programu
;(Z tego miejsca uruchomi sie program)
START:
mov SP,#DNO_STOSU-1 ;ustawienie wskaźnika stosu na początek zarezerwowanego obszaru
;resetowanie
mov R0, #0
mov A, R0
mov DPTR, #tablica
movc A, @A+DPTR
; Petla glowna programu
PETLA:
mov A, R0
mov DPTR, #tablica
movc A, @A+DPTR
mov P1, A
JNB P5.0, KLAWISZ_PIERWSZY
JNB P5.1, KLAWISZ_DRUGI
JNB P5.2, KLAWISZ_TRZECI
JMP PETLA
KLAWISZ_PIERWSZY:
MOV A, R0
CLR C
SUBB A, #1
JC KLAWISZ_CIAGLE_WCISNIETY
DEC R0
LCALL czekaj_200ms
JMP KLAWISZ_CIAGLE_WCISNIETY
KLAWISZ_DRUGI:
MOV R0, #0
LCALL czekaj_200ms
JMP KLAWISZ_CIAGLE_WCISNIETY
KLAWISZ_TRZECI:
MOV A, R0
CLR C
SUBB A, #15
JNC KLAWISZ_CIAGLE_WCISNIETY
INC R0
LCALL czekaj_200ms
KLAWISZ_CIAGLE_WCISNIETY:
JNB P5.0, KLAWISZ_CIAGLE_WCISNIETY
JNB P5.1, KLAWISZ_CIAGLE_WCISNIETY
JNB P5.2, KLAWISZ_CIAGLE_WCISNIETY
;tutaj wiemy, że klawisz nie jest już wciśnięty
;zawartość zmiennej została zwiększona więc można powrócić do programu głównego
JMP PETLA
;;;;;;;;; funkcja czekaj
czekaj_200ms:
PUSH ACC ;zachowanie zawartości akumulatora na stosie
MOV A,#200 ;dwieście razy wywoła procedurę czekaj_1ms
petla_200ms: LCALL czekaj_1ms
DJNZ ACC,petla_200ms
POP ACC ;odtworzenie zawartości akumulatora ze stosu
RET ;koniec procedury czekaj_200ms
czekaj_1ms:
PUSH ACC ;zachowanie zawartości akumulatora na stosie
MOV A,#250 ;250 powtórzeń po ok. 4 mikrosekundy każde
petla_1ms: NOP
NOP
NOP
DJNZ ACC,petla_1ms
POP ACC ;odtworzenie zawartości akumulatora ze stosu
RET ;koniec procedury czekaj_1ms
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@ definicje stałych i zmiennych @@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; mov P1, #00000000b
; mov P1, #00000001b ;gora
; mov P1, #00000010b ;PRAWA GORA
; mov P1, #10000000b ;prawy dol
; mov P1, #00001000b ;dol
; mov P1, #00010000b ;lewy dol
; mov P1, #01000000b ;lewa gora
; mov P1, #00000100b ;kropka
; mov P1, #00100000b ;srodek
tablica:
db 11011011b ;0
db 10000010b ;1
db 00111011b ;2
db 10101011b ;3
db 11100010b ;4
db 11101001b ;5
db 11111001b ;6
db 10000011b ;7
db 11111011b ;8
db 11101011b ;9
db 11110011b ;a
db 11111000b ;b
db 01011001b ;c
db 10111010b ;d
db 01111001b ;e
db 01110001b ;f
;stałe w pamieci kodu - nie można ich zmienić
;odczyt: do DPTR należy wpisać adres zmiennej,
;do akumulatora ew. przesunięcie przesunięcie adresu
;a potem odczyt możliwy jest instrukcją MOVC
; np. mov DPTR,#stala1
; mov A,#0
; movc A,@A+dptr
napis1: DB 'Dzien dobry',00H
napis2: DB 'Wcisnij przycisk',00H
napis3: DB 'Przesun suwak ',00H
napis_w128: DB '>=128 ',00H
napis_m128: DB '< 128 ',00H
stala1: db 28
; zmienne w pamieci zewnętrznej RAM (XRAM)
; - te ciagi i zmienne można zmieniać (zapis/odczyt instrukcją MOVX A,@DPTR)
RSEG X_VARIABLES
ZMIENNA: DS 1
ciag1: DS 20 ;zarezerwowanie miejsca w pamiecie RAM na 20 bajtow
ciag2: DS 10 ;zarezerwowanie miejsca w pamiecie RAM na 10 bajtow
; zmienne w pamieci wewnętrznej RAM (IRAM)
; dostęp w trybie pośrednim (za pomoca rejestru R0 lub R1)
; np. MOV R1,#ZMIENNA2
; MOV @R1,A
RSEG I_VARIABLES
ZMIENNA2: DS 1
ZMIENNA3: DS 1
DNO_STOSU: DS 20h ;zarezerwowanie miejsca w pamiecie IRAM na STOS
; zmienne W DOLNEJ POŁÓWCE pamieci wewnętrznej RAM (IRAM: 0..7fh)
; dostęp w trybie BEZPOŚREDNIM lub pośrednim
; np. MOV A,#ZMIENNA4
;UWAGA - jest to najwygodniejszy sposób w assemblerze !!!
RSEG VARIABLES
ZMIENNA4: DS 1
ZMIENNA5: DS 1
;zmienne w obszarze BITOWO ADRESOWALNYM - bardzo wygodnew do uzywania jako flagi (stan 0 lub 1)
RSEG BITS
ZMIENNA_BITOWA: DBIT 1
END
|
Post został pochwalony 0 razy
Ostatnio zmieniony przez gosel dnia Sob 17:01, 07 Lis 2009, w całości zmieniany 1 raz
|
|
Powrót do góry |
|
 |
|
 |
Ajla
Dołączył: 23 Paź 2008
Posty: 356
Przeczytał: 0 tematów
Pomógł: 3 razy Ostrzeżeń: 0/5
|
Wysłany: Pon 12:01, 09 Lis 2009 Temat postu: |
|
|
Może ktoś napisać instrukcję mniej więcej jak się tworzyło te wszystkie pliki w tym oprogramowaniu kyle? bo to bylo troche pojebane i nie pamietam co i jak
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
gosel
Dołączył: 28 Paź 2008
Posty: 87
Przeczytał: 0 tematów
Pomógł: 1 raz Ostrzeżeń: 0/5
|
Wysłany: Pon 21:20, 09 Lis 2009 Temat postu: |
|
|
Kopiowaliśmy jakiś przykładowy program i usuwaliśmy zawartość pętli głównej programu
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
Tomek.P
Dołączył: 07 Sty 2009
Posty: 36
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany: Pon 20:20, 16 Lis 2009 Temat postu: |
|
|
a tem watchdog to gdzie sie wylancza ?? nie dziala mi to :/
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
|