- $NOMOD51
- #include <C8051F060.INC>
- ;-------------------------------------------------------------------------------------------------------
- ; DEFINICJE SYMBOLI
- ;-------------------------------------------------------------------------------------------------------
- aktywacja_backLight equ P5.3 ; obsluga podswietlenia LCD
- LEDs equ P2.5 ; aktywacja diod LED
- TOS equ 30H ; wierzcholek stosu
- zapal_wszystko equ 0FFH ; zapalenie wszystkich diod
- Ready bit 0
- Ready2 bit 1
- T0_TMOD equ 1H
- T0_Reload equ 65536 - 100
- Del equ 7FH
- Del2 equ 7FH
- DelReload equ 1
- DelReload2 equ 1
- T1_TMOD equ 10H
- T1_Reload equ 65536 - 10
- flaga1 bit 2
- flaga2 bit 3
- flaga3 bit 4
- decode bit 5
- Button_Code equ 70h
- Position_Pointer equ 50h
- Sign_Pointer equ 51h
- Sign_Symbol equ 52h
- Sign_Code equ 53h
- DIGIT0 equ P2.0
- DIGIT1 equ P2.1
- DIGIT2 equ P2.2
- DIGIT3 equ P2.3
- DIGIT4 equ P2.4
- CK_D equ P5.6 ; obsluga bufora sterujacego diodami LED
- SW1 equ P5.4
- SW2 equ P5.5
- ;-------------------------------------------------------------------------------------------------------
- ; Umieszczenie poczatku programu pod adresem 0000H
- cseg AT 0000h
- jmp Poczatek
- org 000BH
- jmp Timer0_Int
- org 001BH
- jmp Timer1_Int
- ;-------------------------------------------------------------------------------------------------------
- ; Konfiguracja mikrokontrolera
- ;-------------------------------------------------------------------------------------------------------
- Poczatek:
- mov WDTCN, #0DEh ; wylaczenie watchdoga
- mov WDTCN, #0ADh ; wylaczenie watchdoga
- mov SFRPAGE, #CONFIG_PAGE ; wlaczenie odpowiedniej konfiguracji SFR-ow
- mov XBR2, #040h ; wlaczenie krosownicy
- mov 0x45, #11111110b
- mov 0x46, #11111101b
- mov 0x47, #11111011b
- mov 0x48, #11110111b
- mov 0x49, #11101111b
- mov 0x4A, #0x06
- mov 0x4B, #0x5B
- mov 0x4C, #0x06
- mov 0x4D, #0x5B
- mov 0x4E, #0x06
- mov 0x54, #0x07 ;7
- mov 0x55, #0x7F ;8
- mov 0x56, #0x6F ;9
- mov 0x57, #0x71 ;F
- mov 0x58, #0x66 ;4
- mov 0x59, #0x6D ;5
- mov 0x5A, #0x7D ;6
- mov 0x5B, #0x79 ;E
- mov 0x5C, #0x06 ;1
- mov 0x5D, #0x5B ;2
- mov 0x5E, #0x4F ;3
- mov 0x5F, #0x5E ;D
- mov 0x60, #0x3F ;0
- mov 0x61, #0x77 ;A
- mov 0x62, #0x40 ;B
- mov 0x63, #0x39 ;C
- mov Position_Pointer, #0x45
- mov Sign_Pointer, #0x4A
- mov 0x70, #11111111b
- clr flaga1
- clr flaga2
- clr Ready
- clr Ready2
- clr decode
- ;-------------------------------------------------------------------------------------------------------
- ; PROGRAM GLOWNY
- ;-------------------------------------------------------------------------------------------------------
- ; inicjalizacja
- mov SP, #TOS ; inicjalizacja stosu
- clr aktywacja_backLight ; wylaczenie podswietlania LCD
- mov Del, #DelReload
- mov Del2, #DelReload2
- clr Ready
- clr Ready2
- call Timer0_Init
- call Timer1_Init
- mov R1, #0x54
- mov R0, #0x45
- mov R4, #0x00
- mov R5, #05h
- mov R6, #0x52
- mov R3, #0x4A
- mov R7, #0xFE
- setb EA
- setb ET0
- setb ET1
- ;-------------------------------------------------------------------------------------------------------
- ; glowna petla programu
- ;-------------------------------------------------------------------------------------------------------
- clr DIGIT0
- clr A
- mov P7, #0x00
- call zapisz
- mov DPTR, #kody_klawiszy
- ; mov Sign_Symbol, #symbole
- ; mov Sign_Code, #kody_klawiszy
- loop1:
- jnb decode, loop1
- call zdekoduj_wcisniety
- jmp loop1
- zdekoduj_wcisniety:
- loop:
- clr A
- movc A, @A+DPTR
- cjne A, #01110111b, nie
- mov DPTR, #kody_klawiszy
- mov R1, #0x54
- nie:
- cjne A,Button_Code,skok
- mov A, @R1
- mov 0x4A, A
- clr decode
- jmp koniec
- skok:
- inc DPTR
- inc R1
- jmp loop
- koniec:
- ret
- ;-----------------------------------------------------------------------------------------------
- ; PROCEDURY
- ;-----------------------------------------------------------------------------------------------
- ; ZNAKI
- ;-----------------------------------------------------------------------------------------------
- ;-----------------------------------------------------------------------------------------------
- ;-------------------------------------------------------------------------------------------------
- poczekaj_hw:
- jnb Ready, $
- clr Ready
- ret
- zapisz:
- nop
- nop
- clr CK_D
- nop
- nop
- setb CK_D
- ret
- ;-------------------------------------------------------------------------------------------------
- ; INICJZALICJA TIMERA
- ;-------------------------------------------------------------------------------------------------
- Timer0_Init:
- mov SFRPAGE, #TIMER01_PAGE
- anl TMOD, #0F0H
- orl TMOD, #T0_TMOD
- call Timer0_Reload
- setb TR0
- mov SFRPAGE, #CONFIG_PAGE
- ret
- Timer1_Init:
- mov SFRPAGE, #TIMER01_PAGE
- anl TMOD, #0FH
- orl TMOD, #T1_TMOD
- call Timer1_Reload
- setb TR1
- mov SFRPAGE, #CONFIG_PAGE
- ret
- ;-------------------------------------------------------------------------------------------------
- ;-------------------------------------------------------------------------------------------------
- ; RELOAD
- ;-------------------------------------------------------------------------------------------------
- Timer0_Reload:
- mov TH0, #High(T0_Reload)
- mov TL0, #Low(T0_Reload)
- ret
- ;-------------------------------------------------------------------------------------------------
- ; PRZERWANIE PROC
- ;-------------------------------------------------------------------------------------------------
- Timer0_Int:
- push ACC
- mov SFRPAGE, #TIMER01_PAGE
- call Timer0_Reload
- mov SFRPAGE, #CONFIG_PAGE
- jb decode, Timer0_Int_Exit
- skanuj:
- mov P3, R7
- mov Button_Code, P3
- mov A, Button_Code
- anl A, #0F0h
- cjne A, #0F0h, wcisniety
- jmp skanuj_dalej
- wcisniety:
- setb decode
- mov A, R7
- anl A, #00Fh
- anl Button_Code, #0F0h
- add A, Button_Code
- mov Button_Code, A
- jmp Timer0_Int_Exit
- skanuj_dalej:
- mov A, R7
- rl A
- mov R7, A
- cjne A, #0EFh, not_reload_R7
- mov R7, #0FEh
- jmp Timer0_Int_Exit
- ;jmp skanuj ?
- not_reload_R7:
- jmp skanuj
- Timer0_Int_Exit:
- pop ACC
- reti
- Timer1_Reload:
- mov TH1, #High(T1_Reload)
- mov TL1, #Low(T1_Reload)
- ret
- Timer1_Int:
- push ACC
- mov SFRPAGE, #TIMER01_PAGE
- call Timer1_Reload
- mov SFRPAGE, #CONFIG_PAGE
- mov P2, #0ffh
- mov P7, #00h
- call zapisz
- mov R0, Position_Pointer
- mov P2, @R0
- mov R0, Sign_Pointer
- mov P7, @R0
- call zapisz
- inc Sign_Pointer
- inc Position_Pointer
- djnz R5, Timer1_Int_Exit
- mov Sign_Pointer, #0x4A
- mov Position_Pointer, #0x45
- mov R5, #05h
- Timer1_Int_Exit:
- pop ACC
- reti
- ;------------------------------------------------------------------------------------------------
- kody_klawiszy:
- db 11101110b ;7
- db 11101101b ;8
- db 11101011b ;9
- db 11100111b ;F
- db 11011110b ;4
- db 11011101b ;5
- db 11011011b ;6
- db 11010111b ;E
- db 10111110b ;1
- db 10111101b ;2
- db 10111011b ;3
- db 10110111b ;D
- db 01111110b ;0
- db 01111101b ;A
- db 01111011b ;B
- db 01110111b ;C
- symbole:
- db 0x07 ;7
- db 0x7F ;8
- db 0x6F ;9
- db 0x71 ;F
- db 0x66 ;4
- db 0x6D ;5
- db 0x7D ;6
- db 0x79 ;E
- db 0x06 ;1
- db 0x5B ;2
- db 0x4F ;3
- db 0x5E ;D
- db 0x3F ;0
- db 0x77 ;A
- db 0x40 ;B
- db 0x39 ;C
- end ; informacja dla asemblera, ze skonczyl sie plik zrodlowy