Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Computer ControlsComputer Controls
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

8051 asembler szyfrator, zapis i odczyt hasła, alarm.

14 Nov 2007 15:33 1961 5
  • Level 10  
    Witam moze ktos mi pomoze, potrzebuje program ktory bedzie pobieral z klawiatury 1234567890#* kod (4 cyfrowy) i zapisywal, dokladnych szczegołów nie znam ;/ ale chodzi o program ktory by po wcisnieciu odp sekwencji klawiszy np #1* pobieral 4 cyfry i zapisywal do pamieci (zeby sie puzniej dalo tez te wpisy kasowac) wiem ze chaotycznie pisze, ale jestes w desperacji moze ktos pomoze ?

    To jest czesc programu ktory by pobieral cyfry i sprawdzal z zapisanymi a jezeli by sie zgadzal zapalala by sie zielona dioda i uzbrajal alarm badz rozbrajal, tylko ja mam ta czesc z wpisywaniem hasla do pamieci ;/ Program mozliwie jak najprostrzy a wszystkie inne szczegoly dowolny

    chcialbym zeby ktos pokazal mi jak mozna napisac taki program w asemblerze (zrodlo)
    wszystko dowolne mikrokontroler ma byc z rodziny 8051
    do pamieci takiej gdzie bedziemy mogli wpisywac odczytywac i kasowac(reszta dowolna)

    kurde jeszcze z tym nie ruszylem i nie wiem jak sie za to wziasc :/ prosze o szybka pomoc

    Edit znalazlem cos na ten temat ale sam nie wiem czy to jest to czego szukam bo troszke tego kodu nie rozumiem wklejam go ponizej:

    Code:

    $mod51

     PILOT equ P3.2
     ALARM equ P3.3
     LED   equ P3.4
     
     LCD_D7 equ P2.0
     LCD_D6 equ P2.1
     LCD_D5 equ P2.2
     LCD_D4 equ p2.3
     LCD_RS equ P2.4
     LCD_E  equ P2.5
     SCL    equ P2.6
     SDA    equ P2.7

     CZUJ0 equ P1.3
     CZUJ1 equ P1.4
     CZUJ2 equ P1.5
     CZUJ3 equ P1.6

     KOL1   equ P0.0
     KOL2   equ P0.1
     KOL3   equ P0.2
     POZ1   equ P0.5
     POZ2   equ P0.4
     POZ3   equ P0.3
     POZ4   equ P0.6
     Zaplon equ P0.7
     Adres  equ 50h
     Bajt   equ 51h
     Godz   equ 52h
     Minu   equ 53h
     Status equ 54h


    org 0h
     clr Zaplon
     clr LED
     lcall WAIT2
     lcall LCD_INIT
     ;powitanie
     ;czyszcenie LCD
     clr C
     mov A,#01h   
     call LCD_WRITE
     lcall WAIT
     ;W->LCD
     setb C
     mov A,#57h
     lcall LCD_WRITE
     ;I->LCD
     setb C
     mov A,#49h
     lcall LCD_WRITE
     ;T->LCD
     setb C
     mov A,#54h
     lcall LCD_WRITE
     ;A->LCD
     setb C
     mov A,#41h
     lcall LCD_WRITE
     ;M->LCD
     setb C
     mov A,#4Dh
     lcall LCD_WRITE
     lcall WAIT2
     ;ustawianie czasu

    return:
     ;czyszczenie LCD
     clr C
     mov A,#01h   
     call LCD_WRITE
     lcall WAIT
     ;GG->LCD
     setb C
     mov A,#47h
     lcall LCD_WRITE
     setb C
     mov A,#47h
     lcall LCD_WRITE
     ;:->LCD
     setb C
     mov A,#3Ah
     lcall LCD_WRITE
     ;MM->LCD
     setb C
     mov A,#4Dh
     lcall LCD_WRITE
     setb C
     mov A,#4Dh
     lcall LCD_WRITE
     ;spacja->LCD
     setb C
     mov A,#20h
     lcall LCD_WRITE
     lcall WPISZ

     ;pobieranie czasu do zapisu
     ;KEY->x10Godz
     lcall WAIT2
     lcall KEY_READ
     mov R3,A
     add A,#30h
     setb C
     lcall LCD_WRITE
     lcall WAIT2
     ;KEY->x1Godz
     lcall KEY_READ
     mov R4,A
     add A,#30h
     setb C
     lcall LCD_WRITE
     ;:->LCD
     setb C
     mov A,#3Ah
     lcall LCD_WRITE
     lcall WAIT2
     ;KEY->x10Minu
     lcall KEY_READ
     mov R5,A
     add A,#30h
     setb C
     lcall LCD_WRITE
     lcall WAIT2
     ;KEY->x1Minu
     lcall KEY_READ
     mov R6,A
     add A,#30h
     setb C
     lcall LCD_WRITE
     lcall ok_  ;OK?->LCD
     lcall WAIT2
     ;KEY->OK
     lcall KEY_READ
     cjne A,#0Ch,return

     ;zatrzymanie zegara
     mov Bajt,#80h
     mov Adres,#00h
     lcall TIME_S
     lcall WAIT

     ;zapis czasu
     mov A,R3
     swap A
     add A,R4
     mov Godz,A
     mov Bajt,A
     mov Adres,#04h
     lcall TIME_S
     lcall WAIT
     mov A,R5
     swap A
     add A,R6
     mov Minu,A
     mov Bajt,A
     mov Adres,#03h
     lcall TIME_S
     lcall WAIT

     ;uruchomienie zegara
     mov Bajt,#00h
     mov Adres,#00h
     lcall TIME_S
     lcall WAIT
     ljmp close

    kod:
     ;wyczyść LCD
     clr C
     mov A,#01h   
     call LCD_WRITE
     ;K->LCD
     setb C
     mov A,#4Bh
     lcall LCD_WRITE
     ;O->LCD
     setb C
     mov A,#4Fh
     lcall LCD_WRITE
     ;D->LCD
     setb C
     mov A,#44h
     lcall LCD_WRITE
     ;:->LCD
     setb C
     mov A,#3Ah
     lcall LCD_WRITE
     lcall WAIT2
     
     ;wprowadzanie kodu
     ;pierwsza cyfra
     lcall KEY_READ
     mov R3,A
     mov A,#2Ah
     setb C
     lcall LCD_WRITE
     lcall WAIT2
     ;druga cyfra
     lcall KEY_READ
     mov R4,A
     mov A,#2Ah
     setb C
     lcall LCD_WRITE
     lcall WAIT2
     ;trzecia cyfra
     lcall KEY_READ
     mov R5,A
     mov A,#2Ah
     setb C
     lcall LCD_WRITE
     lcall WAIT2
     ;czwarta cyfra
     lcall KEY_READ
     mov R6,A
     mov A,#2Ah
     setb C
     lcall LCD_WRITE
     lcall WAIT2
     cjne R3,#02h,open ;pierwsza=2?
     cjne R4,#07h,open ;druga=7?
     mov A,R5
     swap A
     add A,R6
     cjne A,Minu,open  ;trzecia i czawarta=Minu??
     ljmp off

    open:
     clr KOL3
     jnb PILOT,close
     lcall TIME
     lcall TEST2
     lcall TEST3
     JNB POZ4,kod   ;wprowadzić kod??
     ljmp open

    close:
     mov A,#01h  ;wygaś LCD 
     call LCD_WRITE
     lcall WAIT
    close1:
     clr LED
     clr Zaplon
     clr C
     jb PILOT,open
     lcall TEST1
     lcall TEST2
     lcall WAIT2
     ljmp close1

    off:             ;alarm rozbrojony
     setb LED
     setb Zaplon
     jnb PILOT,close
     lcall TIME
     lcall TEST3
     ljmp off

    ;**************************************
    ;procedury
    ;**************************************
    ;LCD
    ;**********
    LCD_INIT:
     clr LCD_E
     clr LCD_RS
     clr LCD_D7
     clr LCD_D6
     setb LCD_D5
     setb LCD_D4
     call LCD_ENABLE
     call LCD_ENABLE
     call LCD_ENABLE
     clr LCD_D4
     call LCD_ENABLE
     mov A,#28h
     call LCD_WRITE
     mov A,#08h
     call LCD_WRITE
     mov A,#0Ch   ;1
     call LCD_WRITE
     mov A,#01h   
     call LCD_WRITE
     mov A,#07h
     call LCD_WRITE
     ret
     
    LCD_WRITE:
     mov LCD_RS,C
     rlc A
     mov LCD_D7,C
     rlc A
     mov LCD_D6,C
     rlc A
     mov LCD_D5,C
     rlc A
     mov LCD_D4,C
     call LCD_ENABLE
     rlc A
     mov LCD_D7,C
     rlc A
     mov LCD_D6,C
     rlc A
     mov LCD_D5,C
     rlc A
     mov LCD_D4,C
     call LCD_ENABLE
     ret

    LCD_ENABLE:
     call WAIT
     setb LCD_E
     call WAIT
     clr LCD_E
     call WAIT
     ret
    ;****
    WPISZ:
     ;W->LCD
     setb C
     mov A,#57h
     lcall LCD_WRITE
     ;P->LCD
     setb C
     mov A,#50h
     lcall LCD_WRITE
     ;I->LCD
     setb C
     mov A,#49h
     lcall LCD_WRITE
     ;S->LCD
     setb C
     mov A,#53h
     lcall LCD_WRITE
     ;Z->LCD
     setb C
     mov A,#5Ah
     lcall LCD_WRITE
     ;druga linia LCD
     clr C
     mov A,#0C0h   
     call LCD_WRITE
     ret


    ok_:
     ;spacja->LCD
     setb C
     mov A,#20h
     lcall LCD_WRITE
     ;O->LCD
     setb C
     mov A,#4Fh
     lcall LCD_WRITE
     ;K->LCD
     setb C
     mov A,#4Bh   
     call LCD_WRITE
     ;?->LCD
     setb C
     mov A,#3Fh   
     call LCD_WRITE
     ret

    ;***********
    ;opoznienia
    ;***********
    WAIT:         
     mov R1,#01       
     wewnetrzna_petelka:
      mov R2,#0         
      djnz R2,$       
      djnz R1,wewnetrzna_petelka;
     ret             
    WAIT1:         
     mov R1,#200       
     wewnetrzna_petelka1:
      mov R2,#0           
      djnz R2,$       
     djnz R1,wewnetrzna_petelka1
     ret
    WAIT2:     
     mov R0,#15
     wewpet1:   
      mov R1,#200       
      wewnetrzna_petelka2:
        mov R2,#0           
        djnz R2,$       
      djnz R1,wewnetrzna_petelka2
     djnz R0,wewpet1
     ret
    ;**************
    ;PCF8583
    ;*************
    ;wyświetlenie czasu na LCD
    ;************ 
    TIME:
     ;wyczyść LCD
     clr C
     mov A,#01h   
     call LCD_WRITE
     ;odczyt godzin
     mov Adres,#04h
     lcall TIME_R
     mov Godz,A
     ;odczyt minut
     mov Adres,#03h
     lcall TIME_R
     mov Minu,A
     ;wyświetlenie x10G
     mov A,Godz
     swap A
     anl A,#03h
     add A,#30h
     setb C
     lcall LCD_WRITE
     ;wyświetlenie x1G
     mov A,Godz
     anl A,#0Fh
     add A,#30h
     setb C
     lcall LCD_WRITE
     ;:->LCD
     setb C
     mov A,#3Ah
     lcall LCD_WRITE
     ;wyświetlenie x10M
     mov A,Minu
     swap A
     anl A,#0Fh
     add A,#30h
     setb C
     lcall LCD_WRITE
     ;wyświetlenie x1M
     mov A,Minu
     anl A,#0Fh
     add A,#30h
     setb C
     lcall LCD_WRITE
     lcall WAIT1
     lcall WAIT1
     lcall WAIT2
     lcall WAIT2
    ret

    ;**************
    ;odczyt dowolnej komorki PCF8583 Adres=adres A=dana
    ;************   
    TIME_R:
     CALL I2C_Start ;
     JC  NoACK1 ; błąd 
     MOV  A,#0A0h ; przygotowanie adresu  (do zapisu)
     CALL I2C_WriteByte ; zaadresowanie kości [1010]-[0,0,A0]-[R=1/W=0]
     JC  NoACK1 ; 
     MOV  A,Adres ; 'Adres' - komórka do odczytania
     CALL I2C_WriteByte ; wysłanie adresu odczytywanej komórki
     JC  NoACK1 ; 
     CALL I2C_Start ;
     JC  NoACK1 ; 
     MOV  A,#0A1h ; przygotowanie adresu kości  (do odczytu)
     CALL I2C_WriteByte ; zaadresowanie [1010]-[0,0,A0]-[R=1/W=0]
     JC  NoACK1 ; 
     CALL I2C_ReadByte ; odczytanie wskazanej komórki
     CALL I2C_WriteNACK ; potwierdzenie NACK
     CLR  C ; CY=0 - odczyt  pomyślny
    NoACK1:  JMP  I2C_Stop ; 
     ret 

    ;*****************
    ;zapis komorki PCF8583 Adres=adres Bajt=dana
    ;*************
    TIME_S:
     CALL I2C_Start ; 
     JC  NoACK2 ; błąd 
     MOV  A,#0A0h ; przygotowanie adresu 
     CALL I2C_WriteByte ; zaadresowanie [101000]-[0]-[R=1/W=0]
     JC  NoACK2 ; 
     MOV  A,Adres ; 'Adres' - komórka do zapisania
     CALL I2C_WriteByte ; wysłanie adresu komórki do zapisania
     JC  NoACK2 ; 
     MOV  A,Bajt ; zapisanie pod wskazany adres
     CALL I2C_WriteByte ; zapisanie 
     NoACK2:  JMP  I2C_Stop
     ret
    ;****************
    ;sprawdzanie czujników
    ;****************
    TEST1:
     jb CZUJ1,pomin1
     clr ALARM
     lcall WAIT1
     setb ALARM
     pomin1:
     ret

    TEST2:
     jb CZUJ2,pomin2
     clr ALARM
     lcall WAIT1
     setb ALARM
     pomin2:
     ret

    TEST3:
     jb CZUJ3,pomin3
     lcall WAIT2  ;zwłoka na np. ucieczkę
     lcall WAIT2
     lcall WAIT2
     clr ALARM
     lcall WAIT1
     setb ALARM
     clr Zaplon
     pomin3:
     ret

    $include(key.h)
    $include(i2clib.h)
    end
    Czy Twoje urządzenia IoT są bezpieczne? [Webinar 22.06.2021, g.9.00]. Zarejestruj się za darmo
  • Computer ControlsComputer Controls
  • Level 14  
    Jak się za cos zabierasz to musisz wiedzieć jak to ma działać.
    Jak wygląda klawiatura?
    Do jakiej pamięci zapisywać?- wewnętrznej, zewnętrznej, jeśli zewnętrzna to jaki interfejs.... to tak na początek:)
  • Computer ControlsComputer Controls
  • Level 10  
    Code:
    KEY_READ: 
    
             SETB      KOL1                         
             SETB      KOL2
             SETB      KOL3
             CLR       KOL1
             lcall WAIT
             JNB       POZ1,KLAW_7           
             JNB       POZ2,KLAW_4
             JNB       POZ3,KLAW_1
             JNB       POZ4,KLAW_EC
             SETB      KOL1
             CLR       KOL2
             lcall WAIT
             JNB       POZ1,KLAW_8
             JNB       POZ2,KLAW_5
             JNB       POZ3,KLAW_2
             JNB       POZ4,KLAW_0
             SETB      KOL2
             CLR       KOL3
             lcall WAIT
             JNB       POZ1,KLAW_9
             JNB       POZ2,KLAW_6
             JNB       POZ3,KLAW_3
             JNB       POZ4,KLAW_OK
        LJMP       KEY_READ
       
    KLAW_1:  mov   A,#01h
             ret         
    KLAW_2:  mov   A,#02h
             ret
    KLAW_3:  mov   A,#03h
             ret
    KLAW_4:  mov   A,#04h
             ret
    KLAW_5:  mov   A,#05h
             ret
    KLAW_6:  mov   A,#06h
             ret
    KLAW_7:  mov   A,#07h
             ret
    KLAW_8:  mov   A,#08h
             ret
    KLAW_9:  MOV   A,#09h
             ret
    KLAW_0:  MOV   A,#00h
             ret
    KLAW_EC: MOV   A,#0Bh
             ret
    KLAW_OK: MOV   A,#0Ch
             ret



    masz moze pojecie do czego program zamieszcozny wyzej sluzy ?
  • Level 14  
    to jest odczyt klawiatury w podprogramie
  • Level 14  
    to obsługa zegara zrobionego na pcf83..+ wyświtlacz ze strownikiem hd47... no i klawiatura jaaś chyba też tam jest po trzeba zegarek ustawić
pcbway logo