Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DB7 EQU P2.5
- DB6 EQU P2.4
- DB5 EQU P2.3
- DB4 EQU P2.2
- RS EQU P2.0
- E EQU P2.1
- ORG 0h
- LJMP USTAW
- ORG 003H
- LJMP Przerwanie
- ORG 000BH ;przerwanie z układu czasowo licznikowego T0, układ zgłasza
- CLR TR0 ;zatrzymanie licznika 0
- CLR TF0 ;wyczyszczenie flagi licznika T0
- INC R6 ;inkrementacja zawartości rejestru r1
- CJNE R6, #1AH, Kontynuuj ;przy wartości 1Ah, skok do Kontynuuj
- ACALL SEGMENT_DISPLAY
- ACALL LCD_DISPLAY
- CJNE R0, #09H, Inkrementuj ;jesli zawartość rejestru r0 nie osiągnęła wartości 09h, skok do etykiety INCR
- ;ACALL LCD_DISPLAY
- MOV R0, #0 ;ten kod wykona się gdy w R0 jest 0
- Wyzeruj:
- MOV R6, #0 ;reset R1
- SJMP Kontynuuj ;skok do etykiety Kontynuujującej licznik T0
- Inkrementuj:
- INC R0
- SJMP Wyzeruj
- Kontynuuj:
- SETB TR0 ;Kontynuuj licznika T0
- RETI ;powrót z procedury przerwania
- START:
- SETB EA ;zezwolenie na przerwania
- SETB ET0
- SETB EX0
- SETB IT0
- ;zezwolenie na przerwania od układu czasowo - licznikowego T0
- MOV TMOD, #00000001B ;ustawienie układu czasowo-licznikowego T0 w tryb 1
- MOV TL0, #11011111B
- MOV TH0, #10110001B ;załadowana wartość B1DFh
- MOV R0, #00H ;wyzerowanie zawartości rejestru r0
- MOV R6, #00H ;wyzerowanie zawartości rejestru r1
- SETB TR0 ;Kontynuuj licznika T0
- SJMP $ ;oczekuj na przerwanie
- Przerwanie: MOV R3, A
- CPL P3.0
- CPL TR0
- MOV A, R3
- RETI
- SEGMENT_DISPLAY:
- MOV A, R0
- MOV P1, #01h ; uruchomienie pierwszego wyswietlacza
- MOV DPTR, #DIGITS ; przeniesienie adresu pierwszego elementu tablicy do DPTR
- MOVC A, @A+DPTR ; dodanie liczby z R0 (liczba z licznika) do adresu
- MOV P0, A ; wyswietlenie odpowiedniej liczby na wyświetlaczu
- RET
- DIGITS:DB 0C0h, 0F9h, 0A4h, 0B0h, 099h, 092h, 082h, 0F8h, 080h, 090h
- ORG 200H
- USTAW: ACALL LCD_INIT
- JMP START
- RET
- LCD_INIT:
- ;MOV R1, #0x32
- ;MOV R2, #0x00
- MOV A, #0x20
- LCALL WRITE_INSTRUCTION
- LCALL DELAY100MS
- LCALL WRITE_INSTRUCTION
- MOV A, #0xa0
- LCALL WRITE_INSTRUCTION
- ;MOV R1, #0x32
- LCALL DELAY100MS
- MOV A, #0x00
- LCALL WRITE_INSTRUCTION
- MOV A, #0x60
- LCALL WRITE_INSTRUCTION
- ;MOV R1, #0x32
- LCALL DELAY100MS
- MOV A, #0x00
- LCALL WRITE_INSTRUCTION
- MOV A, #0xf0
- LCALL WRITE_INSTRUCTION
- ;MOV R1, #0x32
- LCALL DELAY100MS
- RET
- LCD_DISPLAY:
- LCALL CLEAR
- LCALL DELAY100MS
- MOV A, R0
- ADD A, #0x30
- LCALL WRITE_CHARACTER
- RET
- SEND_NIBBLE:
- MOV C, ACC.7
- MOV DB7, C
- MOV C, ACC.6
- MOV DB6, C
- MOV C, ACC.5
- MOV DB5, C
- MOV C, ACC.4
- MOV DB4, C
- RET
- CLEAR:
- LCALL DELAY100MS
- MOV A, #0x00
- LCALL WRITE_INSTRUCTION
- LCALL DELAY100MS
- MOV A, #0x10
- LCALL WRITE_INSTRUCTION
- RET
- WRITE_CHARACTER:
- SETB RS
- LCALL SEND_NIBBLE
- SETB E
- CLR E
- SWAP A
- LCALL SEND_NIBBLE
- SETB E
- CLR E
- RET
- WRITE_INSTRUCTION:
- CLR RS
- LCALL SEND_NIBBLE
- SETB E
- CLR E
- RET
- DELAY:
- DJNZ R1, DELAY
- MOV R1, #100
- INC R2
- DJNZ R2, DELAY
- RET
- DELAY1MS:
- MOV R7, #250
- DJNZ R7, $
- MOV R7, #247
- DJNZ R7, $
- RET
- DELAY100MS:
- MOV R6, #99
- LOOP:
- LCALL DELAY1MS
- DJNZ R6, LOOP
- MOV R6, #250
- DJNZ R6, $
- MOV R6, 147
- DJNZ R6, $
- NOP
- RET
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement