Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

projekt realizacji zamka cyfrowego dsm-51

Adan199518
-
-
Posty:27
Rejestracja:19 sty 2013, o 21:01
projekt realizacji zamka cyfrowego dsm-51

Postautor: Adan199518 » 11 mar 2015, o 16:34

Zrealizowałem zamek cyfrowy na dsm-51. Zamek ma dzialac tak: Jesli w pamieci eeprom nie ma zapisanego kodu (w komorce zero wartosc <> 184), zapala sie dioda i z klawiatury matrycowej podajemy nowy kod. Po podaniu 6-ciu cyfr (tyle ma kod) naciskamy klawisz 'ENTER' i kod zostaje zapisany do pamieci eeprom a dioda gasnie. Podajac kod, zawsze na poczatku trzeba nacisnac klawisz '#' - on informuje ze bedziemy wprowadzac kod. Gdy w eepromie jest juz kod, zostaje on wczytany do pamieci RAM pod adresy: pierwsza cyfra pod 10h, druga pod 11h, trzecia pod 12h itd... nastepnie zamek przechodzi w tryb czekania na klawisz. gdy wcisniemy '#' wlacza sie timer i mamy ok 18s na podanie kodu, po tym czasie uklad wraca do stanu zasadniczego. Po podaniu wszystkich cyfr kodu i zatwierdzeniu klawiszem 'ENTER' uklad sprawdza czy jest on wlasciwy. Sprawdzanie polega na porownaniu wartosci z rejestrow R2-R7 (z banku 0) z wartosciami zapisanymi w adresach 10h-15h. Jesli kod jest poprawny, procesor zeruje linie p1.7 i tym samym otwiera zamek. Pozostaje on otwarty az do momentu nacisniecia jakiegokolwiek klawisza. Jednoczesnie jesli przy otwartym zamku wcisniemy klawisz '9' to uklad przechodzi do trybu programowania nowego kodu. Po podaniu nowego kodu i zatwierdzeniu go 'ENTER-em' zostaje on zapisany w pamieci eeprom a uklad ponownie wykonuje procedure start.
Chciałbym jeszcze zrobić aby po wprowadzeniu prawidłowego kodu włączał się buzzer. Proszę o pomoc w zrealizowaniu tego i sprawdzeniu kodu żródłowego.Przy skompilowaniu przez program edsim51 wywala mi błąd w linii TIM0 EQU T0_M+T0_C*4+T0_G*8

Kod: Zaznacz cały

T0_G EQU 0 T0_C EQU 0 T0_M EQU 1 TIM0 EQU T0_M+T0_C*4+T0_G*8 T1_G EQU 0 T1_C EQU 0 T1_M EQU 1 TIM1 EQU T1_M+T1_C*4+T1_G*8 TMOD_SET EQU TIM0+TIM1*16 TH0_SET EQU 0 TL0_SET EQU 0 TH1_SET EQU 0 TL1_SET EQU 0 row1 EQU P3.3 row2 EQU P3.4 row3 EQU P3.5 row4 EQU P3.7 col1 EQU P3.0 col2 EQU P3.1 col3 EQU P3.2 SDA EQU P1.4 SCL EQU P1.5 PRG EQU PSW.1 LJMP START ORG 0BH LJMP TIMER0 ORG 40H MOV SP,#19H TIMER0: ;CZEKAJ OK 18S MOV TH0,#TH0_SET DJNZ B,NO_1 MOV B,#0 LCALL KON2 NO_1: RETI PROG: CLR P1.2 SETB PRG AJMP START1 START: ;INICJALIZACJA ZAMKA MOV P1,#11111111B ;ZAPISZ USTAWIENIA POCZATKOWE MOV TH0,#TH0_SET MOV TMOD,#TMOD_SET MOV R2,#20 MOV R3,#20 MOV R4,#20 MOV R5,#20 MOV R6,#20 MOV R7,#20 MOV B,#0 MOV A,#0 CLR F0 ;ZERUJ FLAGE WPROWADZANIA KODU CLR PRG ;ZERUJ FLAGE PROGRAMOWANIA SETB EA ;WLACZ PRZERWANIA SETB ET0 ;WLACZ PRZERWANIE OD TIMERA0 CLR P1.2 ;ZAPAL DIODE ACALL I2C_START ;SPRAWDZ CZY ZAPROGRAMOWANY EEPROM MOV A,#168 ;JESLI POD ADRESEM 0 JEST 184 TZN ACALL I2C_WRITE ;ZE JEST ZAPROGRAMOWANY MOV A,#0 ;JESLI NIE, TO PRZEJDZ DO TRYBU ACALL I2C_WRITE ;PROGRAMOWANIA NOWEGO KODU ACALL I2C_START MOV A,#169 ACALL I2C_WRITE SETB C ACALL I2C_READ ACALL I2C_STOP CJNE A,#184,PROG ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#1 ACALL I2C_WRITE ACALL I2C_START MOV A,#169 ACALL I2C_WRITE SETB C ACALL I2C_READ ACALL I2C_STOP MOV 10H,A ;UMIESC KOD KLAWISZA Z PAMIECI EEPROM W PAMIECI ;RAM ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#2 ACALL I2C_WRITE ACALL I2C_START MOV A,#169 ACALL I2C_WRITE SETB C ACALL I2C_READ ACALL I2C_STOP MOV 11H,A ;UMIESC KOD KLAWISZA Z PAMIECI EEPROM W PAMIECI ;RAM ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#3 ACALL I2C_WRITE ACALL I2C_START MOV A,#169 ACALL I2C_WRITE SETB C ACALL I2C_READ ACALL I2C_STOP MOV 12H,A ;ITD... ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#4 ACALL I2C_WRITE ACALL I2C_START MOV A,#169 ACALL I2C_WRITE SETB C ACALL I2C_READ ACALL I2C_STOP MOV 13H,A ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#5 ACALL I2C_WRITE ACALL I2C_START MOV A,#169 ACALL I2C_WRITE SETB C ACALL I2C_READ ACALL I2C_STOP MOV 14H,A ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#6 ACALL I2C_WRITE ACALL I2C_START MOV A,#169 ACALL I2C_WRITE SETB C ACALL I2C_READ ACALL I2C_STOP MOV 15H,A SETB P1.2 ;ZGAS DIODE START1: ACALL GETKBD ;CZEKAJ NA KLAWISZ JZ START1 ACALL CHECK ;JESLI COS WCISNIETO, SPRAWDZ SJMP START1 D333: AJMP D33 GETKBD: ;PROCEDURA ODCZYTUJACA KLAWIATURE MATRYCOWA MOV P3,#0FFH ;KODY KLAWISZY: MOV A, #0 ;1: 1 ;2: 2 CLR row1 ;3: 3 JB col1, D1 ;4: 4 MOV A,#1 ;5: 5 ACALL DELAY ;6: 6 D50: ;7: 7 JB col1,D333 ;8: 8 SJMP D50 ;9: 9 D1: ;0: 12 JB col2, D2 ;ENTER: 10 MOV A,#2 ;#: 11 ACALL DELAY D51: JB col2,D333 SJMP D51 D2: JB col3, D3 MOV A,#3 ACALL DELAY D52: JB col3,D333 SJMP D52 D3: SETB row1 CLR row2 JB col1, D11 MOV A,#4 ACALL DELAY D4: JB col1,D33 SJMP D4 D11: JB col2, D21 MOV A,#5 ACALL DELAY D41: JB col2,D33 SJMP D41 D21: JB col3, D31 MOV A,#6 ACALL DELAY D42: JB col3,D33 SJMP D42 D31: SETB row2 CLR row3 JB col1, D12 MOV A,#7 ACALL DELAY D43: JB col1,D33 SJMP D43 D12: JB col2, D22 MOV A,#8 ACALL DELAY D44: JB col2,D33 SJMP D44 D22: JB col3, D32 MOV A,#9 ACALL DELAY D45: JB col3,D33 SJMP D45 D32: SETB row3 CLR row4 JB col1, D13 MOV A,#10 ACALL DELAY D46: JB col1,D33 SJMP D46 D13: JB col2, D23 MOV A,#12 ACALL DELAY D47: JB col2,D33 SJMP D47 D23: JB col3, D33 MOV A,#11 ACALL DELAY D48: JB col3,D33 SJMP D48 D33: SETB row4 SETB row3 SETB row2 SETB row1 ACALL DELAY RET DELAY: ;OPOZNIENIE MOV R0,#0 MOV R1,#80 L1: INC R0 CJNE R0,#0,L1 L2: INC R1 CJNE R1,#0,L1 RET CHECK: ;PROCEDURA SPRAWDZAJACA NACISKANE KLAWISZE JNB P1.7,GAS ;JESLI OTWARTE SKOCZ DO GAS CJNE A,#11,C1 ;JESLI # TZN POCZATEK PODAWANIA KODU SETB F0 ;USTAW FLAGE SETB TR0 ;WLACZ TIMER SJMP KON1 C1: JNB F0,KON1 ;JESLI FLAGA NIE USTAWIONA TO WYJDZ CJNE A,#10,DALEJ7 ;CZY ENTER? JESLI TAK TO SPRAWDZ KOD SJMP SPRAWDZ DALEJ7: CJNE R7,#20,KON2 ;CZY WSZYSTKIE CYFRY KODU PODANO? CJNE R6,#20,DALEJ5 CJNE R5,#20,DALEJ4 CJNE R4,#20,DALEJ3 CJNE R3,#20,DALEJ2 CJNE R2,#20,DALEJ MOV R2,A ;ZAPISZ W R2 PIERWSZA CYFRE SJMP KON1 DALEJ: MOV R3,A ;ZAPISZ W R3 DRUGA CYFRE SJMP KON1 DALEJ2: MOV R4,A SJMP KON1 DALEJ3: MOV R5,A SJMP KON1 DALEJ4: MOV R6,A SJMP KON1 DALEJ5: MOV R7,A SJMP KON1 SPRAWDZ: JB PRG,ZAPIS ;JESLI USTAWIONA FLAGA, TO PRZEJDZ DO ZAPISU EEPROM MOV A,R2 CJNE A,10H,KON2 ;POROWNAJ KOD WPROWADZONY Z ZAPISANYM W ADRESACH MOV A,R3 ;10H - 15H (WCZYTANY Z PAMIECI EEPROM) CJNE A,11H,KON2 MOV A,R4 CJNE A,12H,KON2 MOV A,R5 CJNE A,13H,KON2 MOV A,R6 CJNE A,14H,KON2 MOV A,R7 CJNE A,15H,KON2 CLR P1.7 ;JESLI WSZYSTKIE CYFRY DOBRE TO OTWORZ KON2: MOV R2,#20 ;PRZYPISZ WARTOSCI POCZATKOWE REJESTROM MOV R3,#20 MOV R4,#20 MOV R5,#20 MOV R6,#20 MOV R7,#20 MOV TH0,#TH0_SET MOV B,#0 CLR TR0 ;WYLACZ TIMER CLR F0 ;SKASUJ FLAGE KON1: RET GAS: ;JESLI WCISNIETO 9 TO ZAMKNIJ I PRZEJDZ CJNE A,#9,GAS1 ;DO TRYBU PROGRAMOWANIA NOWEGO KODU SETB P1.7 ;ZAPAL DIODE LJMP PROG GAS1: SETB P1.7 ;ZAMKNIJ RET ZAPIS: ;PROCEDURA ZAPISUJACA NOWY KOD DO PAMIECI EEPROM CLR TR0 ;WYLACZ ZEGAR CLR F0 ;SKASUJ FLAGE MOV TH0,#TH0_SET CJNE R7,#20,ZP ;SPRAWDZ CZY WPROWADZONO WSZYSTKIE CYFRY KODU LJMP START1 ;JESLI NIE, TO WYJDZ ZP: CJNE R6,#20,ZP1 LJMP START1 ZP1: CJNE R5,#20,ZP2 LJMP START1 ZP2: CJNE R4,#20,ZP3 LJMP START1 ZP3: CJNE R3,#20,ZP4 LJMP START1 ZP4: CJNE R2,#20,ZP5 LJMP START1 ZP5: ACALL I2C_START ;ZAPISZ 184 DO 0 KOMORKI (ZNAK ZE PAMIEC ZAWIERA KOD) MOV A,#168 ACALL I2C_WRITE MOV A,#0 ACALL I2C_WRITE MOV A,#184 ACALL I2C_WRITE ACALL I2C_STOP ACALL DELAY ACALL I2C_START ;ZAPISZ DO EEPROM PIERWSZA CYFRE KODU MOV A,#168 ACALL I2C_WRITE MOV A,#1 ACALL I2C_WRITE MOV A,R2 ACALL I2C_WRITE ACALL I2C_STOP ACALL DELAY ACALL I2C_START ;ZAPISZ DO EEPROM DRUGA CYFRE KODU MOV A,#168 ACALL I2C_WRITE MOV A,#2 ACALL I2C_WRITE MOV A,R3 ACALL I2C_WRITE ACALL I2C_STOP ACALL DELAY ACALL I2C_START ;ITD... MOV A,#168 ACALL I2C_WRITE MOV A,#3 ACALL I2C_WRITE MOV A,R4 ACALL I2C_WRITE ACALL I2C_STOP ACALL DELAY ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#4 ACALL I2C_WRITE MOV A,R5 ACALL I2C_WRITE ACALL I2C_STOP ACALL DELAY ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#5 ACALL I2C_WRITE MOV A,R6 ACALL I2C_WRITE ACALL I2C_STOP ACALL DELAY ACALL I2C_START MOV A,#168 ACALL I2C_WRITE MOV A,#6 ACALL I2C_WRITE MOV A,R7 ACALL I2C_WRITE ACALL I2C_STOP ACALL DELAY CLR PRG ;SKASUJ FLAGE PROGRAMOWANIA SETB P1.2 ;ZGAS DIODE AJMP START ;WYJDZ DO START (PONOWNA INICJALIZACJA) ;********** OBSLUGA I2C ************ I2C_READ: ;PROCEDURA ODCZYTU Z I2C CLR SCL ACALL I2C_TAKT PUSH 04H MOV R4,#8 I2R: RLC A ACALL I2C_TAKT SETB SCL ACALL I2C_TAKT MOV C, SDA ACALL I2C_TAKT CLR SCL DJNZ R4, I2R RLC A ACALL I2C_TAKT MOV SDA,C ACALL I2C_TAKT SETB SCL ACALL I2C_TAKT CLR SCL POP 04H RET I2C_WRITE: ;PROCEDURA ZAPISU DO I2C CLR SCL PUSH 04H MOV R4,#8 ACALL I2C_TAKT I2W: RLC A MOV SDA,C ACALL I2C_TAKT SETB SCL ACALL I2C_TAKT CLR SCL ACALL I2C_TAKT DJNZ R4,I2W SETB SDA ACALL I2C_TAKT SETB SCL ACALL I2C_TAKT MOV C,SDA ACALL I2C_TAKT CLR SCL ACALL I2C_TAKT POP 04H RET I2C_START: ;GENERACJA SEKWENCJI START SETB SDA ACALL I2C_TAKT SETB SCL ACALL I2C_TAKT CLR SDA ACALL I2C_TAKT CLR SCL RET I2C_STOP: ;GENERACJA SEKWENCJI STOP CLR SDA ACALL I2C_TAKT SETB SCL ACALL I2C_TAKT SETB SDA ACALL I2C_TAKT RET I2C_TAKT: ;OPOZNIENIE NOP NOP NOP NOP NOP NOP NOP RET

Awatar użytkownika
rafal.220
-
-
Posty:1274
Rejestracja:27 paź 2012, o 15:46

Re: projekt realizacji zamka cyfrowego dsm-51

Postautor: rafal.220 » 11 mar 2015, o 18:07

Też zabieram się do budowy zamka cyfrowego.
Twoje rozwiązanie jest bardzo słabe... Zamek cyfrowy, to musi być swoistego rodzaju "sztuczna inteligencja", która zmienia zasady gry, oraz klucze dostępu.

Adan199518
-
-
Posty:27
Rejestracja:19 sty 2013, o 21:01

Re: projekt realizacji zamka cyfrowego dsm-51

Postautor: Adan199518 » 11 mar 2015, o 21:17

Chciałbym zrobić ten programik bez obsługi I2C tylko na zwykłej klawiaturze matrycowej takiej jak w dsm-51.Prosiłbym o szybka pomoc

Awatar użytkownika
areczkas
-
-
Posty:341
Rejestracja:2 mar 2004, o 13:18
Lokalizacja:Warszawa
Kontaktowanie:

Re: projekt realizacji zamka cyfrowego dsm-51

Postautor: areczkas » 30 maja 2016, o 20:36

Też zabieram się do budowy zamka cyfrowego.
Twoje rozwiązanie jest bardzo słabe... Zamek cyfrowy, to musi być swoistego rodzaju "sztuczna inteligencja", która zmienia zasady gry, oraz klucze dostępu.
hej możesz rozwinąć myśl? Jakiś konkretny przykład?

Wróć do „8051”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 26 gości