Advertisement
Guest User

Untitled

a guest
Dec 6th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DB7 EQU P2.5
  2. DB6 EQU P2.4
  3. DB5 EQU P2.3
  4. DB4 EQU P2.2
  5. RS   EQU P2.0
  6. E    EQU P2.1
  7.         ORG 0h
  8.         LJMP USTAW
  9.         ORG 003H
  10.         LJMP Przerwanie
  11.         ORG 000BH                       ;przerwanie z układu czasowo licznikowego T0, układ zgłasza                                 
  12.         CLR TR0                         ;zatrzymanie licznika 0
  13.         CLR TF0                         ;wyczyszczenie flagi licznika T0
  14.         INC R6                          ;inkrementacja zawartości rejestru r1
  15.         CJNE R6, #1AH, Kontynuuj        ;przy wartości 1Ah, skok do Kontynuuj
  16.        
  17.         ACALL SEGMENT_DISPLAY
  18.         ACALL  LCD_DISPLAY                     
  19.         CJNE R0, #09H, Inkrementuj      ;jesli zawartość rejestru r0 nie osiągnęła wartości 09h, skok do etykiety INCR
  20.        
  21.         ;ACALL  LCD_DISPLAY                    
  22.         MOV R0, #0                      ;ten kod wykona się gdy w R0 jest 0   
  23.        
  24. Wyzeruj:   
  25.         MOV R6, #0                      ;reset R1
  26.         SJMP Kontynuuj                  ;skok do etykiety Kontynuujującej licznik T0
  27.  
  28. Inkrementuj:   
  29.         INC R0     
  30.         SJMP Wyzeruj
  31.        
  32. Kontynuuj: 
  33.         SETB TR0                        ;Kontynuuj licznika T0
  34.         RETI                            ;powrót z procedury przerwania
  35.  
  36. START: 
  37.         SETB EA                         ;zezwolenie na przerwania
  38.         SETB ET0
  39.         SETB EX0
  40.         SETB IT0
  41.                                 ;zezwolenie na przerwania od układu czasowo - licznikowego T0
  42.         MOV TMOD, #00000001B            ;ustawienie układu czasowo-licznikowego T0 w tryb 1
  43.         MOV TL0, #11011111B    
  44.         MOV TH0, #10110001B             ;załadowana wartość B1DFh
  45.         MOV R0, #00H                    ;wyzerowanie zawartości rejestru r0
  46.         MOV R6, #00H                    ;wyzerowanie zawartości rejestru r1
  47.         SETB TR0                        ;Kontynuuj licznika T0
  48.         SJMP $                          ;oczekuj na przerwanie
  49. Przerwanie: MOV R3, A
  50.         CPL P3.0
  51.         CPL TR0
  52.         MOV A, R3
  53.         RETI
  54.  
  55. SEGMENT_DISPLAY:
  56.     MOV A, R0
  57.     MOV P1, #01h ; uruchomienie pierwszego wyswietlacza
  58.     MOV DPTR, #DIGITS ; przeniesienie adresu pierwszego elementu tablicy do DPTR
  59.     MOVC A, @A+DPTR ; dodanie liczby z R0 (liczba z licznika) do adresu
  60.     MOV P0, A ; wyswietlenie odpowiedniej liczby na wyświetlaczu
  61.     RET
  62.  
  63. DIGITS:DB 0C0h, 0F9h, 0A4h, 0B0h, 099h, 092h, 082h, 0F8h, 080h, 090h
  64.  
  65.  
  66. ORG 200H
  67. USTAW: ACALL LCD_INIT
  68. JMP START
  69. RET
  70.  
  71. LCD_INIT:  
  72.     ;MOV R1, #0x32
  73.     ;MOV R2, #0x00
  74.     MOV A, #0x20
  75.     LCALL WRITE_INSTRUCTION
  76.     LCALL DELAY100MS       
  77.  
  78.     LCALL WRITE_INSTRUCTION
  79.     MOV A, #0xa0
  80.     LCALL WRITE_INSTRUCTION
  81.                
  82.     ;MOV R1, #0x32
  83.     LCALL DELAY100MS       
  84.  
  85.     MOV A, #0x00
  86.     LCALL WRITE_INSTRUCTION
  87.     MOV A, #0x60
  88.     LCALL WRITE_INSTRUCTION
  89.     ;MOV R1, #0x32
  90.     LCALL DELAY100MS       
  91.  
  92.     MOV A, #0x00
  93.     LCALL WRITE_INSTRUCTION
  94.     MOV A, #0xf0
  95.     LCALL WRITE_INSTRUCTION
  96.     ;MOV R1, #0x32
  97.     LCALL DELAY100MS       
  98.     RET
  99. LCD_DISPLAY:
  100.     LCALL CLEAR
  101.     LCALL DELAY100MS
  102.     MOV A, R0
  103.     ADD A, #0x30
  104.     LCALL WRITE_CHARACTER
  105.     RET
  106. SEND_NIBBLE:
  107.  MOV C, ACC.7  
  108.  MOV DB7, C  
  109.  MOV C, ACC.6  
  110.  MOV DB6, C  
  111.  MOV C, ACC.5  
  112.  MOV DB5, C  
  113.  MOV C, ACC.4  
  114.  MOV DB4, C
  115. RET
  116.  
  117. CLEAR:
  118.     LCALL DELAY100MS
  119.     MOV A, #0x00
  120.     LCALL WRITE_INSTRUCTION
  121.     LCALL DELAY100MS
  122.     MOV A, #0x10
  123.     LCALL WRITE_INSTRUCTION
  124.     RET
  125.    
  126. WRITE_CHARACTER:
  127. SETB RS
  128. LCALL SEND_NIBBLE
  129. SETB E
  130. CLR E
  131. SWAP A
  132. LCALL SEND_NIBBLE
  133. SETB E
  134. CLR E
  135. RET
  136.  
  137. WRITE_INSTRUCTION:
  138. CLR RS
  139. LCALL SEND_NIBBLE
  140. SETB E
  141. CLR E
  142. RET
  143.  
  144. DELAY:
  145.  DJNZ R1, DELAY
  146.  MOV R1, #100
  147.  INC R2
  148.  DJNZ R2, DELAY
  149.  RET
  150. DELAY1MS:
  151.     MOV R7, #250
  152.     DJNZ R7, $
  153.     MOV R7, #247
  154.     DJNZ R7, $
  155.     RET
  156. DELAY100MS:
  157.     MOV R6, #99
  158. LOOP:
  159.     LCALL DELAY1MS
  160.     DJNZ R6, LOOP
  161.     MOV R6, #250
  162.     DJNZ R6, $
  163.     MOV R6, 147
  164.     DJNZ R6, $
  165.     NOP
  166.     RET
  167.  
  168. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement