;=======================================
;      TUBITAK-MAM  20.07.2001
;	     ORTEM
;        GUVENLİK SİSTEMİ
;         AFARUK-HALUK 
;=======================================

;--------------------------------------------------------------------
;RAM PAYLASIMI:
;--------------------------------------------------------------------
;0H-20H  Ozel saklayicilar
;20H-2FH Bit adreslenebilir bolge
;30H-39H Degiskenlerin oldugu alan...
;60H-66H Degiskenlerin oldugu alan...
;40H-59H Bos alan...................(6 byte)
;5BH-5FH Bos alan...................(6 byte)
;60H-7FH Yigin icin ayrilmis alan
;--------------------------------------------------------------------

;--- SMART KARTTAN OKUNAN BILGILERIN AKTARILDIĞI HAFIZA ADRESLERİ ---

	ID_NO_H_ADRES		EQU	030H
	ID_NO_L_ADRES   	EQU	031H

	SIFRE_H_ADRES   	EQU	032H
	SIFRE_L_ADRES   	EQU	033H

	GUVEN_PAR_H_ADRES	EQU	034H
	GUVEN_PAR_L_ADRES   	EQU	035H

	SISTEM_NO_H		DATA	021H
	SISTEM_NO_L		DATA	022H
	ID_N0_TUT_H		DATA	023H
	ID_N0_TUT_L		DATA	024H
	IPTAL_EDILMIS_VARMI	DATA	025H

	ID_NO_H			DATA	030H
	ID_NO_L			DATA	031H

	SIFRE_H			DATA	032H
	SIFRE_L			DATA	033H

	GUVEN_PAR_H		DATA	034H
	GUVEN_PAR_L		DATA	035H
	
	EEPROM_YAZ_VERI_H	DATA	036H	
	EEPROM_YAZ_VERI_L	DATA	037H
	EEPROM_ADRES		DATA	038H
	EEPROM_SECIMI		DATA	039H

	SIFRE_DEGIS_BELIRLE	DATA	060H				
	HATA_KONTROL		DATA	061H

	EEPROMDAN_GELEN_VERI_H  DATA    062H 
	EEPROMDAN_GELEN_VERI_L	DATA    063H

	GUV_PAR_BUL_ADRES	DATA	064H
	SIFRE_BUL_ADRES		DATA	065H

	GIRILEN_KARAKTER_SAY	DATA	066H
	KULLANICI_SAYISI	DATA	067H
	SISTEM_KART_ONAY	DATA	068H
;---------- SMART KARTTAKİ  VERİLERİN ADRES BİLGİLERİ---------------

	ID_NO_ADRES		EQU	000H	
	SIFRE_ADRES		EQU	001H
	GUVEN_PAR_ADRES		EQU	002H
	SISTEM_NO_ADRES_SMART   EQU	03H		

;-------- SMART KART VE DAHILI SERI EEPROM UN BAĞLANTILARI ----------
	DIO			BIT	p1.6
	CS_S			BIT	p1.5    ; SMART KART IN CS UCU  
	CS_D			BIT  	P1.7	; DAHİLİ EEPROM CS UCU
	SK			BIT	p1.4
;--------------------------------------------------------------------

	SIFRE_BASLANGICI  EQU	050H 

	B_LED		  	BIT	P1.0
	B_BUZZER	  	BIT	P1.1
	B_ROLE			BIT	P1.2
	B_KART_TAKILI_MI 	BIT	P1.3
;--------------------------------------------------------------------
	GENEL_YER_ADRES		EQU	040H
	KULLANICI_SAY_ADRES	EQU   	07H
	SISTEM_NO_ADRES_DAHILI  EQU	06H
	

		CSEG 	AT 	000H		;RESET VECTOR
		JMP	PROGRAM_BAS

			

		CSEG	AT	0016H
PROGRAM_BAS:
		MOV	SIFRE_DEGIS_BELIRLE,#0	
		CLR	CS_S	
		CLR	CS_D	
		SETB	B_LED
		SETB	B_BUZZER
		CLR	B_ROLE

DONGU_KART_VAR_MI:		
		MOV 	C, B_KART_TAKILI_MI
		JC 	DONGU_KART_VAR_MI		; KART	TAKILI MI?

		LCALL SISTEM_NO_KARSILASTIR	; SISTEM NO KONTROL EDILIR
		MOV	R2,HATA_KONTROL 
		CJNE	R2, #001, HATA_KART  ; KARSILASTIRMADA BIR HATA VAR MI?
		
		LCALL	SMART_KART_OKU		; SMART KARTTAKI BILGILER OKUNUR	
		
		MOV 	EEPROMDAN_GELEN_VERI_H, #040H  	    ; DAHİLİ EEPROM DAN OKUNAN 7. ADRES
  		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		MOV	EEPROM_ADRES, #KULLANICI_SAY_ADRES  ; KAYITLI SAYISININ KAYITLI OLDUGU ADRES
		MOV	EEPROM_SECIMI,#001H   	; DAHİLİ EEPROM
		CALL	CHIP_OKU   

		MOV	EEPROM_ADRES,#008h   	; ILK KULLANICININ KAYITLI OLDUĞU ADRES

		MOV	KULLANICI_SAYISI,041H
		MOV	R7,041H			; DONGU ICIN SAYAC KURULDU ( KULANICI SAYISI ).
		INC	R7
DONGU_IDNO:
		MOV 	EEPROMDAN_GELEN_VERI_H, #040H
		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		MOV	EEPROM_SECIMI,#001H
		CALL	CHIP_OKU   

		MOV 	A,040H
		CLR	C	
		SUBB 	A, ID_NO_H

		JNZ  	DIGERI_IDNO	; OKUNAN ID_NO (MSB) İLE AYNI MI?

		MOV 	A,041H
		CLR	C	
		SUBB 	A, ID_NO_L 

		JNZ  	DIGERI_IDNO 	; OKUNAN ID_NO (LSB) İLE AYNI MI?
					; DEĞİLSE DİĞER KULLANICININ ID_NO SUNA GEÇ
		JMP 	IDNO_DOGRU
		
DIGERI_IDNO:
		INC 	EEPROM_ADRES	; İKİ KULLANICININ PARAMETRELERİ
		INC 	EEPROM_ADRES	; ARASINDAKİ UZAKLIK 3 ADRES
		INC 	EEPROM_ADRES
		DJNZ 	R7, DONGU_IDNO		

;-------------------------------------------------------------------		
; KARTTAKİ VERİLERDE BİR HATA OLDUĞUNDA BURASI İŞLER

HATA_KART:
DON_HATA_KART:		
		CALL	BUZZER
		CALL	BEKLE
		CALL	BUZZER
		CALL	BUZZER
		CALL	BEKLE
		CALL	BUZZER

		MOV	C, B_KART_TAKILI_MI       ; kart çıkarıldı mı?
		JNC	DON_HATA_KART	
		JMP	PROGRAM_BAS

;-------------------------------------------------------------------		

IDNO_DOGRU:
		

		INC 	EEPROM_ADRES	; BULUNAN KAYDIN GÜVENLİK PARAMETRESİ 
		INC 	EEPROM_ADRES	; 2 ADRES SONRADIR.	
		
		MOV	GUV_PAR_BUL_ADRES,EEPROM_ADRES		

		MOV 	EEPROMDAN_GELEN_VERI_H, #040H
		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		MOV	EEPROM_SECIMI,#001H	; PARAMETRESİ 40H-41H ADRESİNE AKTARILDI.
		CALL	CHIP_OKU   

;-------------------------------------------------------------------

		MOV 	A,040H
		CLR	C	
		SUBB 	A,GUVEN_PAR_H

		JNZ  	HATA_KART		; GÜVEN_PAR (MSB) LAR AYNI MI?

		MOV 	A,041H
		CLR	C	
		SUBB 	A,GUVEN_PAR_L

		JNZ  	HATA_KART	 	; GÜVEN_PAR (LSB) LAR AYNI MI?					

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+   CHIP KARTTAKİ ŞİFRE İLE DAHİLİ EEPROM DAKİ ŞİFRE KONTROL EDİLİYOR  +
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  

		DEC	EEPROM_ADRES		; YUKARIDA GUVENLIK PARAMETRESINDEKI

		MOV	SIFRE_BUL_ADRES,EEPROM_ADRES	; B NIN İÇERİĞİNİN 1 AŞAĞISI ŞİFRE ADRESİDİR.
		MOV 	EEPROMDAN_GELEN_VERI_H, #040H
		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		mov	EEPROM_SECIMI,#001H	
		CALL	CHIP_OKU   
		
		MOV	A,040H					
		CLR	C	
		SUBB	A, SIFRE_H

		JNZ	HATA_KART		; OKUNAN SIFRE (MSB) İLE AYNI MI?

		MOV	A,041H
		CLR	C	
		SUBB	A, SIFRE_L

		JNZ	HATA_KART		; OKUNAN SIFRE (LSB) İLE AYNI MI?
SIFRE_DOGRU:

;**************************************************************
; DAHİLİ EEPROM UM 0. BYTE INDAKİ 0.BİT KEYPAD KONTROL BİTİDİR.
;**************************************************************

		MOV	EEPROM_ADRES,#00H
		MOV 	EEPROMDAN_GELEN_VERI_H, #040H
		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		MOV	EEPROM_SECIMI,#001H
		CALL	CHIP_OKU   		

		MOV	A,041H
		RRC	A
		JC	KEYPAD

		MOV	C,B_KART_TAKILI_MI	; kart yerinde mı?
		JNC	ASAGI_1		 
		CALL	BUZZER		;YERİNDE DEĞİLSE
		CALL	BUZZER
		CALL	BUZZER
		LJMP	PROGRAM_BAS		
ASAGI_1:		
		CALL	ISLEM_YAP	; KEYPAD PASİF OLDUĞUNDAN
					; İŞLEMLER YAPILIR.
		LCALL	PROGRAM_BAS

;---------------------- KEYPAD ------------------------------

KEYPAD:
		MOV	GIRILEN_KARAKTER_SAY, #0     	; KAÇHANE ŞİFRE GİRDİĞİNİ ANLAMAK İÇİN   		
KEYPAD1:
		MOV	EEPROM_ADRES, #SIFRE_BASLANGICI   	; ŞİFRENİN SAKLANACAĞI HAFIZA ADRESİ
KEYPAD_DON:
	         
		MOV	C, B_KART_TAKILI_MI        ; kart yerinde mı?
		JNC	ASAGI_2
		CALL	BUZZER	 	           ;YERİNDE DEĞİLSE
		CALL	BUZZER
		CALL	BUZZER
		LJMP	PROGRAM_BAS		
ASAGI_2:		

; 1. SATIR TARANIYOR

		CLR   	P3.0
		SETB	P3.1
		SETB	P3.2
		SETB  	P3.3
		JMP 	SATIR1
		
; 2. SATIR TARANIYOR
SAT2:
		SETB  	P3.0
		CLR  	P3.1
		SETB  	P3.2
		SETB  	P3.3	
		JMP SATIR2
		
; 3. SATIR TARANIYOR
SAT3:
		SETB  	P3.0
		SETB  	P3.1
		CLR  	P3.2
		SETB  	P3.3
		JMP 	SATIR3

; 4. SATIR TARANIYOR
SAT4:
		SETB  	P3.0
		SETB  	P3.1
		SETB  	P3.2
		CLR   	P3.3	
		JMP 	SATIR4
		
		JMP 	KEYPAD_DON	
		
;=================================
;     SATIR 1 KONTROL EDİLİYOR
;=================================

SATIR1:	

; TUŞ 1 KONTROL

		MOV 	C, P3.4   ;0
		JC  	TUS2 
		MOV 	C, P3.5   ;1
		JNC 	TUS2
		MOV 	C, P3.7   ;1
		JNC 	TUS2

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		
		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #01h
		INC	EEPROM_ADRES
		INC 	GIRILEN_KARAKTER_SAY
;TUŞ 2 KONTROL

TUS2:
		MOV 	C, P3.4   ; 1
		JNC  	TUS3 
		MOV 	C, P3.5   ;0
		JC 	TUS3
		MOV 	C, P3.7   ;1
		JNC 	TUS3               

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		

		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #02h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY
;TUŞ 3 KONTROL

TUS3:
		MOV 	C, P3.4   ; 1
		JNC  	SAT2 
		MOV 	C, P3.5   ;1
		JNC 	SAT2
		MOV 	C, P3.7   ;0
		JC 	SAT2

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		

		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #03h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY
		LJMP 	SAT2
;=================================
;     SATIR 2 KONTROL EDİLİYOR
;=================================

SATIR2:	
; TUŞ 4 KONTROL
		MOV	C, P3.4   ; 0
		JC  	TUS5 
		MOV 	C, P3.5   ;1
		JNC 	TUS5
		MOV 	C, P3.7   ;1
		JNC 	TUS5

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		

		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #04h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY
;TUŞ 5 KONTROL

TUS5:
		MOV 	C, P3.4   ; 1
		JNC  	TUS6 
		MOV 	C, P3.5   ;0
		JC 	TUS6
		MOV 	C, P3.7   ;1
		JNC 	TUS6             

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		

		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #05h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY
;TUŞ 6 KONTROL

TUS6:
 		MOV 	C, P3.4   ; 1
		JNC 	SAT_3   
		MOV 	C, P3.5   ;1
		JNC 	SAT_3
		MOV 	C, P3.7   ;0
		JC 	SAT_3

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		
	
		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #06h		      
		INC 	EEPROM_ADRES		       
		INC	GIRILEN_KARAKTER_SAY
SAT_3:
		LJMP 	SAT3

;=================================
;     SATIR 3 KONTROL EDİLİYOR
;=================================

SATIR3:	
; TUŞ 7 KONTROL

		MOV 	C, P3.4   ; 0
		JC  	TUS8 
		MOV 	C, P3.5   ;1
		JNC 	TUS8
		MOV 	C, P3.7   ;1
		JNC 	TUS8

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		
	
		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #07h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY
;TUŞ 8 KONTROL

TUS8:
		MOV 	C, P3.4   ; 1
		JNC  	TUS9 
		MOV 	C, P3.5   ;0
		JC 	TUS9
		MOV 	C, P3.7   ;1
		JNC 	TUS9

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		
	
		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #08h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY
;TUŞ 9 KONTROL
TUS9:
		MOV 	C, P3.4   ; 1
		JNC 	SAT_4  
		MOV 	C, P3.5   ;1
		JNC 	SAT_4
		MOV 	C, P3.7   ;0
		JC 	SAT_4

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		
		
		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #09h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY
SAT_4:
		LJMP 	SAT4

;=================================
;=     SATIR 4 KONTROL EDİLİYOR  =
;=================================

SATIR4:	
;TUS * KONTROL
TUSY:		                
		MOV 	C, P3.4   ; 0
		JC 	TUS_0  
		MOV 	C, P3.5   ; 1
		JNC 	TUS_0
		MOV 	C, P3.7   ; 1
		JNC 	TUS_0
		JMP	TUS_Y_ASAGI
TUS_0:
		LJMP	TUS0
TUS_Y_ASAGI:
		CALL	BUZZER				
		LCALL TUSBIRAKILDIMI			
		
		MOV	A,SISTEM_KART_ONAY				
		CLR	C
		SUBB	A,#2
		JNZ	ASA
		LJMP	KART_IPTAL_ET		
ASA:
		MOV	A,SIFRE_DEGIS_BELIRLE
		CJNE	A,#00H,TEKRAR__SIFRE_AL
		JMP	ASA1
TEKRAR__SIFRE_AL:
		LJMP	TEKRAR_SIFRE_AL
ASA1:	
		MOV	A,GIRILEN_KARAKTER_SAY
		CLR	C
		XRL	A,#07H	
		JZ	SIFREDEGIS
		LJMP	GIRILEN_SIFRE_HATALI

SIFREDEGIS:
		MOV	A,054H
		CLR	C
		SUBB 	A,#00H
		JNZ	GIRILEN_OPCODE_HATALI

		MOV	A,055H
		CLR	C
		SUBB 	A,#00H
		JNZ	GIRILEN_OPCODE_HATALI
		JMP	ASA2
GIRILEN_OPCODE_HATALI:		
		LJMP	GIRILEN_SIFRE_HATALI	
ASA2:
		MOV	A,056H
		CLR	C
		SUBB 	A,#00H
		JNZ	DIGER_OPCODE_KONTROL	
		JMP	DOGRU_OPCODE
DIGER_OPCODE_KONTROL:
		MOV	A,056H
		CLR	C
		SUBB 	A,#01H
		JNZ	GIRILEN_OPCODE_HATALI	

		CLR	B_LED
YENI_KART_DONGU:		
		MOV	C, B_KART_TAKILI_MI	        ; kart takılı mı?
		JNC 	YENI_KART_DONGU

		SETB	B_LED
YENI_KART_DONGU1:		
		MOV 	C, B_KART_TAKILI_MI	        ; kart takılı mı?
		JC 	YENI_KART_DONGU1
		CALL	BEKLE

		MOV	EEPROM_ADRES,#00Ch   	; ILK KULLANICININ KAYITLI OLDUĞU ADRES
		MOV	R7,KULLANICI_SAYISI	; DONGU ICIN SAYAC KURULDU ( KULANICI SAYISI ).
		MOV	IPTAL_EDILMIS_VARMI,#01H
YENI_KART_DONGU_SIFRE:
		MOV 	EEPROMDAN_GELEN_VERI_H, #040H
		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		MOV	EEPROM_SECIMI,#001H
		CALL	CHIP_OKU   

		MOV 	A,040H
		CLR	C	
		SUBB 	A, #0
		JNZ  	YENI_KART_DONGU_SIFRE_DIGERI	; OKUNAN ID_NO (MSB) İLE AYNI MI?

		MOV 	A,041H
		CLR	C	
		SUBB 	A, #0
		JNZ  	YENI_KART_DONGU_SIFRE_DIGERI 	; OKUNAN ID_NO (LSB) İLE AYNI MI?
					; DEĞİLSE DİĞER KULLANICININ ID_NO SUNA GEÇ
		JMP 	YENI_KART_DONGU_SIFRE_DOGRU		
YENI_KART_DONGU_SIFRE_DIGERI:
		INC 	EEPROM_ADRES	; İKİ KULLANICININ PARAMETRELERİ
		INC 	EEPROM_ADRES	; ARASINDAKİ UZAKLIK 3 ADRES
		INC 	EEPROM_ADRES
		DJNZ 	R7, YENI_KART_DONGU_SIFRE
		MOV	IPTAL_EDILMIS_VARMI,#00H
YENI_KART_DONGU_SIFRE_DOGRU:
		
		CALL	EE_EWEN
		MOV	EEPROM_YAZ_VERI_H,#0B8H	
		MOV	EEPROM_YAZ_VERI_L,#0D4H	
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;DAHILI EEPROM A YENİ ŞİFRE YAZILIR

		INC	EEPROM_ADRES
		CALL	EE_EWEN
		MOV	EEPROM_YAZ_VERI_H,#0	
		MOV	EEPROM_YAZ_VERI_L,#0	
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;DAHILI EEPROM A GUVEN_PAR YAZILIR

		CLR	C
		MOV	A,IPTAL_EDILMIS_VARMI
		SUBB	A,#01H
		JZ	IPTAL_EDILMIS_VAR

		DEC	EEPROM_ADRES
		DEC	EEPROM_ADRES
		INC	KULLANICI_SAYISI
		INC	KULLANICI_SAYISI
; burada alt yordam çağrılacak dönüşüm ile ilgili 		
		CALL	EE_EWEN		
		CALL	HEX_TO_DECIMAL

;		MOV	EEPROM_YAZ_VERI_H,#0	
;		MOV	EEPROM_YAZ_VERI_L,KULLANICI_SAYISI
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;DAHILI EEPROM A ID_NO YAZILIR
		DEC	KULLANICI_SAYISI
		DEC	KULLANICI_SAYISI
IPTAL_EDILMIS_VAR:
		CLR	C
		MOV	A,IPTAL_EDILMIS_VARMI
		SUBB	A,#01H
		JNZ	ID_NO_TAMAM
		DEC	EEPROM_ADRES
		DEC	EEPROM_ADRES
		MOV 	EEPROMDAN_GELEN_VERI_H, #040H
		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		MOV	EEPROM_SECIMI,#001H
		CALL	CHIP_OKU   
		MOV	ID_N0_TUT_H,040H
		MOV	ID_N0_TUT_L,041H
ID_NO_TAMAM:

		CALL	EE_EWEN
		MOV	EEPROM_YAZ_VERI_H,#0FFH	
		MOV	EEPROM_YAZ_VERI_L,#0FFH
		MOV	EEPROM_ADRES,#09H
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;SMART KART EEPROM A  


		CALL	EE_EWEN
;		CALL	HEX_TO_DECIMAL
		MOV	EEPROM_YAZ_VERI_H,ID_N0_TUT_H  ;#00H	
		MOV	EEPROM_YAZ_VERI_L,ID_N0_TUT_L  ;041H
		MOV	EEPROM_ADRES,#00H
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;SMART KART EEPROM A  ID_NO YAZILIR

		CALL	EE_EWEN
		MOV	EEPROM_YAZ_VERI_H,#0B8H	
		MOV	EEPROM_YAZ_VERI_L,#0D4H	
		MOV	EEPROM_ADRES,#SIFRE_ADRES
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;SMART KART EEPROM A  ŞİFRE YAZILIR

		CALL	EE_EWEN
		MOV	EEPROM_YAZ_VERI_H,#00H	
		MOV	EEPROM_YAZ_VERI_L,#00H	
		MOV	EEPROM_ADRES,#GUVEN_PAR_ADRES
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;SMART KART EEPROM A GUVEN_PAR YAZILIR

		CALL	EE_EWEN
		MOV	EEPROM_YAZ_VERI_H,SISTEM_NO_H	
		MOV	EEPROM_YAZ_VERI_L,SISTEM_NO_L
		MOV	EEPROM_ADRES,#SISTEM_NO_ADRES_SMART
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;SMART KART EEPROM A SISTEM NO YAZILIR

		
		CLR	C
		MOV	A,IPTAL_EDILMIS_VARMI
		SUBB	A,#01H
		JZ	KULLANICI_SAYISI_ARTTIRMA

		INC	KULLANICI_SAYISI
		CALL	EE_EWEN
		MOV	EEPROM_YAZ_VERI_H,#0
		MOV	EEPROM_YAZ_VERI_L,KULLANICI_SAYISI
		MOV	EEPROM_ADRES,#KULLANICI_SAY_ADRES
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;DAHILI EEPROM A KULLANICI SAYISI YAZILIR
		DEC	KULLANICI_SAYISI
KULLANICI_SAYISI_ARTTIRMA:
		CALL	YESIL_LED_YAK
		LJMP	PROGRAM_BAS
								
;----------------------------------
GIRILEN_SIFRE__HATALI:		
		LJMP	GIRILEN_SIFRE_HATALI	

DOGRU_OPCODE:
		CALL	BUZZER
		CALL	BUZZER
		CALL	BUZZER
		CALL	BUZZER
		CALL	BUZZER

		MOV 	A,051h
		MOV 	B,A
		MOV 	A,050h
		CALL 	DONUSTUR			
		XRL	B,#0A9H
		MOV	A,B
		CJNE	A,SIFRE_H,SIFRE_DEGIS__HATA
		JMP	DOGRU_OPCODE_ASAGI	
SIFRE_DEGIS__HATA:
		LJMP	SIFRE_DEGIS_HATA
DOGRU_OPCODE_ASAGI:
		MOV 	A,053h
		MOV 	B,A
		MOV 	A,052h
		CALL 	DONUSTUR			
		XRL	B,#0C5H
		MOV	A,B
		CJNE	A,SIFRE_L,SIFRE_DEGIS__HATA

		MOV	A,SISTEM_KART_ONAY				
		CLR	C
		SUBB	A,#1
		JZ	KART_IPTAL_NO_AL	

		MOV	SIFRE_DEGIS_BELIRLE,#001H		
		LJMP	KEYPAD
KART_IPTAL_NO_AL:
		MOV	SISTEM_KART_ONAY,#2	
		LJMP	KEYPAD
TEKRAR_SIFRE_AL:

		MOV	A,SIFRE_DEGIS_BELIRLE
		CJNE	A,#001H,YENI_SIFRE_ISLE
		
		MOV	040H,050H
		MOV	041H,051H
		MOV	042H,052H
		MOV	043H,053H
		
		CALL	BUZZER
		CALL	BUZZER
		
		MOV	SIFRE_DEGIS_BELIRLE,#002H				

		LJMP	KEYPAD
YENI_SIFRE_ISLE:

		MOV	A,050H
		CJNE	A,040H,SIFRE_DEGIS_HATA

		MOV	A,051H
		CJNE	A,041H,SIFRE_DEGIS_HATA

		MOV	A,052H
		CJNE	A,042H,SIFRE_DEGIS_HATA
		
		MOV	A,053H
		CJNE	A,043H,SIFRE_DEGIS_HATA

		CALL	EE_EWEN

	 	MOV	EEPROM_ADRES,SIFRE_BUL_ADRES		
		MOV 	A,051h
		MOV 	B,A
		MOV 	A,050h
		CALL 	DONUSTUR			
		XRL	B,#0A9H
		MOV	EEPROM_YAZ_VERI_H,B
				
		MOV 	A,053H
		MOV 	B,A
		MOV 	A,052h
		CALL 	DONUSTUR				
		XRL	B,#0C5H
		MOV	EEPROM_YAZ_VERI_L,B
	
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;DAHILI EEPROM A YENİ ŞİFRE YAZILIR
					
		CALL	EE_EWEN
	 	MOV	EEPROM_ADRES,#01H	
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;SMART KARTA A YENİ ŞİFRE YAZILIR

;		CLR	B_LED		;YEŞİL LED YANAR	
;SIFRE_DEGIS_DONGU:		
;		MOV C, B_KART_TAKILI_MI	        ; kart takılı mı?
;		JNC SIFRE_DEGIS_DONGU
		
;		SETB	B_LED		;YEŞİL LED SÖNER		
		CALL	YESIL_LED_YAK
		LJMP	PROGRAM_BAS	

SIFRE_DEGIS_HATA:
		CALL	BUZZER
		LJMP	KEYPAD

KART_IPTAL_ET:
		MOV 	A,051h
		MOV 	B,A
		MOV 	A,050h
		CALL 	DONUSTUR			
		MOV 	ID_NO_H,B       

		MOV 	A,053h
		MOV 	B,A
		MOV 	A,052h
		CALL 	DONUSTUR				
		MOV 	ID_NO_L,B        

		MOV	EEPROM_ADRES,#00Bh   	; ILK KULLANICININ KAYITLI OLDUĞU ADRES
		MOV	R7,KULLANICI_SAYISI	; DONGU ICIN SAYAC KURULDU ( KULANICI SAYISI ).
KART_IPTAL_DONGU_IDNO:
		MOV 	EEPROMDAN_GELEN_VERI_H, #040H
		MOV 	EEPROMDAN_GELEN_VERI_L, #041H
		MOV	EEPROM_SECIMI,#001H
		CALL	CHIP_OKU   

		MOV 	A,040H
		CLR	C	
		SUBB 	A, ID_NO_H
		JNZ  	KART_IPTAL_DIGERI_IDNO	; OKUNAN ID_NO (MSB) İLE AYNI MI?

		MOV 	A,041H
		CLR	C	
		SUBB 	A, ID_NO_L 
		JNZ  	KART_IPTAL_DIGERI_IDNO 	; OKUNAN ID_NO (LSB) İLE AYNI MI?
					; DEĞİLSE DİĞER KULLANICININ ID_NO SUNA GEÇ
		JMP 	KART_IPTAL_IDNO_DOGRU
		
KART_IPTAL_DIGERI_IDNO:
		INC 	EEPROM_ADRES	; İKİ KULLANICININ PARAMETRELERİ
		INC 	EEPROM_ADRES	; ARASINDAKİ UZAKLIK 3 ADRES
		INC 	EEPROM_ADRES
		DJNZ 	R7, KART_IPTAL_DONGU_IDNO		
		
		CALL	BUZZER
		CALL	BUZZER
		CALL	BUZZER
		CALL	BEKLE	
		CALL	BEKLE	
		CALL	BEKLE
		CALL	BUZZER
		CALL	BUZZER
		CALL	BUZZER

		LJMP	KEYPAD					
KART_IPTAL_IDNO_DOGRU:

		MOV	044H,EEPROM_ADRES
		MOV 	EEPROMDAN_GELEN_VERI_H, #042H
		MOV 	EEPROMDAN_GELEN_VERI_L, #043H
		MOV	EEPROM_SECIMI,#001H
		CALL	CHIP_OKU   

		MOV 	A,042H
		CLR	C	
		SUBB 	A, #0
		JNZ  	KART_IPTAL_DEVAM

		MOV 	A,043H
		CLR	C	
		SUBB 	A, #0
		JNZ  	KART_IPTAL_DEVAM

KART_AKTIF_DONGU:		
		CLR	B_LED
		MOV	C, B_KART_TAKILI_MI	        ; kart takılı mı?
		JNC 	KART_AKTIF_DONGU
KART_AKTIF_DONGU1:
		SETB	B_LED
		MOV 	C, B_KART_TAKILI_MI	        ; kart takılı mı?
		JC 	KART_AKTIF_DONGU1

		MOV   EEPROMDAN_GELEN_VERI_H,#ID_NO_H_ADRES
		MOV   EEPROMDAN_GELEN_VERI_L,#ID_NO_L_ADRES   ; SISTEM_NO AKTARILIR.
		MOV	EEPROM_ADRES,#ID_NO_ADRES 
		MOV	EEPROM_SECIMI,#000H
            CALL	CHIP_OKU	; ID_NO 030H VE 031h A AKATARILIR.

		MOV	A,040H
		CLR	C
		SUBB	A,ID_NO_H
		JNZ	KART_AKTIF_DONGU

		MOV	A,041H
		CLR	C
		SUBB	A,ID_NO_L
		JNZ	KART_AKTIF_DONGU

		CALL	EE_EWEN
		MOV	EEPROM_ADRES,044H
		MOV	EEPROM_YAZ_VERI_H,#0B8H	
		MOV	EEPROM_YAZ_VERI_L,#0D4H	
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;DAHILI EEPROM A YENİ ŞİFRE YAZILIR

		CALL	EE_EWEN
		MOV	EEPROM_ADRES,#SIFRE_ADRES
		MOV	EEPROM_YAZ_VERI_H,#0B8H	
		MOV	EEPROM_YAZ_VERI_L,#0D4H	
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;DAHILI EEPROM A YENİ ŞİFRE YAZILIR
		CALL	YESIL_LED_YAK
		LJMP	PROGRAM_BAS

KART_IPTAL_DEVAM:				
		CALL	EE_EWEN
		INC	EEPROM_ADRES
		MOV	EEPROM_YAZ_VERI_H,#0				
		MOV	EEPROM_YAZ_VERI_L,#0
	
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;DAHILI EEPROM A YENİ ŞİFRE YAZILIR

		CALL	YESIL_LED_YAK					
;		CLR	B_LED		;YEŞİL LED YANAR	
;KART_IPTAL__DONGU:		
;		MOV C, B_KART_TAKILI_MI	        ; kart takılı mı?
;		JNC KART_IPTAL__DONGU
		
;		SETB	B_LED		;YEŞİL LED SÖNER		
		LJMP	PROGRAM_BAS	
		
;--------------------------

;TUS 0 KONTROL

TUS0:		                
		MOV 	C, P3.4   ; 1
		JNC 	TUSD  
		MOV 	C, P3.5   ; 0
		JC 	TUSD
		MOV 	C, P3.7   ; 1
		JNC 	TUSD

		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		
	
		MOV	R0,EEPROM_ADRES		
		MOV 	@R0, #00h		      
		INC 	EEPROM_ADRES		       
		INC 	GIRILEN_KARAKTER_SAY

		LJMP	KEYPAD_DON			
;----------------------------------

TUSD:
; TUŞ # KONTROL

		MOV 	C, P3.4   ; 1
		JNC  	KEYPAD__DON 
		MOV 	C, P3.5   ;1
		JNC 	KEYPAD__DON 
		MOV 	C, P3.7   ;0
		JC 	KEYPAD__DON 
		JMP	ASAGI_DIYEZ
KEYPAD__DON :
		LJMP	KEYPAD_DON 

ASAGI_DIYEZ:
		MOV	A,SIFRE_DEGIS_BELIRLE
		CJNE	A,#0,KEYPAD__DON 
		MOV	A,SISTEM_KART_ONAY
		CJNE	A,#0,KEYPAD__DON


		CALL	BUZZER				
		LCALL 	TUSBIRAKILDIMI		
			
		MOV	C, B_KART_TAKILI_MI	        ; kart yerinde mı?
		JNC	ASAGI_DIYEZ1		 
		LJMP	PROGRAM_BAS		
ASAGI_DIYEZ1:		
		MOV	A,GIRILEN_KARAKTER_SAY
		CJNE  	A,#4, GIRILEN_SIFRE_HATALI    ; GİRİLEN ŞİFRE KARAKTERİ KONTROLÜ		
		MOV 	A,051h
		MOV 	B,A
		MOV 	A,050h

		CALL 	DONUSTUR			

		MOV 	A,SIFRE_H       ; CHİP KARTTAKİ ŞİFRE BİLGİSİ 
		XRL	A,#0A9H		; CHİP KARTTA KRİPTOLANMIŞ		
					; ŞİFRE (MSB) DEKRİPTO YAPILIYOR
		CLR	C
		SUBB 	A,B
		JNZ  	GIRILEN_SIFRE_HATALI

		MOV 	A,053h
		MOV 	B,A
		MOV 	A,052h
		CALL 	DONUSTUR
				
		MOV 	A,SIFRE_L       ; CHİP KARTTAKİ ŞİFRE BİLGİSİ 
		XRL	A,#0C5H		; CHİP KARTTA KRİPTOLANMIŞ									; ŞİFRE (LSB) DEKRİPTO YAPILIYOR
		CLR	C
		SUBB 	A,B
		JNZ  	GIRILEN_SIFRE_HATALI

		CALL	EE_EWEN
	 	MOV	EEPROM_ADRES,#02H		; VERİNİN SMART KARTTA YAZILACAĞI ADRES
		MOV	A,GUVEN_PAR_L	; GUVENLIK PARAMETRESİ BU ADRESTE	
		CLR	C
		ADD	A,#01H		
		MOV	EEPROM_YAZ_VERI_L,A
	
		MOV	A,GUVEN_PAR_H	
		ADDC	A,#0H
		MOV	EEPROM_YAZ_VERI_H,A
		MOV	EEPROM_SECIMI,#000H
		CALL	EE_WRITE	;SMART KARTA GUVEN_PAR YAZILIR

		CALL	EE_EWEN
	 	MOV	EEPROM_ADRES,GUV_PAR_BUL_ADRES	; VERİNİN DAHILI EEPROM A YAZILACAĞI ADRES
		MOV	A,GUVEN_PAR_L		        ; GUVENLIK PARAMETRESİ BU ADRESTE	
		CLR	C
		ADD	A,#01H		
		MOV	EEPROM_YAZ_VERI_L,A
	
		MOV	A,GUVEN_PAR_H	
		ADDC	A,#0H
		MOV	EEPROM_YAZ_VERI_H,A
		MOV	EEPROM_SECIMI,#001H
		CALL	EE_WRITE	;SMART KARTA GUVEN_PAR YAZILIR

		CALL	ISLEM_YAP
		
		LJMP    PROGRAM_BAS 

;ŞİFRE YANLIŞ GİRİLDİĞİNDE BURAYASI İŞLENİR.
GIRILEN_SIFRE_HATALI:		
		CALL	BUZZER
		CALL	BEKLE
		CALL	BUZZER
		CALL	BUZZER
		CALL	BEKLE
		CALL	BUZZER

		LJMP 	KEYPAD		; TEKRAR YENİ ŞİFRE GİRİLMESİ İSTENİR
;---------------------------------------------------



;		***********************************
;		*	     ALT PROGRAMLAR        *
;		***********************************

;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : CHIP_OKU
; AMAÇ       : SERI EEPROM DAN  BILGI OKUMAK 
; GIRISLER   : 1- EEPROM_SECIMI ( 001H --> DAHILI SERI EEPROM SEÇİLİR )
;   	               	        ( 000H --> SMART KART SEÇİLİR )
;	       2- EEPROM_ADRES  ( OKUNACAK VERININ ADRES ) 	
;	       3- EEPROMDAN_GELEN_VERI_H ( OKUNAN VERININ MSB SININ AKTARILACAĞI ADRES )
;	       4- EEPROMDAN_GELEN_VERI_L
; ÇAĞRIMLAR  : EE_EWEN, EE_READ
; DEĞİŞENLER : R2
;----------------------------------------------------------------

CHIP_OKU:
		CALL	EE_EWEN		
		CALL	EE_READ
	
		MOV	R2,EEPROM_SECIMI
		CJNE 	R2, #001h, HARICI1
    		CLR	CS_D
		JMP 	ASAGI1
HARICI1:	CLR    	CS_S
ASAGI1:
		CLR	DIO
		RET
;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : SEND_EE
; AMAÇ       : SERI EEPROM A  VERI GONDERIR
; GIRISLER   : -
; ÇAĞRIMLAR  : -
; DEĞİŞENLER : A, R2, C
;----------------------------------------------------------------

SEND_EE:	MOV	R2,#8
SEND1:		RLC	A
		MOV	DIO,C
		NOP
		SETB	SK
		NOP
		CLR	SK
		DJNZ	R2,SEND1
		RET

;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : REC_EE
; AMAÇ       : SERI EEPROM DAN  SERI BILGIYI A REGISTERI UZERINE KAYDIRIR	
; GIRISLER   : -
; ÇAĞRIMLAR  : -
; DEĞİŞENLER : A, R2, C 
;----------------------------------------------------------------

REC_EE:		MOV	R2,#8
REC1:		SETB	SK
		NOP
		CLR	SK
		MOV	C,DIO
		RLC	A
		DJNZ	R2,REC1
		RET
;-----------------------------------------------------------------

TUSBIRAKILDIMI:
KON1:	   ; TUŞ BIRAKILDI MI? KONTROLÜ YAPILIYOR		

		MOV 	C, P3.4  
		JNC  	KON1 
		MOV 	C, P3.5   
		JNC  	KON1
		MOV 	C, P3.7   
		JNC  	KON1 

		RET	
;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : EE_EWEN
; AMAÇ       : SERI EEPROM U BIR ISLEM YAPMAYA HAZIR HALE GETIRMEK
; GIRISLER   : 1- EEPROM_SECIMI ( 001H --> DAHILI SERI EEPROM SEÇİLİR )
;   	               	        ( 000H --> SMART KART SEÇİLİR )
; ÇAĞRIMLAR  : SEND_EE
; DEĞİŞENLER : A,R2
;----------------------------------------------------------------

EE_EWEN:	CLR	SK
		MOV     R2,EEPROM_SECIMI
		CJNE 	R2, #001h, HARICI2
    		SETB	CS_D
		JMP 	ASAGI2
HARICI2:	SETB    CS_S
ASAGI2:
		MOV	A,#00000001b	; Start bit
		CALL	SEND_EE		; 
		MOV	A,#00110000b	; Wen OpCode
		CALL	SEND_EE

		MOV     R2,EEPROM_SECIMI		
		CJNE 	R2, #001h, HARICI3
    		CLR	CS_D
		JMP 	ASAGI3
HARICI3:	CLR    	CS_S
ASAGI3:
		CLR	DIO
		RET
;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : EE_WRITE
; AMAÇ       : SERI EEPROM A  BILGI YAZNAK
; GIRISLER   : 1- EEPROM_SECIMI ( 001H --> DAHILI SERI EEPROM SEÇİLİR )
;   	               	        ( 000H --> SMART KART SEÇİLİR )
;	       2- EEPROM_ADRES  ( YAZILACAK ADRES ) 	
;	       3- EEPROM_YAZ_VERI_H ( YAZILACAK VERININ MSB BOLUMU )
;	       4- EEPROM_YAZ_VERI_L ( YAZILACAK VERININ LSB BOLUMU ) 				   
; ÇAĞRIMLAR  : SEND_EE
; DEĞİŞENLER : A,R2
;----------------------------------------------------------------

EE_WRITE:	CLR	SK
		MOV     R2,EEPROM_SECIMI
		CJNE 	R2, #001h, HARICI4
    		SETB	CS_D
		JMP 	ASAGI4
HARICI4:	SETB    CS_S
ASAGI4:
		MOV	A,#00000001b	; Start 
		CALL	SEND_EE
		MOV	A,#01000000b	; Write OpCode
		ORL	A,EEPROM_ADRES        	; Adresi al
		CALL	SEND_EE
		MOV	A,EEPROM_YAZ_VERI_H	 ; YAZILACAK VERİNİN YÜKSEK BYTE
		CALL	SEND_EE
		MOV	A,EEPROM_YAZ_VERI_L	 ; YAZILACAK VERİNİN DÜŞÜK BYTE
		CALL	SEND_EE
		SETB	DIO
		MOV     R2,EEPROM_SECIMI
		CJNE 	R2, #001h, HARICI5
    		CLR	CS_D
		jmp 	ASAGI5
HARICI5:	CLR    	CS_S
ASAGI5:
		NOP
		MOV     R2,EEPROM_SECIMI
		CJNE 	R2, #001h, HARICI6
    		SETB	CS_D
		JMP 	ASAGI6
HARICI6:	SETB    CS_S
ASAGI6:
		NOP
		NOP
		NOP
		JNB	DIO,$		; 1 okuyana kadar bekle
		MOV     R2,EEPROM_SECIMI	
		CJNE 	R2, #001h, HARICI7
    		CLR	CS_D
		JMP 	ASAGI7
HARICI7:	CLR    	CS_S
ASAGI7:
		CLR	DIO
		RET
;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : EE_READ
; AMAÇ       : SERI EEPROM DAN GELEN BILGILERI OKUMAK
; GIRISLER   : 1- EEPROM_SECIMI ( 001H --> DAHILI SERI EEPROM SEÇİLİR )
;   	               	      ( 000H --> SMART KART SEÇİLİR )
;	       2- EEPROM_ADRES  ( OKUNACAK VERININ ADRES ) 	
;	       3- EEPROMDAN_GELEN_VERI_H ( OKUNAN VERININ MSB SININ AKTARILACAĞI ADRES )
;	       4- EEPROMDAN_GELEN_VERI_L ( OKUNAN VERININ LSB SININ AKTARILACAĞI ADRES ) 				   
; ÇAĞRIMLAR  : SEND_EE, REC_EE
; DEĞİŞENLER : A, R0, R2
;----------------------------------------------------------------

EE_READ:
		CLR	SK
		MOV     R2,EEPROM_SECIMI
		CJNE 	R2, #001h, HARICI8
    		SETB	CS_D
		JMP 	ASAGI8
HARICI8:	SETB    CS_S
ASAGI8:
		MOV	A,#00000001b	; start 
		CALL	SEND_EE
		MOV	A,#10000000b	; Read OpCode
		ORL	A,EEPROM_ADRES	; Adresi al
		
		CALL	SEND_EE
		
		SETB	DIO
		JB	DIO,$		; 0 okuyana kadar bekle
		
		CALL	REC_EE
		MOV	R0, EEPROMDAN_GELEN_VERI_H
		MOV	@R0, A	        ;   D15...D8

		CALL	REC_EE
		MOV	R0, EEPROMDAN_GELEN_VERI_L
		MOV	@R0, A		;   D7...D0		

		MOV     R2,EEPROM_SECIMI		
		CJNE 	R2, #001h, HARICI9
    		CLR	CS_D
		JMP 	ASAGI9
HARICI9:	CLR    	CS_S
ASAGI9:
		CLR	DIO
		RET
;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : DONUSTUR
; AMAC       : IKI HAFIZA BOLGESININ 4 BIT LSB KISMINDAKI VERILERI BIRLESTIRIR
;	       BIRLESTIRME ISLEMI A REGISTERINDEKI LSB 4 BIT B REGISTERININ
;	       MSB 4 BITINE AKTARILIR. 			
; GIRISLER   : 1- A
;	         2- B
; CIKISLAR   : B		
; CAGRIMLAR  : -
; DEGISENLER : A, B, C
;----------------------------------------------------------------

DONUSTUR:
		RL	A
		RL	A
		RL	A
		RL	A
		
		CLR	C
		ADD 	A,B
		MOV 	B,A
		RET

;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : SISTEM_NO_KARSILASTIR
; AMAÇ       : DAHILI EEPROM DAKI VE SMART KARTTAKI SISTEM_NO KARSILASTIRILIR
;  	       EGER HATA VARSA HATA LABEL INA ATLANIR.   
; GIRISLER   : 1- SISTEM_NO_ADRES_DAHILI 
;	       2- SISTEM_NO_ADRES_SMART	
; ÇIKIŞLAR   : 1- HATA_KONTROL  ( 000H --> HATA VAR, 001H --> KARSILASTIRMA DOGRU ) 
; ÇAĞRIMLAR  : CHIP_OKU
; DEĞİŞENLER : A, R2, C
;----------------------------------------------------------------

SISTEM_NO_KARSILASTIR:
		
		MOV	HATA_KONTROL,#001H
		MOV   EEPROMDAN_GELEN_VERI_H,#040H
		MOV   EEPROMDAN_GELEN_VERI_L,#041H   ; SISTEM_NO AKTARILIR.
		MOV	EEPROM_ADRES,#SISTEM_NO_ADRES_DAHILI 
		MOV	EEPROM_SECIMI,#001H   	 
		CALL	CHIP_OKU   
		
		MOV	EEPROMDAN_GELEN_VERI_H,#042H                
		MOV	EEPROMDAN_GELEN_VERI_L,#043H                
		MOV	EEPROM_ADRES,#SISTEM_NO_ADRES_SMART   ; SMART KARTIN 03H ADRESİNDEKİ SİSTEM_NO ALINIR.
		MOV	EEPROM_SECIMI,#000H
		CALL	CHIP_OKU	; VE SISTEM_NO HAFIZANIN 042H-043H A AKATARILIR.

		MOV	SISTEM_NO_H,042H
		MOV	SISTEM_NO_L,043H

		MOV 	R2, 040H	;DAHILI EEPROMDAN OKUNAN SISTEM_NO MSB         
		MOV 	A, 042H		;SMART KARTDAN OKUNAN SISTEM_NO MSB			

		CLR	C	
		SUBB 	A,R2

		JNZ  	HATA_SIS_NO	;  SISTEM_NO LARIN (MSB) LERI AYNI MI?

		MOV 	R2,041H		;DAHILI EEPROMDAN OKUNAN SISTEM_NO LSB         
		MOV 	A,043H		;SMART KARTDAN OKUNAN SISTEM_NO LSB         

		CLR	C
		SUBB 	A,R2 
		
		JZ  	DOGRU_SIS_NO 		; SISTEM_NO LARIN (LSB) LERI AYNI MI?

HATA_SIS_NO :
		MOV	HATA_KONTROL,#000H
DOGRU_SIS_NO:   	
		RET

;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        : SMART_KART_OKU
; AMAÇ       : SMART KARTTAKI ID_NO, SIFRE VE GUVEN_PAR HAFIZAYA AKTARILIR.
; GIRISLER   : 	1- ID_NO_H_ADRES
;		2- ID_NO_L_ADRES
;		3- ID_NO_ADRES	
;		4- SIFRE_H_ADRES	
;		5- SIFRE_L_ADRES
;		6- SIFRE_ADRES	
;		7- GUVEN_PAR_H_ADRES
;		8- GUVEN_PAR_L_ADRES
;		8- GUVEN_PAR_ADRES
; ÇIKIŞLAR   : -
; ÇAĞRIMLAR  : CHIP_OKU
; DEĞİŞENLER : -
;----------------------------------------------------------------

SMART_KART_OKU:
		MOV     EEPROMDAN_GELEN_VERI_H,#ID_NO_H_ADRES
		MOV     EEPROMDAN_GELEN_VERI_L,#ID_NO_L_ADRES   ; SISTEM_NO AKTARILIR.
		MOV	EEPROM_ADRES,#ID_NO_ADRES 
		MOV	EEPROM_SECIMI,#000H
                CALL	CHIP_OKU	; ID_NO 030H VE 031h A AKATARILIR.
	
		MOV     EEPROMDAN_GELEN_VERI_H,#SIFRE_H_ADRES
		MOV     EEPROMDAN_GELEN_VERI_L,#SIFRE_L_ADRES   
		MOV	EEPROM_ADRES,#SIFRE_ADRES 
		MOV	EEPROM_SECIMI,#000H
                CALL	CHIP_OKU	; SIFRE 032H VE 033H A AKATARILIR.

		MOV     EEPROMDAN_GELEN_VERI_H,#GUVEN_PAR_H_ADRES
		MOV     EEPROMDAN_GELEN_VERI_L,#GUVEN_PAR_L_ADRES   
		MOV	EEPROM_ADRES,#GUVEN_PAR_ADRES 
		MOV	EEPROM_SECIMI,#000H
                CALL	CHIP_OKU	; GUVEN_PAR 034H VE 035H A AKATARILIR.

		CALL	SISTEM_KART_KARSILASTIR
		RET
;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        :  ISLEM_YAP
; AMAÇ       :  SIFRENIN DOGRU GIRILMESI SONRASI  ROLE BELLI BIR ZAMAN AKTIF OLUR,
;		    YESIL LED KART CIKARILANA KADAR YANAR. KIRMIZI LED ISE SONER.
;		    EGER KULLANICI KARTI 5 SN ICERISINDE YERINDEN ALMAZ ISE
;		    UYARI SESI VERILIR.	 
; GIRISLER   :  -
; ÇIKIŞLAR   :  -
; ÇAĞRIMLAR  :  BEKLE
; DEĞİŞENLER :  R3, R4, C
;----------------------------------------------------------------
ISLEM_YAP:
		SETB	B_ROLE		;RÖLE AKTİF
		CALL	BEKLE
		CALL	BEKLE
		CALL	BEKLE
		CALL	BEKLE
		CALL	BEKLE
		CALL	BEKLE
		CALL	BEKLE
		CALL	BEKLE
		CLR	B_ROLE		;RÖLE PASİF	

		CALL	YESIL_LED_YAK
		JMP	KART_UYARI					
		RET				
;-------------------------------------------------------------    
;      1 SN LIK GECIKME SAĞLAR 
BEKLE:
		MOV	A,R0
		MOV	B,R1

		MOV	R0,#028H
BEKLE_DON:
; BU DONGU 1 ms LIK GECIKME SAĞLAR

		MOV	R1,#0FAH
BEK:		NOP
		NOP
		DJNZ	R1,BEK
		
		DJNZ	R0,BEKLE_DON				

		MOV	R0,A
		MOV	R1,B

		RET
;-------------------------------------------------------------

BUZZER:
		CLR	P1.1
		CALL	BEKLE
		SETB	P1.1
		
		RET

;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        :  SISTEM_KART_KARSILASTIR
; AMAC       :  GIRILEN KARTIN SISTEM KARTI OLUP OLMADIGINI KONTROL  EDER.
;		EGER KART SISTEM KARTI ISE SISTEM_KART_ONAY 001H DEGERIYLE YUKLENILIR. 
; GIRISLER   :  ID_NO_H,ID_NO_L
; CIKISLAR   :  SISTEM_KART_ONAY
; CAGRIMLAR  :  -
; DEGISENLER :  A
;----------------------------------------------------------------
SISTEM_KART_KARSILASTIR:
		MOV	SISTEM_KART_ONAY,#000H
		CLR	C
		MOV	A,ID_NO_H
		SUBB	A,#00H
		JNZ	SISTEM_KART_DEGIL		

		CLR	C
		MOV	A,ID_NO_L
		SUBB	A,#01H
		JNZ	SISTEM_KART_DEGIL		
		MOV	SISTEM_KART_ONAY,#001H
SISTEM_KART_DEGIL:
		RET		
;----------------------------------------------------------------
; 			ALT PROGRAM 
; ADI        :  YESIL_LED_YAK
; AMAC       :  YESIL LED YANAR. 3SN SONRA BUZZER DA AKTIF OLUR. TAKI KART CIKARILANA KADAR
; GIRISLER   :  -
; CIKISLAR   :  -
; CAGRIMLAR  :  BUZZER,BEKLE
; DEGISENLER :  C, R3, R4, R5
;----------------------------------------------------------------

YESIL_LED_YAK:

		CLR	B_LED		;YESIL LED YANAR		
		MOV	R3,#0FFH		
		MOV	R4,#0FFH
		MOV	R5,#007H
DONGU:		
		NOP
		DJNZ	R3,ISLEM_YAP_ASAGI
		MOV	R3,#0FFH				
		DJNZ	R4,ISLEM_YAP_ASAGI
		MOV	R4,#0FFH
		DJNZ	R5,ISLEM_YAP_ASAGI
		JMP	KART_UYARI					
ISLEM_YAP_ASAGI:	
		MOV 	C, B_KART_TAKILI_MI	        ; kart takılı mı?
		JNC 	DONGU

		JMP     ISLEM_YAP_SON
KART_UYARI:
		CALL	BUZZER
		CALL	BEKLE
		CALL	BEKLE
		MOV 	C, B_KART_TAKILI_MI	        ; kart takılı mı?
		JNC 	KART_UYARI
ISLEM_YAP_SON:
		SETB	B_LED		;YEŞİL LED SÖNER		
		RET

;----------------------------------------------------------------
HEX_TO_DECIMAL:


		MOV	R7,KULLANICI_SAYISI
		MOV	R6,#0	; BIRLER BASAMAGI
		MOV	R5,#0 	; ONLAR BASAMAGI
		MOV	R4,#0 	; YUZLE  BASMAGI
HEX_TO_DECIMAL_DONGU:
		INC	R6		
		CJNE	R6,#0AH,HEX_TO_DECIMAL_ASAGI
		MOV	R6,#0
		INC	R5
HEX_TO_DECIMAL_ASAGI:			
		CJNE	R5,#0AH,HEX_TO_DECIMAL_ASAGI1
		MOV	R5,#0
		INC	R4
HEX_TO_DECIMAL_ASAGI1:			
		DJNZ R7,HEX_TO_DECIMAL_DONGU
		MOV	A,R5
		MOV	B,R6
		CALL  DONUSTUR

		MOV	EEPROM_YAZ_VERI_H,R4	
		MOV	EEPROM_YAZ_VERI_L,B
		MOV	ID_N0_TUT_H,EEPROM_YAZ_VERI_H
		MOV	ID_N0_TUT_L,EEPROM_YAZ_VERI_L
		RET
;----------------------------------------------------------------
	

END		

    Source: geocities.com/haluk61/staj

               ( geocities.com/haluk61)