;************************************************ ;LEKCJA 7 - KLAWIATURA PRZEGL?DANA SEKWENCYJNIE ;PRZYK?AD 3 - ELIMINACJA DRGA? STYK?W ;************************************************ LED EQU P1.7 KEY EQU 0B5H ;odczyt klawiatury SEG_ON EQU P1.6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KONFIGURACJA LICZNIKA TH0_SET EQU 0B8H TL0_SET EQU 000H TCONF EQU 00000001B ;Stale uzywane w programie KEY_COD EQU 00001001B ;wybrane klawisze-1i4 ;KEY_COD EQU 11111111B LJMP START ORG 0BH LJMP PRZERWANIE_T0 ORG 100H START: ;;KONFIGURACJA LICZNIKA MOV SP,#20 MOV TH0,#TH0_SET MOV TL0,#TL0_SET MOV TMOD,#TCONF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PRZERWANIA SETB EA ;WLACZENIE PRZERWAN SETB ET0 ;WLACZENIE PRZERWANIA LICZNIKA 0 MOV R3,#00000001B ;wyb?r wska?nika MOV R1,#CSDS ;adres wyboru wska?nika MOV R0,#CSDB ;wybor segmentow MOV A,#00001000B MOVX @R0,A ;wpisz kod segment?w SETB TR0 ;URUCHOMIENIE LICZNKA LOOP: MOV A,@R1 MOV R4,A SETB SEG_ON ;wylaczenie wyswietlacza MOV A,#KEY_COD MOVX @R1,A ;wpisz wybrane klawisze JNB KEY,NIE_WCISNIETY ; CPL LED NIE_WCISNIETY: MOV A,R4 MOVX @R1,A ;wpisz wybrane klawisze CLR SEG_ON ;w??czenie wska?nika MOV A,#1 LCALL DELAY_100MS SJMP LOOP ;powr?t do p?tli czekania na klawisz PRZERWANIE_T0: PUSH PSW PUSH ACC MOV TH0,#TH0_SET MOV TL0,#TL0_SET MOV A,R3 SETB SEG_ON ;wylaczenie wyswietlacza JB LED,OBR_W_PRAWO RL A ;obrot w lewo - numer CJNE A,#01000000B,OBR MOV A,#00000001B OBR: MOV R3,A SJMP END_T0 OBR_W_PRAWO: RR A ;obr?t w lewo - numer CJNE A,#10000000B,OBRP MOV A,#00100000B OBRP: MOV R3,A END_T0: MOV A,R3 ;aktualny wska?nik (1z8) MOVX @R1,A ;wpisz nr wska?nika CLR SEG_ON ;w??czenie wska?nika POP ACC POP PSW RETI