Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

generator przebiegu prostokątnego

MarBor_ja
-
-
Posty:1
Rejestracja:9 cze 2010, o 15:51
Lokalizacja:Bydgoszcz
generator przebiegu prostokątnego

Postautor: MarBor_ja » 9 cze 2010, o 16:00

Ok odrazu piszę, że zagadnienia programowania w assemblerze to dla mnie czarna magia.

Zadanie brzmi tak:

Kod: Zaznacz cały

Przestrajany generator przebiegu prostokątnego Zadania: zaprojektowanie układu, który posiada 3 mikrostyki, pierwszy – do skokowego zwiększania częstotliwości, drugi – do skokowego zmniejszania częstotliwości, trzeci – do zmiany zakresu (np. x10), określić zakres generowanych częstotliwości, wykonanie układu z mikrokontrolerem 89C51/52 lub 89C1051/2051 na uniwersalnej płytce drukowanej z wyprowadzonymi pinami.
Układ mam przygotowany i pod tym względem jest wszystko posprawdzane i działające. Kod sam napisałem taki, proszę się nie śmiać ze mnie bo ja sam wiem, że to nawet dobrze nie wygląda, a co dopiero mówić o działaniu. Może jakieś rady, wskazówki jak się do tego zabrać. Z góry dziękuję:

Kod: Zaznacz cały

;poczatek wykonywania programu ORG 0 ;skocz do glownego prgramu LJMP START ;obsługa przerwania od int0 ORG 0003H LJMP INTEX0 ;obsluga przerwania od int1 ORG 0013H LJMP INTEX1 START: CZAS_HIGH EQU 4CH ; starszy bajt ilości impulsów CZAS_LOW EQU 0 ; młodszy bajt ilości impulsów MOV P1,#0 ; zeruj wszystkie linie portu P2 ; Programowanie trybu pracy timera 0 MOV TMOD,#00000001B ; timer 0 -> tryb 1, timer 1 -> nieużywany, tryb 0 ; Programowanie ilości impulsów MOV R1, #CZAS_LOW MOV R2, #CZAS_HIGH MOV TH0,R2 MOV TL0,R1 SETB TR0 ; uruchomienie licznika PETLA: JNB TF0,$ ; czekaj na zmianę flagi na '1' CLR TF0 ; zeruj flagę przepełnia CPL P2.0 ; neguj bit linii P2.0 ; Ponowne programowanie ilości impulsów MOV TH0,R2 MOV TL0,R1 ;inicjacja przerwania SETB EX0 ;zezwolenie na przerwanie int0 SETB EX1 ;zezwolenie na przerwanie int1 SETB EA ;globalne zezwolenie na przerwania SJMP $ SJMP PETLA ;****************************************************** INTEX0: MOV A,R2 MOV R2,#4CH ADD A,R2 MOV R2,A RETI INTEX1: MOV A,R2 MOV R2,#4CH SUBB A,R2 MOV R2,A RETI END

Awatar użytkownika
Darlington
-
-
Posty:574
Rejestracja:12 lis 2007, o 18:18
Lokalizacja:stąd!

Postautor: Darlington » 10 cze 2010, o 11:00

SETB EX0 ;zezwolenie na przerwanie int0
SETB EX1 ;zezwolenie na przerwanie int1
SETB EA ;globalne zezwolenie na przerwania
Zamiast tego lepiej dać

Kod: Zaznacz cały

MOV IE,#[TU WPISZ STOSOWNE DANE BITOWO/HEXADECYMALNE/DECYMALNIE]

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 10 cze 2010, o 12:39

Darlington, To zależy. Pierwszy zapis jest na pewno czytelniejszy, ale wykonywać się będzie dłużej. Twój może za to niechcący wyczyścić coś, co jest już ustawione. Najbezpieczniej było by pewnie

Kod: Zaznacz cały

ORL IE, #(1<<EX0 | 1<<EX1 | 1<<EA)
a przy tym dość czytelnie.

Wróć do „8051”

Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 6 gości