logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać program na DSM-51 do wyświetlania czasu na LCD?

elektronikopo 08 Lut 2008 13:01 2613 4
REKLAMA
  • #1 4783098
    elektronikopo
    Poziom 20  
    Posty: 494
    Pomógł: 1
    Ocena: 14
    Umie ktoś pisać dobrze programy na DSmie

    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

    Przeniosłem z Programowanie Ogólne - krzychoocpp
  • REKLAMA
  • #2 4785225
    magik128
    Poziom 22  
    Posty: 654
    Pomógł: 20
    Ocena: 27
    Ściągnij program "jagoda" i sprawdź czy działa. Jeżeli nie to wprowadzaj poprawki aż do skutku
  • REKLAMA
  • #3 4806711
    elektronikopo
    Poziom 20  
    Posty: 494
    Pomógł: 1
    Ocena: 14
    Napisałem już ten program odliczający czas 10 minut . Tylko nie odlicza on sekund co sekunde tylko co wiekszy czas niż sekunda. Wie ktoś co zmienić w programie żeby odliczał 10 minut prawidłowo. Jeszcze mam pytanie wie ktoś jak zlikwidować ten kursor? Poniżej zamieszczam program , który napisałem:

    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 
    
  • REKLAMA
  • Pomocny post
    #4 4807754
    uzdzik
    Poziom 17  
    Posty: 275
    Pomógł: 13
    Ocena: 15
    ja metodą prób i błędów zrobiłem coś takiego:
    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,#2 
    
    TIME_N50: 
    MOV	A,#20
    TIME_2:
    JNB TF0,$  
    MOV TH0,#76 
    CLR TF0      
    DJNZ ACC,TIME_2
    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 


    i zmieniając zawartość A w etykiecie TIME_N50: zmieniamy czas
  • #5 4808459
    elektronikopo
    Poziom 20  
    Posty: 494
    Pomógł: 1
    Ocena: 14
    Jak stała trzeba wpisać do akumulatora żeby sekundy zmieniały się co sekunde a nie co inny czas niż jedna sekunda. Moim zdaniem 20

    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,#2 
    
    TIME_N50: 
    MOV	A,#2
    TIME_2:
    JNB TF0,$  
    MOV TH0,#76 
    CLR TF0      
    DJNZ ACC,TIME_2
    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



    Wie ktoś jaką liczbe trzeba wpisać do rozkazu MOV TMOD,#00010001B żeby program działał prawidłowo?
REKLAMA