Elektronik / Mikrodenetleyici Projeleri/

PIC16F84 ile dijital saat ve termometre projesi

Sponsorlu Bağlantılar

Hazırlayan: Tamer Tömekçe – PIC 16F84 Mikro denetleyici üzerine kurulu bir saat termometre devresi. Özellikle açıklamalı assembly kodları programlamaya yeni başlayan kişiler için faydalı olabilir. Emeği geçen hazırlayan kişilere teşekkürler.

Devrenin Çlışma Prensibi

Devrede asıl istenen 4 adet display ile yaklaşık 15 saniye aralıklarla zamanı ve sıcaklığı göstermesidir. Zaman yazılış formatı ‘ss.dd’ şeklinde olup sıcaklık formatı ise ‘XXοC’ şeklindedir. Devreye enerji verildikten sonra saat ve dakika göstergelerinde varsayılan değer olan 00.00 değeri yanıp sönecektir. Dakika ayar ve saat ayar tuşlarına basılması durumunda saat ayarlanacak ve SET tuşuna basıldığında saat işlemeye ve 15 saniye içinde sıcaklık gösterilmeye başlanacaktır. Bu bir döngü şeklinde devam edecektir.

Devrede saatin çalışması ve sıcaklık ölçümü pic16F84 ile yapılmaktadır. Saatin çalışması pic içerisindeki TMR0 dahili komut sayacı kullanılarak programlanmıştır. Devrenin çalışmasında kullanılan program ek’te mevcuttur. 1 komut saykılının 1µs olduğu bilindiğinerek, TMR0 sayacının her döngüsünde oluşturulan kesme ile sayaç a ve sayaç b değerleri artırılmaktadır. Sayaç a’nın istenen değere ulaşması ile sayaç b artırılır. Sayaç b’nin istenen değere ulaşması tam 1 dakikadır ve dakika değeri 1 arttırılır. Bunun bir döngü halinde gitmesi saatin çalışmasını sağlamaktadır.

Devrenin sıcaklık ölçen kısmında ise 1 adet NTC ve kondansatör seri olarak bağlanmış olup (devre şeması ek’te mevcuttur) kondansatör üzerinde oluşan gerilim ölçülmek üzere PIC’in portA 4. pinine bağlanmıştır. Bu küçük devrenin çalışma prensibi ise sıcaklık ölçülmek istendiğinde kondansatörün PIC’e bağlı olduğu pinden lojik ‘0’ değeri (0V) verilir ve kondansatörün boşalmasına yetecek kadar bir sürelik gecikme sağlanır. Kondansatörün boşalması tamamlandıktan sonra PIC’in bu pini giriş olarak koşullanır, bu sırada kondansatör doluma geçecektir.

Koşullama yapıldıktan sonra bu pinden lojik ‘1’ değeri gelene kadar (bu kondansatörün dolduğu anlamına gelir) RCSAY sayacını arttıran bir döngü çalıştırılır. Kondansatörün dolum hızı direnç ve kondansatör değerinin çarpımına bağlı olduğundan bu dolum süresi farklı direnç değerlerinde değişecektir. Kullandığımız direnç NTC olduğundan farklı sıcaklıklarda farklı değerler gösterecektir. Bu sayede RCSAY sayacından elde ettiğimiz değer her sıcaklıkta farklı olacaktır. Elde ettiğimiz bu değerlerin kaç dereceye denk geldiği ise NTC test programı (ek’te mevcuttur) kullanılarak farklı sıcaklıklarda yapılan ölçümler sonucunda belirlenmiştir.

Elimizde bulunan PIC modelinin toplam 13 adet giriş çıkış pinleri mevcuttur. Kullanılan displayler ise 7 segment olduğundan tüm displayler aynı anda çalıştırılamamaktadır. Bunun içinse tüm displaylerin a, b, c, d, e, f ve g olarak bilinen uçları paralel olarak bağlanmıştır. Ancak tüm displaylerin toprak uçları lojik kapılardan oluşan bir switcher devresi ile anahtarlama yapılmıştır. Bu anahtarlama devresi için portA’nın 0. ve 1. bitleri kullanılmıştır. Anahtarlama devresi iki adet lojik değil kapısından ve 4 adet lojik vedeğil kapısından oluşmaktadır. Bu kapılar BC237 transistörler ve dirençler ile oluşturulmuştur.

Bu şekilde portA ya 00 değeri basıldığında 1. display, 01 değeri basıldığında 2.display, 10 değeri basıldığında 3. display ve 11 değeri basıldığında 4. display aktif olacaktır. Böylece elimizdeki PIC’in 9 adet pinini kullanarak 4 adet displayi çalıştırabilmiş olduk. 4 display hiçbir zaman aynı anda çalışmamaktadır, sırayla birinci, ikinci, üçüncü ve dördüncü displayler göstermeleri gerektiği değeri göstermektedir. Ancak bu işlem çok hızlı yapıldığından insan gözü bu anahtarlamayı farkedememektedir ve hepsini aynı anda yanıyormuş gibi görmektedir.

Diğer gerekli açıklamalar program üzerinde açıklamalar şeklinde detaylı olarak anlatılmıştır.

dijital saat  termometre devresi

Devre malzeme listesi

  • 1 Adet pic16F84
  • 1 Adet kristal osilatör
  • 2 Adet 22pF kondansatör
  • 4 Adet 7 segment ortak katodlu display
  • 1 Adet 10K NTC
  • 4 Adet buton
  • 10 Adet BC237 transistör
  • 26 Adet 470ohm, 1 Adet 10K ve 1 adet 100ohm direnç
  • 2 Adet 0.1uF kondansatör

Assembly yazılımları

;-------------------PROJE 3------------------------------------
;-------------------------------------------------------------
;----------DİJİTAL SAAT VE TERMOMETRE----------24.01.2005---11.40-----
;------------------------------------------------------------------
;------------------TAMER-TÖMEKÇE----000208001-------------------------
;---------------------------------------------------------------------



	INCLUDE	"P16F84A.INC"
	
HOURA		EQU	H'0C'	;SAAT DEĞERİ ONLAR BASAMAĞI
HOURB		EQU	H'0D'	;SAAT DEĞERİ BİRLER BASAMAĞI
MINUTEA	EQU	H'0E'	;DAKİKA DEĞERİ ONLAR BASAMAĞI
MINUTEB	EQU	H'0F'	;DAKİKA DEĞERİ BİRLER BASAMAĞI
SAYACA		EQU	H'10'	;TMR0 DOLDUĞUNDA 1 ARTACAK OLAN SAYAÇ
SAYACB		EQU	H'11'	;SAYAÇ A DOLDUĞUNDA 1 ARTACAK OLAN SAYAÇ
FLSHON1		EQU	H'12'	;SAAT AYARLANIRKEN DİSPLAYLERİN FLASH,
FLSHOF1		EQU	H'13'	;YAPMASINI SAĞLAYAN GECİKME DEĞERLERİ
DLPCNTR	EQU	H'14'	;DİSPLAY LOOP COUNTER(1 DİSPLAYİN SWİTCHİNG SIRASINDA
; NE KADAR SÜRE YANACAĞI)

GCKSAY1	EQU	H'15'
GCKSAY2	EQU	H'16'	;KONDANSATÖR BOŞALMA SIRASINDAKİ GECİKMEYİ SAĞLARLAR
RCSAY		EQU	H'17'	;KONDANSATÖRÜN DOLUMU SÜRESİNCE ARTAN SAYAÇ
TEMPA		EQU	H'18'	;SICAKLIK DEĞERİ ONLAR BASAMAĞI
TEMPB		EQU	H'19'	;SICAKLIK DEĞERİ BİRLER BASAMAĞI
FLSHON2		EQU	H'1A'
FLSHOF2		EQU	H'1B'
KSMSKLA	EQU	H'1C'	;PROGRAM KESMEYE DALLANDIĞINDA W 
;REGISTER DA BULUNAN SAYIYI SAKLAMAK İÇİN
;KULLANILIR

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

	ORG	H'00'		;PROGRAM BAŞLANGICI
	GOTO	START
	ORG	H'04'		;TMR0 SAYICISI İLE SAĞLANACAK KESME BAŞLANGICI
	GOTO	KESME

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

START
	BSF	STATUS, 5	;BANK 1'E GEÇ
	
	MOVLW	B'00001100'
	MOVWF	TRISA		;PORT A KOŞULLAMASI(RA0-RA1 SWİTCHİNG, RA2 DAKİKA AYAR,
; RA3 SAAT AYAR, RA4 SICAKLIK ÖLÇ)
	
	MOVLW	B'10000000'
	MOVWF	TRISB		;PORT B KOŞULLAMASI(RB7 SET DÜĞMESİ, RB0-RB6 DİSPLAY ÇIKIŞLARI)
	
	MOVLW	B'00000111'
	MOVWF	OPTION_REG	;OPTION REGISTER KOŞULLAMASI(B7 PORTB PULLUPLAR GEÇERSİZ, 
;B5 DAHİLİ SAYKIL, B3 TMR0, B0-B2 1/256)
	
	BCF	STATUS, 5	;BANK 0'A GEÇ
	
	MOVLW	B'10100000'
	MOVWF	INTCON		;INTCON REGISTER KOŞULLAMASI(B7-GIE- TÜM KESMELER GEÇERLİ, 
;B5-TOIE- TMR0 SAYICI KESMESİ GEÇERLİ)
	
	CLRF	PORTA
	CLRF	PORTB


	CLRF	HOURA
	CLRF	HOURB
	CLRF	MINUTEA
	CLRF	MINUTEB

	CLRF	SAYACA
	CLRF	SAYACB
	CLRF	RCSAY
	CLRF	TEMPA
	CLRF	TEMPB
;------------------------------------------------------------


SETSTART			;PROGRAM BAŞLANGICINDA SAAT AYARLANMASI BEKLENİR

	MOVLW	H'10'
	MOVWF	FLSHON1		
	MOVLW	H'FF'
	MOVWF	FLSHOF1		;FLASH GECİKME DEĞERLERİ

AAAAA

	MOVLW	H'FF'
	MOVWF	FLSHON2



LOOPA

	CLRF	TMR0		;SAAT ÇALIŞMAYA BAŞLAMASIN DİYE

	CALL	TIMEDISP	;SAATI YAZDIR

	BTFSS	PORTA, 2		;RA2(DAKİKA AYAR) BASILDI MI?
	CALL	INCMINUTE	;DAKİKA ARTTIRAN ALT PROGRAMA GİT

	BTFSS	PORTA, 3		;RA3(SAAT AYAR) BASILDI MI?
	CALL	INCHOUR	;SAAT ARTTIRAN ALT PROGRAMA GİT

	BTFSS	PORTB, 7		;RB7(SET TUŞU) BASILDI MI?
	GOTO	TMR0SET	; MAINLOOP'A GİT  
	DECFSZ	FLSHON2, F
	GOTO	LOOPA
	DECFSZ	FLSHON1, F
	GOTO	AAAAA

BBBBB
	MOVLW	H'FF'
	MOVWF	FLSHOF2

LOOPB

	CLRF	TMR0		;SAAT ÇALIŞMAYA BAŞLAMASIN DİYE

	MOVLW	B'10000000'
	ANDWF	PORTB, F
	

	BTFSS	PORTA, 2		;RA2(DAKİKA AYAR) BASILDI MI?
	CALL	INCMINUTE	;DAKİKA ARTTIRAN ALT PROGRAMA GİT

	BTFSS	PORTA, 3		;RA3(SAAT AYAR) BASILDI MI?
	CALL	INCHOUR	;SAAT ARTTIRAN ALT PROGRAMA GİT

	BTFSS	PORTB, 7		;RB7(SET TUŞU) BASILDI MI?
	GOTO	TMR0SET	;MAINLOOP'A GİT
	DECFSZ	FLSHOF2, F
	GOTO	LOOPB
	DECFSZ	FLSHOF1, F
	GOTO	BBBBB

	GOTO	SETSTART
;-------------------------------------------------------

TMR0SET

	MOVLW	H'5D'
	MOVWF	TMR0		;TMR0 93 DEN SAYMAYA BAŞLATILIR(163'E KADAR SAYMASI İSTENMEKTEDİR)

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


MAINLOOP
BSF	PORTA, 4		;RA4 LOJİK "1" YAPILIR(SICAKLIK OKUNMADIĞI SÜRECE NTC'NİN 
;AKIM ÇEKEREK SICAKLIĞININ DEĞİŞMEMESİ İÇİN)
		
	CALL	TIMEDISP	;SAATİ DİSPLAYLERE YAZDIR

	BTFSC	SAYACB, 2	
	CALL	SICAKLIK	;SAYACB'NİN 2.BİTİNİN DEĞİŞMESİ YAKLAŞIK OLARAK 15 SANİYEDİR
	GOTO	MAINLOOP


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


TIMEDISP

	BCF	PORTA, 0	
	BCF	PORTA, 1		;DİSPLAY SWİTCHER '00'( DISPLAY 0)

	MOVF	HOURA, W
	CALL	CEV_TAB
	MOVWF	PORTB		;HOURA DEĞERİNİ DİSPLAY 0'A BASAR
	CALL	DISPDELAY	;DISPDELAY SÜRESİ KADAR SONRA SWİTCHİNG YAPAR

	INCF	PORTA, F		;DİSPLAY SWİTCHER '01'( DİSPLAY 1)

	MOVF	HOURB, W
	CALL	CEV_TAB
	MOVWF	PORTB		;HOURB DEĞERİNİ DİSPLAY 1'E BASAR
	CALL	DISPDELAY	;SWİTCHİNG GECİKMESİ

	INCF	PORTA, F		;DİSPLAY SWİTCHER '10'( DİSPLAY 2)

	MOVF	MINUTEA, W
	CALL	CEV_TAB
	MOVWF	PORTB		;MINUTEA DEĞERİNİ DİSPLAY 2'YE BASAR
	CALL	DISPDELAY	;SWİTCHİNG GECİKMESİ

	INCF	PORTA, F		;DİSPLAY SWİTCHER '11'( DİSPLAY 3)

	MOVF	MINUTEB, W
	CALL	CEV_TAB
	MOVWF	PORTB		;MINUTEB DEĞERİNİ DİSPLAY 3'E BASAR
	CALL	DISPDELAY	;SWİTCHİNG GECİKMESİ

	RETURN

DISPDELAY

	MOVLW	H'30'		;48 KEZ GECİKME DÖNGÜSÜ
	MOVWF	DLPCNTR		
	
LOOP1
	DECFSZ	DLPCNTR, F	
	GOTO	LOOP1
	RETURN			;TOPLAM OLARAK YAKLAŞIK 70 SAYKIL SWİTCHİNG GECİKMESİ

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


SICAKLIK

	CLRF	RCSAY

	MOVLW	H'04'

	MOVWF	TEMPA		
	CLRF	TEMPB		;TEMP DEFAULT DEĞER 40 DERECEDİR.

	CALL	DESARJ		;KONDANSATÖRÜN BOŞALMASI İÇİN GEREKLİ BEKLEME

	BSF	STATUS, 5	;BANK 1 E GEÇ
	
	BSF	TRISA, 4		;RA 4 Ü GİRİŞ KOŞULLA(KONDANSATÖR DOLUMA GEÇER)

	BCF	STATUS, 5	;BANK 0 A GEÇ
COUNT
	INCF	RCSAY, F		;RCSAY SAYACINI 1 ARTTIR
	BTFSS	PORTA, 4		;KONDANSATÖR DOLDU MU? DOLDUYSA EĞER DOLUM SÜRESİ RCSAY'DA SAKLI
	GOTO	COUNT

CONVERT

	MOVLW	H'07'		
	SUBWF	RCSAY, F		;RCSAY'DAN 7 ÇIKAR
	BTFSS	STATUS, 0	;CARRY FLAG '0' MI? '0' SA ÇIKARMA İŞLEMİ SONUCU NEGATİF DEMEKTİR 
	GOTO	TEMPDISP	;CARRY FLAG 0 SA, YANİ SONUÇ NEGATİFSE TEMPDISP'E GİT
	CALL	TEMPBUL

	MOVLW	H'06'	
	SUBWF	RCSAY, F		;RCSAY'DAN BU KEZ 6 ÇIKAR.(RCSAY 1 DERECEDE 6.65 DEĞİŞİYORDU.
;YAKLAŞIK DEĞER İÇİN)

	BTFSS	STATUS, 0	;CARRY FLAG '0' MI? '0' SA ÇIKARMA İŞLEMİ SONUCU NEGATİF DEMEKTİR 
	GOTO	TEMPDISP	;CARRY FLAG 0 SA, YANİ SONUÇ NEGATİFSE TEMPDISP'E GİT
	CALL	TEMPBUL

	GOTO	CONVERT



TEMPBUL

	DECF	TEMPB, F
	MOVLW	H'FF'
	XORWF	TEMPB, W
	BTFSS	STATUS, 2
	RETURN
	MOVLW	H'09'
	MOVWF	TEMPB
	DECF	TEMPA, F
	RETURN


TEMPDISP


	BCF	PORTA, 0	
	BCF	PORTA, 1		;DİSPLAY SWİTCHER '00'( DISPLAY 0)
	
	MOVF	TEMPA, W
	CALL	CEV_TAB
	MOVWF	PORTB		;TEMPA DEĞERİNİ DİSPLAY 0'A BASAR
	CALL	DISPDELAY	;DISPDELAY SÜRESİ KADAR SONRA SWİTCHİNG YAPAR

	INCF	PORTA, F		;DİSPLAY SWİTCHER '01'( DİSPLAY 1)

	MOVF	TEMPB, W
	CALL	CEV_TAB
	MOVWF	PORTB		;TEMPB DEĞERİNİ DİSPLAY 1'E BASAR
	CALL	DISPDELAY	;DISPDELAY SÜRESİ KADAR SONRA SWİTCHİNG YAPAR

	INCF	PORTA, F		;DİSPLAY SWİTCHER '10'( DİSPLAY 2)

	MOVLW	H'63'
	MOVWF	PORTB		;DERECE İŞARETİNİ DİSPLAY 2'YE BASAR
	CALL	DISPDELAY
	
	INCF	PORTA, F		;DİSPLAY SWİTCHER '11'( DİSPLAY 3)

	MOVLW	H'39'
	MOVWF	PORTB		;C HARFİNİ DİSPLAY 3'E BASAR
	CALL	DISPDELAY

		
	BTFSS	SAYACB, 2	
	RETURN			;SAYACB'NİN 1.BİTİNİN DEĞİŞMESİ YAKLAŞIK OLARAK 5 SANİYEDİR

	GOTO	TEMPDISP
DESARJ

	BSF	STATUS, 5	;BANK 1 E GEÇ
	
	BCF	TRISA, 4		;RA 4 Ü ÇIKIŞ KOŞULLA

	BCF	STATUS, 5	;BANK 0 A GEÇ
	

	BCF	PORTA, 4		;RA 4 Ü LOJİK 0 YAP...BÖYLECE KONDANSATÖR BOŞALIMA GEÇECEKTİR
	
	MOVLW	H'FF'
	MOVWF	GCKSAY1

DONGU1


	CALL	TIMEDISP	;DEŞARJ SIRASINDA OLUŞAN GECİKME SIRASINDA 
;DİSPLAYLER SÖNMESİN DİYE SAATİ BASAR

	
	MOVLW	H'FF'
	MOVWF	GCKSAY2
	

DONGU2
	DECFSZ	GCKSAY2, F
	GOTO	DONGU2
	DECFSZ	GCKSAY1, F
	GOTO	DONGU1
	RETURN



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

CEV_TAB

	ADDWF	PCL, F
	RETLW	H'3F'		;0
	RETLW	H'06'		;1
	RETLW	H'5B'		;2
	RETLW	H'4F'		;3
	RETLW	H'66'		;4
	RETLW	H'6D'		;5
	RETLW	H'7D'		;6
	RETLW	H'07'		;7
	RETLW	H'7F'		;8
	RETLW	H'6F'		;9
	RETLW	H'63'		;(DERECE İŞARETİ)
	RETLW	H'39'		;C




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


INCMINUTE

	CALL	DELAY
	
	INCF	MINUTEB, F	;DAKİKAYI 1 ARTTIR

	MOVLW	H'0A'
	XORWF	MINUTEB, W
	BTFSS	STATUS, 2	;MINUTEB DEĞERİ H'0A' İSE 0 OLMASI GEREKİR VE 
;MINUTEA'YI 1 ARTTIRMASI GEREKİR

	RETURN
CLRF	MINUTEB	;MINUTEB'Yİ SIFIRLA
	
	INCF	MINUTEA, F	;MINUTEA'YI 1 ARTTIR

	MOVLW	H'06'
	XORWF	MINUTEA, W
	BTFSS	STATUS, 2	;MINUTEA DEĞERİ H'06' İSE 0 OLMASI GEREKİR
	RETURN
	
	CLRF	MINUTEA	;MINUTEA'YI SIFIRLA
	RETURN

INCHOUR

	CALL	DELAY

	INCF	HOURB, F	;SAATİ 1 ARTTIR

	MOVLW	H'02'
	XORWF	HOURA, W
	BTFSC	STATUS, 2	;HOURA 2 Mİ? 2 İSE HOURB 3 TEN SONRA SIFIRLANMALI, DEĞİLSE 9 DAN SONRA.
	GOTO	SETSAAT24

	MOVLW	H'0A'
	XORWF	HOURB, W
	BTFSS	STATUS, 2	;HOURB DEĞERİ H'0A' İSE 0 OLMASI GEREKİR VE HOURA'YI 1 ARTTIRMASI GEREKİR
	RETURN

	CLRF	HOURB		;HOURB'Yİ SIFIRLA

	INCF	HOURA, F	;HOURA'YI 1 ARTTIR
	RETURN

SETSAAT24

	MOVLW	H'04'
	XORWF	HOURB, W
	BTFSS	STATUS, 2	;HOURB DEĞERİ H'04' İSE BU DURUMDA SAAT 00 OLMUŞTUR.
	RETURN
	
	CLRF	HOURB
	CLRF	HOURA		;HOURA VE HOURB SIFIRLANIR
	RETURN

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

DELAY

	MOVLW	H'02'
	MOVWF	GCKSAY1

DLYLOOP1

	CLRF	TMR0
	MOVLW	H'C8'
	MOVWF	GCKSAY2
	

DLYLOOP2

	CALL	TIMEDISP

	DECFSZ	GCKSAY2, F
	GOTO	DLYLOOP2
	DECFSZ	GCKSAY1, F
	GOTO	DLYLOOP1
	RETURN


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



KESME

	MOVWF	KSMSKLA	;W DAKİ DEĞERİ SAKLAMAK İÇİN
	MOVLW	H'5D'
	MOVWF	TMR0		;TMR0'A TEKRAR 163 DEĞERİNİ VER, SAYMAYA DEVAM ETSİN
	
	BCF	INTCON, T0IF	;SONRAKİ KESMELERE HAZIRLAMAK İÇİN T0IF BAYRAĞI SIFIRA ÇEKİLİR

	INCF	SAYACA, F	;SAYACA 1 ARTTIRILIR

	MOVLW	H'50'
	XORWF	SAYACA, W
	BTFSS	STATUS, 2	;SAYACA 80 Mİ? 80 İSE SIFIRLANMALI VE SAYACB 1 ARTTIRILMALI
	GOTO	KESMESON

	CLRF	SAYACA
	INCF	SAYACB, F	;SAYACA'YI SIFIRLA, SAYACB'Yİ 1 ARTTIR

	MOVLW	H'12'		
	XORWF	SAYACB, W	
	BTFSS	STATUS, 2	;SAYACB 18 Mİ? 18 İSE SIFIRLANMALI VE DAKİKA(MINUTEB) 1 ARTTIRILMALI
	GOTO	KESMESON

	CLRF	SAYACB

	INCF	MINUTEB, F	;DAKİKAYI 1 ARTTIR

	MOVLW	H'0A'
	XORWF	MINUTEB, W
	BTFSS	STATUS, 2	;MINUTEB DEĞERİ H'0A' İSE 0 OLMASI GEREKİR 
;VE MINUTEA'YI 1 ARTTIRMASI GEREKİR

	GOTO	KESMESON

	CLRF	MINUTEB	;MINUTEB'Yİ SIFIRLA
	INCF	MINUTEA, F	;MINUTEA'YI 1 ARTTIR

	MOVLW	H'06'
	XORWF	MINUTEA, W
	BTFSS	STATUS, 2	;MINUTEA DEĞERİ H'06' İSE 0 OLMASI GEREKİR VE HOURB'Yİ 1 ARTTIRMASI GEREKİR
	GOTO	KESMESON
	
	CLRF	MINUTEA	;MINUTEA'YI SIFIRLA
	INCF	HOURB, F	;HOURB'Yİ 1 ARTTIR

	
	MOVLW	H'02'
	XORWF	HOURA, W
	BTFSC	STATUS, 2	;HOURA 2 Mİ? 2 İSE HOURB 3 TEN SONRA SIFIRLANMALI, DEĞİLSE 9 DAN SONRA.
	GOTO	SAAT24

	MOVLW	H'0A'
	XORWF	HOURB, W
	BTFSS	STATUS, 2	;HOURB DEĞERİ H'0A' İSE 0 OLMASI GEREKİR VE HOURA'YI 1 ARTTIRMASI GEREKİR
	GOTO	KESMESON

	CLRF	HOURB		;HOURB'Yİ SIFIRLA

	INCF	HOURA, F	;HOURA'YI 1 ARTTIR
	GOTO	KESMESON

SAAT24

	MOVLW	H'04'
	XORWF	HOURB, W
	BTFSS	STATUS, 2	;HOURB DEĞERİ H'04' İSE BU DURUMDA SAAT 00 OLMUŞTUR.
	GOTO	KESMESON
	
	CLRF	HOURB
	CLRF	HOURA		;HOURA VE HOURB SIFIRLANIR
	GOTO	KESMESON

KESMESON

	MOVF	KSMSKLA, W	;SAKLANAN W DEĞERİ GERİ YÜKLENİR
	RETFIE
;---------------------------
	END
;----------------------------NTC TEST.ASM--------
;-----SICAKLIK ÖLÇMEDE KULLANILACAK NTC WE KONDANSATÖR İKİLİSİNDE-----
;-----KONDANSATÖRÜN DOLUM SÜRESİNİ SAYARAK DİSPLAYLERDE GÖSTEREN---
;------------------------------PROGRAM-----------


W	EQU	H'00'
F	EQU	H'01'
PORTA	EQU	H'05'
PORTB	EQU	H'06'
TRISA	EQU	H'85'
TRISB	EQU	H'86'
STATUS	EQU	H'03'
PCL	EQU	H'02'
RCSAY1	EQU	H'0C'
RCSAY2	EQU	H'0D'
DGCKSAY	EQU	H'0E'
GCKSAY1	EQU	H'0F'
GCKSAY2	EQU	H'10'
DSP0	EQU	H'11'
DSP1	EQU	H'12'
DSP2	EQU	H'13'
DSP3	EQU	H'14'
SAYAC	EQU	H'15'
GCKSAY3	EQU	H'16'
	ORG	H'00'

BASLA
	BSF	STATUS, 5	;BANK 1 E GEÇ
	CLRF	TRISA
	CLRF	TRISB
	BCF	STATUS, 5	;BANK 0 A GEÇ
	BSF	PORTA, 4		;RA 4 Ü LOJİK 1 YAP
	CLRF	PORTB
	CLRF	RCSAY1
	CLRF	RCSAY2
	MOVLW	H'FF'
	MOVWF	SAYAC		;SAYAC'A FF WERİLİR.EKRANDA YAZILARIN KALMA SÜRESİ

DESARJ
	BCF	PORTA, 4		;RA 4 Ü LOJİK 0 YAP
	CALL	GECIK

	BSF	STATUS, 5	;BANK 1 E GEÇ
	BSF	TRISA, 4		;RA 4 Ü GİRİŞ KOŞULLA
	BCF	STATUS, 5	;BANK 0 A GEÇ

SAY
	INCF	RCSAY1, F
	BTFSC	STATUS, 0	;CARRY FLAG 1 Mİ?
	INCF	RCSAY2, F
	BTFSS	PORTA, 4
	GOTO	SAY

	SWAPF	RCSAY2, W	;RCSAY2 NİN EN
	ANDLW	H'0F'		;ANLAMLI 4 BİTİNİ
	MOVWF	DSP0		;DSP0 A YAZ

	MOVF 	RCSAY2, W	;RCSAY2 NİN EN AZ
	ANDLW	H'0F'		;ANLAMLI 4 BİTİNİ
	MOVWF	DSP1		;DSP1 E YAZ

	SWAPF	RCSAY1, W	;RCSAY1 İN EN
	ANDLW	H'0F'		;ANLAMLI 4 BİTİNİ
	MOVWF	DSP2		;DSP2 YE YAZ

	MOVF	RCSAY1, W	;RCSAY1 İN EN AZ
	ANDLW	H'0F'		;ANLAMLI 4 BİTİNİ
	MOVWF	DSP3		;DSP3 E YAZ

YAZDIR
	CLRF	PORTA		;RA1 WE RA0 '00' YAPILIR(DISP0)
	MOVF	DSP0, W
	CALL	CEV_TAB
	MOVWF	PORTB		;DISPLAY 0'A DEĞERİNİ BAS
CALL	DSPGCK

	INCF	PORTA, F
	MOVF	DSP1, W
	CALL	CEV_TAB
	MOVWF	PORTB		;DISPLAY 1'E DEĞERİNİ BAS
	CALL	DSPGCK

	INCF	PORTA, F
	MOVF	DSP2, W
	CALL	CEV_TAB
	MOVWF	PORTB		;DISPLAY 2'YE DEĞERİNİ BAS
	CALL	DSPGCK

	INCF	PORTA, F
	MOVF	DSP3, W
	CALL	CEV_TAB
	MOVWF	PORTB		;DISPLAY 3'E DEĞERİNİ BAS
	CALL	DSPGCK

	DECFSZ	SAYAC, F
	GOTO	YAZDIR
	GOTO	BASLA

DSPGCK
	MOVLW	H'28'		;DISPLAYLERIN REFRESH SIRASINDA GORUNTU WERECEĞİ SÜRE(40 SAYKIL)
	MOVWF	DGCKSAY

DONGU4
	DECFSZ	DGCKSAY, F
	GOTO	DONGU4
	RETURN

GECIK
	MOVLW	H'FF'
	MOVWF	GCKSAY1

DONGU1
	MOVLW	H'FF'
	MOVWF	GCKSAY2
DONGU2

	MOVLW	H'05'
	MOVWF	GCKSAY3
DONGU3

	DECFSZ	GCKSAY3, F	
	GOTO	DONGU3
	DECFSZ	GCKSAY2, F
	GOTO	DONGU2
	DECFSZ	GCKSAY1, F
	GOTO	DONGU1
	RETURN

CEV_TAB

	ADDWF	PCL, F
	RETLW	H'3F'		;0
	RETLW	H'06' 		;1
	RETLW	H'5B'		;2
	RETLW	H'4F'   		;3
	RETLW	H'66'		;4
	RETLW	H'6D'		;5
	RETLW	H'7D'		;6
	RETLW	H'07'		;7
	RETLW	H'7F'		;8
	RETLW	H'6F'		;9
	RETLW	H'77'		;A
	RETLW	H'7C'		;B
	RETLW	H'39'		;C
	RETLW	H'5E'		;D
	RETLW	H'79'		;E
	RETLW	H'71'		;F

	END
  • ibrahim

    hocam devrede atlama yok,hatlar üzerinde noktayla bağlantı belirleme yok, hangi transistörün bacağı hangisine bağlı belli değil amatör biri bu devreyi nasıl yapacak sizce

  • Hakkı

    ibrahim kardeşim düşüncelerime tercüman olmuş bir an önce düzeltmenizi bekliyorum lütfen çok önemli

  • Levent Kerem Merdin

    devreyi ben denedim ama hiç bir şekilde çalıştıramadım,

  • Oğuzhan

    Bu devrenin proteus çizimi olan var mı? fotodan pek belli olmuyor. Anlayabildiğim kadarıyla çizdim ama çalıştıramadım. Eğer anlatabilecek varsa çok yardımcı olmuş olur..

  • umut

    transistörün sembolünden bacaklarını okuyamıyosanız bu işe hiç kalkışmayın bence, oklu olan emiter yukarısındaki kollektör düz çizgiye gelen ise beyzdir.ayrıca çizim de proteus dan çizilmiştir.

  • Malatyalı

    Teşekürler Admin Eline sağlık

  • Suskun

    Teşekkürler

  • Extreme

    ben ntc ile ölcülen sıya göre çıkış vermek istiyorum bunu nasıl yapabiliriz 2. kodu düzenlersek ?
    hem displayden ısı derecesi yazıcak hemde 30 derece olursa porta nın boş ayaklarından birini 1 yapıcak ?

  • Extreme

    o kadar çok transistör almaktansa Display Sürücüsü İle Sürmek Daha İyi Degilmi?

  • Muhammet Emin Biçer

    selamun aleyküm okuldan ödev olarak verdiler bu devreyi ama pic programlama ile ilgili pek bilgim yok programa nasıl atabilirim yada elinde yazılmış halde olan varsa atabilrmi rica etsem durum acil biraz 1 hafta süresi varda ben yüklemesini yapabilirim pice

  • TC Ilyas Bülent Bayram

    devrenin gerekli dosyalarını rica etsem ibbayram@gmail.com adresine yollarmısın hex şema pcb gibi şimdiden teşekkürler

  • TC Ilyas Bülent Bayram

    biz yardım istiyoruz ama boşuna :(