Program na DSm-51

Tu piszemy wiadomość, jeżeli zadanie domowe sprawia kłopot
i szybko potrzebujemy pomocy w rozwiązaniu.
ODPOWIEDZ
elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Program na DSm-51

Post autor: elektronikopo » 08 lut 2008, 13:01

Umiec ktos pisać dobrze programy na DSmie

W polskiej wersji językowej: "Czy umie ktoś dobrze pisać programy na DSmie?"

Kod: Zaznacz cały

Ja 12:39:50
LJMP START
 ORG 100H
START:

 MOV TMOD,#00010001B
 MOV TH0,#76
 MOV TL0,#0
 SETB TR0
 MOV TH1,#76
 MOV TL1,#0
 SETB TR1
 MOV R0,80H
 MOV R1,82H
 LCALL LCD_CLR 
        CLR A 
        MOV	A,#'9'
	LCALL	WRITE_DATA
	MOV	A,#':'
	LCALL	WRITE_DATA
	MOV	A,#'5'
	LCALL	WRITE_DATA
            MOV	A,#'9'
 LCALL	WRITE_DATA



 

 MOV A,#9
 SUBB A,#1
 MOV R1,A



        LCALL LCD_CLR 
        CLR A 
        MOV	A,#'9'
	LCALL	WRITE_DATA
	MOV	A,#':'
	LCALL	WRITE_DATA
	MOV	A,#'5'
	LCALL	WRITE_DATA
 INC R0
 MOV DPTR,#TEXT
LOP:
 LCALL LCD_CLR 
        CLR A 
        MOV	A,#'9'
	LCALL	WRITE_DATA
	MOV	A,#':'
	LCALL	WRITE_DATA
	MOV	A,#'5'
	LCALL	WRITE_DATA
 CLR A
 MOVC A,@A+DPTR


        LCALL	WRITE_DATA
 INC DPTR
 MOV A,#20
TIME_N50:
 JNB TF0,$
 MOV TH0,#76
 CLR TF0
 DJNZ ACC,TIME_N50
 MOV A,R1

 JNZ LOP
STOP:
 SJMP STOP

TEXT:
 DB '8'

 DB '7'

 DB '6'

 DB '5'

 DB '4'

 DB '3'

 DB '2'

 DB '1'

 DB '0'

Napisałem program i nie wiem jak go dalej dokonczyc bo nic mi nie wychodzi
Program ma obliczać 10 minut ma zaczynać się od 9.59
Ma najpirw sie pojawic na wyswietlaczu LCD 9.59 nastepnie 9.58 9.57 9.56 9.55 9.54 9.53 9.52 9.51 9.50 9.49 .........9.39 .... 9.29 .....9.19 ...9.09 9.08 9.07 9.06 9.05 9.04 9.03 9.02 9.01 9.00 ...............8.00 ......7.00 ....6.00 .....5.00 .....4.00...... 3.00 ... 2.00 .....1.00 .... 0.00


______________________________________________________________
Kaleczenie języka polskiego skutkuje ostrzeżeniem, przykro mi, Natasza
Ostatnio zmieniony 08 lut 2008, 13:59 przez elektronikopo, łącznie zmieniany 1 raz.

Awatar użytkownika
PiotrekEl
Użytkownik
Posty: 251
Rejestracja: 02 mar 2007, 19:39
Lokalizacja: Znad Jezioraq

Post autor: PiotrekEl » 08 lut 2008, 15:19

Specem to ja nie jestem w tej dziedzinie ale pisałem jakiś czas temu. I powiem Ci co najbardziej zniechęca do sprawdzania programów. Brak komentarzy. Naprawdę się wtedy odechciewa. Już chyba ktoś Ci o tym pisał. Czemu przy pisaniu programu nie wstawiasz komentarzy? Wtedy chętniej ktoś sprawdzi.

elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Post autor: elektronikopo » 08 lut 2008, 15:42

Ja robiłem ten program w szkole nie miałem czasu pisac komentarzy nie zdarzyłem całego programu napisać zaraz postram sie napisac troche komentarzy do tego programu, bo nie wszystkie rozumiem.

Kod: Zaznacz cały

 LJMP START
 ORG 100H
START:

 MOV TMOD,#00010001B   ; Timer 0 liczy czas 
 MOV TH0,#76           ; Timer 0 na 70ms 
 MOV TL0,#0
 SETB TR0              : start Timera 0
 MOV TH1,#76           : Timer 1 liczy czas 70ms
 MOV TL1,#0
 SETB TR1              : start Timera 1           
 MOV R0,80H            ; kopiowanie zawartości komórki pamięci do rejestru 
 MOV R1,82H            ; kopiowanie zawartości komórki pamięci do rejestru 
 LCALL LCD_CLR         : wyświetlenie na wyświetlaczu LCD 9 : 59
        CLR A          ; porzez zerwoanie zawartości akumulatora
        MOV	A,#'9' : kopiowanie 9 do akumulatora 
	LCALL	WRITE_DATA : wyświetlenie zawartości A na wyświetlaczu LCD 
	MOV	A,#':'       kopiowanie : do akumulatora
	LCALL	WRITE_DATA  : wyświetlenie zawartości A na wyświetlaczu LCD
	MOV	A,#'5'       kopiowanie 5 do akumulatora
	LCALL	WRITE_DATA   : wyświetlenie zawartości A na wyświetlaczu LCD
            MOV	A,#'9'      kopiowanie 9 do akumulatora 
 LCALL	WRITE_DATA         : zapisanie na wyświetlaczu LCD napisu wyświetlonego wcześniej 



 

 MOV A,#9     wpisanie stałej 9 do akumulatora 
 SUBB A,#1    zmniejszenie zawartości A o 1 
 MOV R1,A     kopiowanie zawartości A do rejestru R1



        LCALL LCD_CLR  : wyświetlenie na wyświetlaczu LCD 9 : 5
        CLR A          ; porzez zerwoanie zawartości akumulatora
        MOV	A,#'9'  : kopiowanie 9 do akumulatora
	LCALL	WRITE_DATA : zapisanie na wyświetlaczu LCD 
	MOV	A,#':'       : kopiowanie : do akumulatora
	LCALL	WRITE_DATA    zapisanie na wyświetlaczu LCD 
	MOV	A,#'5'       kopiowanie 5 do akumulatora
	LCALL	WRITE_DATA  zapisanie na wyświetlaczu LCD 
 INC R0          zwiększ o jeden zawartość rejestru R0
 MOV DPTR,#TEXT    skopiowanie tekstu z LCD do DPTR
LOP:
 LCALL LCD_CLR   
        CLR A 
        MOV	A,#'9' : kopiowanie 9 do akumulatora 
	LCALL	WRITE_DATA  zapisanie na wyświetlaczu
	MOV	A,#':'     : kopiowanie : do akumulatora 
	LCALL	WRITE_DATA    zapisanie na wyświetlaczu
	MOV	A,#'5'      : kopiowanie 5 do akumulatora 
	LCALL	WRITE_DATA  zapisanie na wyświetlaczu 
 CLR A     zeruj zawartość akumulatora 
 MOVC A,@A+DPTR  kopiuj pamięc programu sumy akumulatora i dptr do akumulatora 


        LCALL	WRITE_DATA  zapisanie wszytskich do tej pory znakwo na LCD 
 INC DPTR   zwieksz o jeden DPTR
 MOV A,#20  kopiuj stała 20 do akumulatora      
TIME_N50:
 JNB TF0,$   skocz z końca do Timera 0
 MOV TH0,#76  timera liczy czas 70ms
 CLR TF0      zeruj timer TF0
 DJNZ ACC,TIME_N50 skocz do etykiety TIME_N50 jeżeli zawartość A nierówna sie 0
 MOV A,R1  kopiuj zawartosc R1 do akumulatora 

 JNZ LOP  skocz do komendy LOP 
STOP:
 SJMP STOP zakończ program 

TEXT:
 DB '8' definuj bajty

 DB '7'

 DB '6'

 DB '5'

 DB '4'

 DB '3'

 DB '2'

 DB '1'

 DB '0'

ZbeeGin

Post autor: ZbeeGin » 08 lut 2008, 16:37

Skoro napisałeś komentarze do programu, to czego jeszcze kolega nie rozumie?

Trzeba ruszyć głową a nie czekać na gotowce! Forum to nie miejsce dla osób którzy nic nie chcą od siebie dać, a chcą uzyskać wszystko - podstawową rzeczą jest tutaj wymiana doświadczeń.

elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Post autor: elektronikopo » 08 lut 2008, 18:29

Ja jak w szkole robiłem to na wyświetlaczu LCD zmieniały mi się jednostki sekund od 9 do 0.A jak zrobić żeby zmieniały mi się dziesiątki sekund i minuty.Sposób zmiany jest analogiczny tylko co trzeba zrobić żeby zmieniały się minuty i dziesiatki sekund.

Awatar użytkownika
PiotrekEl
Użytkownik
Posty: 251
Rejestracja: 02 mar 2007, 19:39
Lokalizacja: Znad Jezioraq

Post autor: PiotrekEl » 08 lut 2008, 19:26

A to musi być odliczanie za pomocą timera? Kiedyś jak pisałem to korzystałem z takiej procedury czekania sekundy:

Kod: Zaznacz cały

WAITSEK:
      push    Acc
czek1:mov     A,bsw
      jb      Acc.0,czek1
czek2:mov     A,bsw
      jnb     Acc.0,czek2
      pop     Acc
      ret
ale nie wiem czy to się nadaje. Mi z kwarcem 11.059MHz odliczał dobrze.
Bo jak może być taki sposób to chyba mam pomysł jak to prosciej zrobić.

elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Post autor: elektronikopo » 08 lut 2008, 20:03

Aha Chyba twoja procedura sie nie nada , bo na lekcji jeszcze nie miałem operacji na stosie rozkazy PUSH i POP . Potrzebuje procedure dotyczącą Timerów . Wiem ,że coś tam trzeba zrobić z komórkami pamięci.

Awatar użytkownika
PiotrekEl
Użytkownik
Posty: 251
Rejestracja: 02 mar 2007, 19:39
Lokalizacja: Znad Jezioraq

Post autor: PiotrekEl » 08 lut 2008, 22:23

Szkoda. Chciałbym pomóc ale krótko się uczyłem asemblera i nie bardzo umiem Ci pomóc. Jakby co to w załączniku masz program z tym co wymyśliłem. To jest tak ogólnie napisane. A z tego Twojego programu nie za bardzo umiem dojść co jest grane.
Nie znam się za bardzo na asemblerze.
Pozdrawiam.
Załączniki
odliczanie.rar
(702 Bajtów) Pobrany 611 razy

elektronikopo
Użytkownik
Posty: 182
Rejestracja: 16 gru 2007, 22:28
Lokalizacja: Poznań

Post autor: elektronikopo » 08 lut 2008, 22:43

Postanowiłem odnowa pisać ten program

Kod: Zaznacz cały

LJMP START 
 ORG 100H 
START: 

 MOV TMOD,#00010001B    Timer 0 liczy czas 
 MOV TH0,#76            Timer 0 na 70ms 
 MOV TL0,#0 
 SETB TR0              start Timera 0 
 MOV TH1,#76           Timer 1 liczy czas 70ms 
 MOV TL1,#0 
 SETB TR1               start Timera 1            
 MOV R0,80H             kopiowanie zawartości komórki pamięci do rejestru 
 MOV R1,82H             kopiowanie zawartości komórki pamięci do rejestru 
 LCALL LCD_CLR          wyświetlenie na wyświetlaczu LCD 9 : 59 
        CLR A          porzez zerwoanie zawartości akumulatora 
        MOV    A,#'9'  kopiowanie 9 do akumulatora 
    LCALL    WRITE_DATA  wyświetlenie zawartości A na wyświetlaczu LCD 
    MOV    A,#':'       kopiowanie  do akumulatora 
    LCALL    WRITE_DATA   wyświetlenie zawartości A na wyświetlaczu LCD 
    MOV    A,#'5'       kopiowanie 5 do akumulatora 
    LCALL    WRITE_DATA    wyświetlenie zawartości A na wyświetlaczu LCD 
            MOV    A,#'9'      kopiowanie 9 do akumulatora 
 LCALL    WRITE_DATA          zapisanie na wyświetlaczu LCD napisu wyświetlonego wcześniej 



  

 MOV A,#9     wpisanie stałej 9 do akumulatora 
 DEC  A   zmniejszenie zawartości A o 1 
 MOV R1,A     kopiowanie zawartości A do rejestru R1
otworzyłem go w programie symulującym Jagoda i przy Timerze 0 wyskauje mi bład może ktos mi poprawić bład bo ja nie moge go znaleźć

[ Dodano: 2008-02-13, 22:17 ]
Mam program , który odlicza czas 10 minut tyle sekundy zmieniają się nie co sekunde tylko co dłuższy czas co zmienić w programie żeby sekundy zmieniały się co sekunde

Kod: Zaznacz cały

LJMP START
 ORG 100H

START:

mov	r4, #9
mov	r3, #59

 MOV TMOD,#00010001B   
 MOV TH0,#76          
 MOV TL0,#0
 SETB TR0              
 MOV TH1,#76         
 MOV TL1,#0
 SETB TR1                  
 MOV R0,80H           
 MOV R1,82H            

 MOV A,#9   
 SUBB A,#1    
 MOV R1,A   
 INC R0         

LOP:
 LCALL LCD_CLR   

	MOV	A, r4		;wyswietlenie minut
	LCALL	BIN_BCD
	LCALL	WRITE_HEX

	MOV	A, #':'		;wyswietlenie dwukropka
	LCALL	WRITE_DATA

	MOV	A, r3		;wyswietlenie sekund
	LCALL	BIN_BCD
	LCALL	WRITE_HEX

	DEC	r3		;Dekrementacja
	CJNE	r3, #255, TIME_N50
	mov	r3, #59
	DEC	r4
	CJNE	r4, #255, TIME_N50
	LJMP	STOP

;        LCALL    WRITE_DATA  
; INC DPTR   
; MOV A,#20 

TIME_N50:


 JNB TF0,$  
 MOV TH0,#76
 CLR TF0      
 DJNZ ACC,TIME_N50 
 MOV A,R1  
 JNZ LOP  
STOP:
	lcall	wait_key
	ljmp	start
 SJMP STOP 

BIN_BCD:			;konwersja bin -> bcd
	MOV	B, #10
	DIV	AB
	SWAP	A
	ADD	A, B
	RET

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Post autor: gaweł » 24 lut 2008, 19:51

Mam nadzieję, że elektronikopo zaliczył już swój program, bo nie jest moim celem dostarczenie gotowca. Z drugiej strony w moim rozwiązaniu treść zadania jest trochę zmieniona. Przykład rozwiązania: https://elportal.pl/index.php?module=Co ... y&ceid=404

ODPOWIEDZ