Elektronik / Mikrodenetleyici Projeleri/

8051 ile lcd ekranlı sıcaklık denetimi lm35 adc0831

Sponsorlu Bağlantılar

8051 ile lm 35 ısıs sensörü ve adc 0831 çevirici kullanımı için örnek detaylı bir proje. Hazırlayan :Özer Deniz Hazırlayan emeği geçen kişilere teşekkürler

Amaç: LM 35 sıcaklık sensörü ele alınan analog bilginin ADC 0831 ile dijitale dönüştürülmesi, bu bilginin sıcaklık olarak ifadesi ve LCD de gösterilmesi.

Özet: Programımızda; ADC’den gelen 8 bitlik sıcaklık bilgileri devamlı olarak taranarak ASCII koduna çevrilmekte ve LCD’de gösterilmektedir. Ortamdaki herhangi bir sıcaklık denetimi LM35 sıcaklık sensörü çıkışındaki voltajı değiştirmekte ve bu da ADC çıkışındaki dijital bilgiyi değiştirmektedir.

Yöntem: ADC0831 seri çıkış veren bir Analog Dijital çevirici olduğundan 8 bitlik datayı alabilmek için 8 clock darbesi üretilip ADC’ye gönderildi. Her clock darbesinden sonra ADC’nin seri çıkışından alınan bilgi akümülatörün en düşük değerlikli bitine verilmiş ve akümülatör bir sola kaydırılmıştır.

Böylece 8 clock’luk bir döngü sonunda istenilen dijItal bilgi akümülatöre kaydedilmiş olur. Her 8 clock’luk döngüden sonra ADC kapatılıp açılmalı ve yeni bir 8 bitlik data almaya hazır olmalıdır. Bunun için de ADC’nin CS’ ucu döngünün
başında “low”, döngünün sonunda ise “high” yapılmıştır.

Alınan 8 bitlik data acc de saklanır. Bu alınan değerin her bir rakamı lcd de gösterilir bunun için acc 100 bölünür elde edilen bölüm 100 basamağı, kalan değer sonra 10 bölünür elde edilen değer 10 lar basamağı ,en son kalan değerde birler basamağıdır. Bu değerleri lcd de göstermek için yüzler basamağından başlayarak sıra ile lcd ye gönderilir. Bu gönderme esnasında herbir değerin ASCII değerini göndermek zorundayız.

Bunun için göndermeden önce her değer decimal 48 ile toplanarak gönderilir. 48 decimal değeri 0 a karşılık gelir örneğin 48 +5 = 53 gönderdiğimiz zaman lcd de 5 görürüz.

Devre şeması
8051-adc0831-lm35-uygulama-devresi

Proje dosyaları (isis asm hex) 8051 ile lcd ekranlı sıcaklık denetimi lm35 adc0831

Dosya indirme LINK listesi (TXT formatında) link-6941.zip şifre-pass: 320volt.com

8051 Assembly yazılımı

;/*================================*/
;Uygulama Adı:Klima
;Yazan: Özer Deniz - 05057090 - ozrdnz1903@gmail.com
;Dosya Adı:KLM3.ASM
;Tarih:30 Mart Pazar
;Hedef İşlemci:8051 Ailesi
;Açıklama: LM35 sıcaklık sensörü ele alınan analog bilginin ADC0831 ile 
;dijitale dönüştürülmesi, bu bilginin sıcaklık olarak ifadesi ve LCD de 
;gösterilmesi.
;Çıkış:P2 portu üzerinden LCD'ye yapılıştır.
;/*================================*/

ORG 0000H
SJMP MAIN
ORG 0003H
LJMP EX0ISR
        
MAIN:

MOV IE,#81H
;---------------LCD 8-BİT----------
;LCD'NİN MİKROİŞLEMCİ BAĞLANTILARI

E		EQU	P3.7		; PIN 6 ENABLE
RW		EQU     P3.6		;
RS 		EQU	P3.5		;/REGİSTER SELECT
DATA	        EQU	P2	        ; DATA LİNES

;----------------------------------------------------------
;ADC'NİN MİKROİŞLEMCİ BAĞLANTILARI

CS		EQU P3.4
CLK     EQU P3.3
DO		EQU P3.1
;----------------------------------------------------------
;LED'LER KLİMANIN ÇALIŞMA DURMUNU GÖSTEREN LEDLER

LED_RED  EQU P1.4
LED_BLUE EQU P3.0
SETB LED_RED
SETB LED_BLUE

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


GO:   
GO2:  LCALL ADC_AL
      LCALL LCD_RESET
      LCALL LCD_YAZ2
      SJMP GO2
      
;---------------------LİMİTLERİ_AL--------------------------
;KULLANILANLAR=R0,R5,R2,P1

UPDOWNLIMIT: MOV R0,#50H
             MOV R5,#00H
             MOV P2,#00H

SCAN:
SATIR1:MOV P1,#11111110B 
       JNB P1.5, BIR
       JNB P1.6, IKI
       JNB P1.7, UC
       
     
SATIR2:MOV P1,#11111101B
       JNB P1.5, DORT
       JNB P1.6, BES
       JNB P1.7, ALTI
       
     
SATIR3:MOV P1,#11111011B 
       JNB P1.5, YEDI
       JNB P1.6, ARASEKIZ
       JNB P1.7, ARADOKUZ
       
     
SATIR4:MOV P1,#11110111B
       JNB P1.6,SIFIR
SJMP SCAN

ARADOKUZ:LJMP DOKUZ
ARASEKIZ:LJMP SEKIZ

SIFIR: 
	  MOV P2,#03FH;----0----
	  MOV R2,#0
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  LJMP GIRISKONTROL
        

BIR: 
          MOV P2,#006H       
	  MOV R2,#1
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  LJMP GIRISKONTROL
IKI: 
          MOV P2,#05BH
	  MOV R2,#2
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  SJMP GIRISKONTROL
UC: 
          MOV P2,#04FH	  
	  MOV R2,#3
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  SJMP GIRISKONTROL
DORT: 
          MOV P2,#066H	 
	  MOV R2,#4
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  SJMP GIRISKONTROL

BES: 
          MOV P2,#06DH
	  MOV R2,#5
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  SJMP GIRISKONTROL
ALTI: 
          MOV P2,#07DH	  
	  MOV R2,#6
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  SJMP GIRISKONTROL
YEDI: 
          MOV P2,#007H	  
	  MOV R2,#7
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  SJMP GIRISKONTROL

SEKIZ: 
          MOV P2,#07FH
	  MOV R2,#8
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE
	  SJMP GIRISKONTROL

DOKUZ: 
          MOV P2,#06FH
	  MOV R2,#9
	  INC R5
	  CALL YAZ
	  CALL BİRSANİYE

SJMP GIRISKONTROL

	  
GIRISKONTROL2:LJMP SCAN	  	  
GIRISKONTROL:
             CJNE R5,#04H,GIRISKONTROL2
             MOV R0,#50H
             RET 


		
;-------------ADC_AL------------------		
;KULLANILANLAR=R3,CS,DO,CLK,62H,54H,55H,56H

ADC_AL: MOV A,#00H
        MOV R3,#8
  		CLR CS
		NOP
		NOP
ADC_AL2:MOV C,DO
		MOV ACC.0,C
		RL A
		SETB CLK
		NOP
		NOP
		CLR CLK
		NOP
		NOP
		DJNZ R3,ADC_AL2
		SETB CS
		MOV 62H,A;ADC DEN ALINAN SICAKLIK DEĞERİNİ TUTUYOR
		MOV B,#100
		DIV AB
		MOV 54H,A
		MOV A,B
		MOV B,#10
		DIV AB
		MOV 55H,A
		MOV 56H,B
		
		RET        
		
;--------KARSİLASTİR---------------
;KULLANILANLAR=60H,61H,62H,LED_RED,LED_BLUE

KARSİLASTİR:CLR C
            MOV A,62H
            SUBB A,60H 
            JC HAVASOGUK
            MOV A,61H
            SUBB A,62H
            JC HAVASİCAK
            JNC SICAKLIKNORMAL
            RET

HAVASOGUK:CLR LED_BLUE
          SETB LED_RED
          RET

HAVASİCAK:CLR LED_RED
          SETB LED_BLUE
          RET            

SICAKLIKNORMAL: SETB LED_RED
                 SETB LED_BLUE
                 RET


;----------LCD_YAZ--------------	
;KULLANILANLAR=50H,51H,52H,53H,54H,55H,56H

LCD_YAZ1: 
     
LCALL BİRİNCİSATİR
     
     MOV A,#'M'   
     LCALL DATAGONDER
     MOV A,#'I'
     LCALL DATAGONDER
     MOV A,#'N'
     LCALL DATAGONDER
     MOV A,#'='
     LCALL DATAGONDER
     
     MOV A,50H
     ADD A,#48
     LCALL DATAGONDER
     MOV A,51H
     ADD A,#48
     LCALL DATAGONDER 
     
     
     MOV A,#' '
     LCALL DATAGONDER
     MOV A,#'M'
     LCALL DATAGONDER
     MOV A,#'A'
     LCALL DATAGONDER
     MOV A,#'X'
     LCALL DATAGONDER
     MOV A,#'='
     LCALL DATAGONDER
       
     MOV A,52H
     ADD A,#48
     LCALL DATAGONDER
     MOV A,53H
     ADD A,#48
     LCALL DATAGONDER          
     
LCD_YAZ2:
         LCALL İKİNCİSATİR   
            
     MOV A,#'S'
     LCALL DATAGONDER
     MOV A,#'I'
	 LCALL DATAGONDER
	 MOV A,#'C'
	 LCALL DATAGONDER
	 MOV A,#'A'
	 LCALL DATAGONDER
	 MOV A,#'K'
	 LCALL DATAGONDER
	 MOV A,#'L'
	 LCALL DATAGONDER
	 MOV A,#'I'
	 LCALL DATAGONDER
	 MOV A,#'K'
	 LCALL DATAGONDER
	 MOV A,#'='
	 LCALL DATAGONDER  
     
     MOV A,54H
     ADD A,#48
     LCALL DATAGONDER
     MOV A,55H
     ADD A,#48
     LCALL DATAGONDER
     MOV A,56H
     ADD A,#48
     LCALL DATAGONDER 
     RET
;------------YAZ-----------------------
;KULLANILANLAR=50H,51H,52H,53H,60H,61H

YAZ: MOV A,R2
	 MOV @R0,A
	 INC R0
	 CJNE R0,#54H,YAZ1
     
     MOV A,50H
     MOV B,#10
     MUL AB
     ADD A,51H
     MOV 60H,A
    
     
     MOV A,52H
     MOV B,#10
     MUL AB
     ADD A,53H
     MOV 61H,A
       
YAZ1: RET	

;-----------BİRSANİYE----------------
;KULLANILANLAR=R3,T0       

BİRSANİYE:MOV TMOD,#01H
         MOV R3,#100
LOOP:MOV TH0,#(-10000)
	 MOV TL0,#(-10000)
	 SETB TR0
     JNB TF0,$
	 CLR TF0
	 CLR TR0
	 DJNZ R3,LOOP
     RET

;-----------LCD FONKİSYONLARI-----------    
;KULLANILANLAR=DATA(P2),RS,RW,E,R6,R4

LCD_RESET:

          MOV   DATA,#38H
		  CLR   RS
		  LCALL CLOCK
		  LCALL DELAY
		  MOV   DATA,#38H   

		  CLR   RS
		  LCALL CLOCK
		  LCALL DELAY
		  MOV   DATA,#38H
		  CLR   RS
		  LCALL CLOCK
		  LCALL DELAY
		  MOV   DATA,#3CH 	;LCD FONKSİYONU SEÇME   		

		  CLR   RS
		  LCALL CLOCK
		  LCALL DELAY
		  MOV DATA,#0CH
 
		  CLR RS
		  LCALL CLOCK
		  LCALL DELAY

		  MOV   DATA,#06H     
		  CLR   RS
		  LCALL DELAY
		  LCALL CLOCK
	      RET

LCD_RESET2:MOV   DATA,#01H
		  CLR   RS
		  LCALL CLOCK
		  LCALL DELAY
		  RET
		  
DATAGONDER:MOV DATA,A
           SETB RS
           LCALL CLOCK
           LCALL DELAY
           RET
                  
BİRİNCİSATİR:MOV DATA,#128
             CLR RS
             LCALL CLOCK
             RET

İKİNCİSATİR:MOV DATA,#192
            CLR RS
            LCALL CLOCK
            RET

CLOCK:	CLR   RW
        CLR   E
        LCALL CLOCK2
        SETB  E
        LCALL CLOCK2
        CLR   E
        LCALL CLOCK2
        RET            
                   
CLOCK2: MOV R6,#10
DON:	NOP
        NOP 
        NOP
        NOP
        NOP
        DJNZ R6,DON
        RET
        
DELAY:	MOV R4,#5
		MOV TMOD,#01H
DONG2:	MOV TH0,#HIGH(-10000)
		MOV TL0,#LOW(-10000)	
		SETB TR0
		JNB TF0,$
		CLR TF0
		CLR TR0
		DJNZ R4,DONG2
		RET
		
EX0ISR: 
        ACALL LCD_RESET2
        LCALL UPDOWNLIMIT
        LCALL ADC_AL
        LCALL KARSİLASTİR
        LCALL LCD_RESET
        LCALL LCD_YAZ1
        RETI	
;--------------------------
  • ali

    Herşey için çok teşekkürler ama bu asm dosyasında aseemy ettiğinde 50 tane hata çıkıyor nasıl yaparız onu :( bi yardım etsen

  • ..

    bunu 16f877 ile yazabilirmyiz ?

  • apo

    ali dediğin doğru bende gazideyim sen benden önce ordaydın galiba bitti mi okul elektronik nasıldı:) siteye tşk

  • Semih

    Alıntı – ali :
    Herşey için çok teşekkürler ama bu asm dosyasında aseemy ettiğinde 50 tane hata çıkıyor nasıl yaparız onu bi yardım etsen

    Etiketleri değiştirince hata vermiyor.
    DATA yerine VERI, İ’li yerlere de I yazdım ben, 0 hata,3 uyarı verdi.