logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

q4q 14 Lis 2007 15:33 2246 5
REKLAMA
  • #1 4480154
    q4q
    Poziom 11  
    Posty: 5
    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:

    
    $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
    
  • REKLAMA
  • #2 4480278
    romsik
    Poziom 15  
    Posty: 116
    Pomógł: 5
    Ocena: 8
    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:)
  • REKLAMA
  • #3 4480354
    q4q
    Poziom 11  
    Posty: 5
    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 ?
  • REKLAMA
  • #4 4480534
    romsik
    Poziom 15  
    Posty: 116
    Pomógł: 5
    Ocena: 8
    to jest odczyt klawiatury w podprogramie
  • REKLAMA
  • #5 4480536
    q4q
    Poziom 11  
    Posty: 5
    a ten powyzej ??
  • #6 4480641
    romsik
    Poziom 15  
    Posty: 116
    Pomógł: 5
    Ocena: 8
    to obsługa zegara zrobionego na pcf83..+ wyświtlacz ze strownikiem hd47... no i klawiatura jaaś chyba też tam jest po trzeba zegarek ustawić
REKLAMA