$NOMOD51 #include ;------------------------------------------------------------------------------------------------------- ; 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