#include "ADUC841.h"


; Timer 2 ornegi
; 10ms'de bir p0.1 tersleyelim, kesmesiz kullanim
; 16 bitlik yeniden yuklemeli mod kullanilacak
; 10ms=10000000ns  timerdegeri 65535-50000 olarak ayarlanacak.
; 10000000/50000=200 kez tasma gerçeklesirse 10ms gecer
	;org 	0000h
;BASLA:
	;MOV		T2CON,#00000000B ; ZAMANLAYICI KULLANIM=> CNT2=0
	;MOV		TL2,#0AFH
	;MOV		TH2,#3CH
	;MOV		RCAP2L,#0AFH
	;MOV		RCAP2H,#3CH
	;MOV		R0,#200D
	;SETB	TR2				; SAYICI SAYMAYA BASLA
;X:	JNB		TF2,$
	;CLR		TF2			    ; OTOMATIK YENIDEN YUKLEME GERCEKLESIR
	;DJNZ	R0,K
	;MOV		R0,#200D
	;CPL		P1.0
;K:	SJMP	X
	;END
;---------------------------------------------------------------------------
; Timer 2 ornegi
; 10ms'de bir p0.1 tersleyelim, KESMELI kullanim
; 16 bitlik yeniden yuklemeli mod kullanilacak
;10ms=10000000ns  timerdegeri 65535-50000 olarak ayarlanacak.
; 10000000/50000=200 kez tasma gerçeklesirse 10ms gecer
	;org 	0000h
	;SJMP	BASLA
	;ORG		002BH
	;SJMP	T2KESMESI
;BASLA:
	;MOV		T2CON,#00000000B ; ZAMANLAYICI KULLANIM=> CNT2=0
	;MOV		TL2,#0AFH
	;MOV		TH2,#3CH
	;MOV		RCAP2L,#0AFH
	;MOV		RCAP2H,#3CH
	;MOV		R0,#200D
	;SETB	ET2
	;SETB	EA
	;SETB	TR2				; SAYICI SAYMAYA BASLA
;X:	

	;SJMP	X

;T2KESMESI:
	;CLR		TF2			    ; OTOMATIK YENIDEN YUKLEME GERCEKLESIR
	;DJNZ	R0,K
	;MOV		R0,#200D
	;CPL		P1.0
;K:	RETI
	;END


;---------------------------------------------------------------------------
; adc 1. ÖRNEK

;ADC'nin kullanimi (kesme olmadan, yoklamayla kontrol edilmistir)
;1. ADCCON1 ve ADCCON2 saklayicilari ayarlanir, kanal seçimi yapilir (SCONV=0 yapilmali)
;2. SCONV=1 yapilir.
;3. ADCI biti 1 olana kadar kontrol edilir, 1 oldugunda ADC okumasi tamamlanmis demektir.
;4. ADC okuma bilgisi ADCDATAH ve ADCDATAL saklayicilarindan elde edilir.
;5. ADCyi tekrar çalistirmak için ADCI biti temizlenir, 2. adima dönülür.	

	;org 	0000h
;BASLA:
	;MOV 	ADCCON1, #08CH ; 1 0 0 0 1 1 0 0 ; DAHILI REF, CLK=32, TAVSIYE EDILEN
	;MOV 	ADCCON2, #01H ; 0 0 0 0 0 0 0 1 ; KANAL SECIMI
;OKU:
	;SETB 	SCONV ;ADCden bir veri oku
	;JNB 	ADCI,$ ;çevrim bitene kadar bekle
	;CLR 	ADCI
	;MOV 	R4,ADCDATAH
	;MOV 	R5,ADCDATAL	
	;x:		sjmp	x

;END
	
	
	
;---------------------------------------------------------------------------
; adc 2. ÖRNEK

;ADC'nin kullanimi (kesme)
;1. ADCCON1 ve ADCCON2 saklayicilari ayarlanir, kanal seçimi yapilir (SCONV=0 yapilmali)
;2. SCONV=1 yapilir.
;3. ADCI biti 1 olana kadar kontrol edilir, 1 oldugunda ADC okumasi tamamlanmis demektir.
;4. ADC okuma bilgisi ADCDATAH ve ADCDATAL saklayicilarindan elde edilir.
;5. ADCyi tekrar çalistirmak için ADCI biti temizlenir, 2. adima dönülür.	


	;org 	0000h
	;sjmp	BASLA
	;org		0033h   ; adckesme adresi
	;sjmp	adckesmesi
;BASLA:
	;MOV 	ADCCON1, #8CH ; 1 0 0 0 1 1 0 0 ; DAHILI REF, CLK=32, TAVSIYE EDILEN
	;MOV 	ADCCON2, #01H ; 0 0 0 0 0 0 0 1 ; KANAL SECIMI
	;SETB	EADC   ; ADC kesmesi aktif
	;SETB	EA
	;SETB 	SCONV ;ADCden bir veri oku; çevrim baslasin
;main:

	;sjmp	main

;adckesmesi:
	
	;MOV 	A,ADCDATAH
	;ANL		A,#0FH
	;MOV		R4,A
	;MOV 	R5,ADCDATAL	
	;reti
;END
	
	
	
;---------------------------------------------------------------------------
;Ornek 2.1
;ÖRNEK: ADC girisindeki gerilim degeri her 10 msde bir okunacak ve okuma
;degerleri R4-R5 saklayicilarina atilacaktir. Gerekli kodu yaziniz	
	
;ADC'nin kullanimi (kesme olmadan)
;1. ADCCON1 ve ADCCON2 saklayicilari ayarlanir, kanal seçimi yapilir (SCONV=0 yapilmali)
;2. SCONV=1 yapilir.
;3. ADCI biti 1 olana kadar kontrol edilir, 1 oldugunda ADC okumasi tamamlanmis demektir.
;4. ADC okuma bilgisi ADCDATAH ve ADCDATAL saklayicilarindan elde edilir.
;5. ADCyi tekrar çalistirmak için ADCI biti temizlenir, 2. adima dönülür.	

	;org 	0000h
;BASLA:
	;MOV 	ADCCON1, #8CH ; 1 0 0 0 1 1 0 0 ; DAHILI REF, CLK=32, TAVSIYE EDILEN
	;MOV 	ADCCON2, #01H ; 0 0 0 0 0 0 0 1 ; KANAL SECIMI
;OKU:
	;SETB 	SCONV ;ADCden bir veri oku
;XA:	JNB 	ADCI,XA ;çevrim bitene kadar bekle
	;CLR 	ADCI
	;MOV 	R4,ADCDATAH
	;MOV 	R5,ADCDATAL
	
	;ANL 	04H,#0FH ;04H adresinde R4 var.
	;MOV 	A, #01H ;gecikme için kullanilacak 10MS ICIN 1 YUKLE
	;ACALL 	DELAY ;gecikme fonksiyonunu çagir
	;SJMP 	OKU
;;______
	;DELAY:
	;MOV 	R5,A
	;DLY2: 	MOV R7,#090h
	;DLY1: 	MOV R6,#0FFh
	;DJNZ 	R6,$
	;DJNZ 	R7,DLY1
	;DJNZ 	R5,DLY2
	;RET
;END
	

;--------------------------------------------------------------------
;Ornaek 2.2
; Ornaek 2.1'i 10MS TIMER0 ILE SAGLAYALIM.
; TIMER 0 KESMESINDE ADC OKUYALIM
; T0 16BIT OLACAK SEKILDE 200 KEZ TASACAK SEKILDE AYARLANMISTIR.
	;org 	0000h
	;SJMP	BASLA
	;ORG		000BH
	;SJMP	T0KESMESI
;BASLA:
	;MOV 	ADCCON1, #8CH ; 1 0 0 0 1 1 0 0 ; DAHILI REF, CLK=32, TAVSIYE EDILEN
	;MOV 	ADCCON2, #01H ; 0 0 0 0 0 0 0 1 ; KANAL SECIMI
	;MOV		TMOD,#00000001B
	;MOV		DPTR,#15535D   ; 65525-50000
	;MOV		TL0,DPL
	;MOV		TH0,DPH
	;SETB	ET0
	;SETB	EA
	;MOV		R0,#200D
	;SETB	TR0
	
	;SJMP	$ ; SONSUZ DONGU

;T0KESMESI:
	;;200 KEZ KESME GELDIKTEN SONRA ADC CEVRIME BASLATILACAK
	;CLR		TF0
	;MOV		TL0,DPL
	;MOV		TH0,DPH
	;DEC		R0
	;CJNE	R0,#00H,X
	;; 10MS DOLDU ADC CEVRIME BASLAT VE DEGERLERI AL
	;SETB	SCONV
	;JNB 	ADCI,$ ;çevrim bitene kadar bekle
	;CLR 	ADCI
	;MOV 	R4,ADCDATAH
	;MOV 	R5,ADCDATAL
	;ANL 	04H,#0FH ;04H adresinde R4 var.	
	;MOV		R0,#200D
;X:	RETI
	;END
	
	
;---------------------------------------------------------
;Ornaek 2.3
; Ornaek 2.2'yi ADC OKUMAYI ALT PROGRAMDA YAPMAK 
; KOD OKUNABILIRLIGI ACISINDAN DAHA IYIDIR.

	;org 	0000h
	;SJMP	BASLA
	;ORG		000BH
	;SJMP	T0KESMESI
;BASLA:
	;MOV 	ADCCON1, #8CH ; 1 0 0 0 1 1 0 0 ; DAHILI REF, CLK=32, TAVSIYE EDILEN
	;MOV 	ADCCON2, #01H ; 0 0 0 0 0 0 0 1 ; KANAL SECIMI
	;MOV		TMOD,#00000001B
	;MOV		DPTR,#15535D   ; 65525-50000
	;MOV		TL0,DPL
	;MOV		TH0,DPH
	;SETB	ET0
	;SETB	EA
	;MOV		R0,#200D
	;SETB	TR0
	
	;SJMP	$ ; SONSUZ DONGU

;T0KESMESI:
	;;200 KEZ KESME GELDIKTEN SONRA ADC CEVRIME BASLATILACAK
	;CLR		TF0
	;MOV		TL0,DPL
	;MOV		TH0,DPH
	;DEC		R0
	;CJNE	R0,#00H,X
	;; 10MS DOLDU ADC CEVRIME BASLAT VE DEGERLERI AL
	;ACALL	ADCOKU
;X:	RETI

;ADCOKU:
	;SETB	SCONV
	;JNB 	ADCI,$ ;çevrim bitene kadar bekle
	;CLR 	ADCI
	;MOV 	R4,ADCDATAH
	;MOV 	R5,ADCDATAL
	;ANL 	04H,#0FH ;04H adresinde R4 var.	
	;MOV		R0,#200D
	;RET
	;END
	
;--------------------------------------------------------------
;Ornaek 2.4
; Ornaek 2.3'te ADC KESMESI DE KULLANMAK DIGER BIR YOLDUR
	org 	0000h
	SJMP	BASLA
	ORG		000BH
	SJMP	T0KESMESI
	ORG		0033H
	SJMP	ADCKESMESI
BASLA:
	MOV 	ADCCON1, #8CH ; 1 0 0 0 1 1 0 0 ; DAHILI REF, CLK=32, TAVSIYE EDILEN
	MOV 	ADCCON2, #01H ; 0 0 0 0 0 0 0 1 ; KANAL SECIMI
	MOV		TMOD,#00000001B
	MOV		DPTR,#15535D   ; 65525-50000
	MOV		TL0,DPL
	MOV		TH0,DPH
	SETB	ET0
	SETB	EADC  ; ADC KESMESI AKTIF EDILDI
	SETB	EA
	MOV		R0,#200D
	SETB	TR0
	
	SJMP	$ ; SONSUZ DONGU

T0KESMESI:
	;200 KEZ KESME GELDIKTEN SONRA ADC CEVRIME BASLATILACAK
	CLR		TF0
	MOV		TL0,DPL
	MOV		TH0,DPH
	DEC		R0
	CJNE	R0,#00H,X
	; 10MS DOLDU ADC CEVRIME BASLAT VE DEGERLERI AL
	SETB	SCONV
X:	RETI

ADCKESMESI:
	CLR 	ADCI
	MOV 	R4,ADCDATAH
	MOV 	R5,ADCDATAL
	ANL 	04H,#0FH ;04H adresinde R4 var.	
	MOV		R0,#200D
	RETI
	END
;-------------------------------------------------------------------



