ozerdenizege | | Tarih: 16.03.2008, 15:40 Mesaj konusu: 8051 ile Klima Kontrolü Programı(Yardım) | |
| arkadaşlar aranızda 8051 ile ilgilenen varsa yardımlarınızı bekliyorum..
uygulama 4: klma
bu uygulamada once lm35 ve adc ile bir scaklk ölçüm düzenei kurmanz isteniyor.
ınt1 giriine uygulanacak bir kesme ile keypaddan scaklk için alt ve üst limitler girilecek
(mesela 20 ile 30 derece) . scaklk girilen bu limitler arasnda iken 1 sn aralklarla ölçülen
caklk deerleri lcd de gösterilecek. scaklk alt limitten a düerse sar, üst limitten
yukar çkarsa krm uyar ledi yanacak.
progamı yazdım fakat adc'den çıkış alamıyorum.diğer bir sorun da programın kesme servis rutininden çıkamamsı kodlar ve devre şeması aşağıda.. yardımcı olabilirseniz cok sevinirim.
org 00h
ljmp maın
;||* keypad taranarak alt ve üst sıcaklık limitlerinin*||
;||* alınıp kaydedildiği kesme altrutini*||
org 0003h
ljmp ex0ısr
;||*ana program bloğu*||
maın:
mov ıe,#81h
mov p1,#00h
mov r3,#00h
mov r4,#00h
clr p3.0
clr p3.1
mov p2,#00h
;||* ortamdaki sıcaklık değerlerinin 1sn*||
;||* aralıklarla ölçülmesi ve lcd'ye yansıtılması*||
recdata:
setb p3.4 ;clock pini
clr p2.4 ;cs pini
acall delay5ms
clr p3.4
acall delay5ms
setb p3.4
mov a,p3.5 ;data out pini
acall delay5ms
clr p3.4
acall delay5ms
agaın:
ınc r4
setb p3.4
mov c,p3.5
acall delay5ms
rlc a
clr p3.4
acall delay5ms
cjne r4,#07h,agaın
mov r4,#00h
lcall cevır
;||* cs'yi lojik 0 yaparak bilgi gönderimini
;||* başlatıyoruz...
setb p3.4
setb p2.4
acall delay5ms
clr p3.4
acall delay5ms
;||* lcd'yi on komutu göndererek dac'ın
;||* data out çıkışından alınan bilgiyi
;||* lcd'ye yansıtıyoruz...
clr p3.6
mov p1,#00001111b
setb p3.7
acall delay5ms
clr p3.7
setb p3.6
mov r4,a
anl a,#11110000b
mov b,#10h
dıv ab
add a,#45
mov p1,a
setb p3.7
acall delay5ms
clr p3.7
mov a,r4
anl a,00001111b
add a,#45
mov p1,a
setb p3.7
acall delay5ms
clr p3.7
clr p3.6
mov p1,#00000001b
setb p3.7
acall delay5ms
clr p3.7
acall delay1s
sjmp compare
;||* acc'ye yüklediğimiz sayısal bilgiyi
;||* dereceye çeyiriyoruz...
cevır:mov b,#5
dıv ab
mov b,#2
mul ab
ret
;||* kullanıcı tarafından girilen alt ve
;||* üst limitlerle anlık sıcaklığı
;||* karşılaştırıyoruz...
compare:mov r3,a
clr c
mov a,52h
mov b,#10h
mul ab
add a,53h
subb a,r3
jc lowtemp
clr c
mov a,50
mov b,#10h
mul ab
add a,51h
subb a,r3
jnc hıghtemp
ljmp recdata
lowtemp:setb p3.0
acall delay5ms
clr p3.2
ljmp recdata
hıghtemp:setb p3.1
acall delay5ms
clr p3.3
ljmp recdata
;||* gecikme alt programları *||
delay5ms:count1 equ -1000
mov tmod,#01h
mov r4,#05h
agaın5: mov th0,#hıgh count1
mov tl0,#low count1
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r4,agaın5
ret
delay1s:count2 equ -10000
mov tmod,#01h
mov r4,#90
agaın1s: mov th0,#hıgh count2
mov tl0,#low count2
setb tr0
jnb tf0,$
clr tr0
clr tf0
djnz r4,agaın1s
ret
ex0ısr:
mov p2,#00h
mov r2,#00h
mov r5,#00h
scan:
satır1:mov p2,#11111110b
jnb p2.5, bır
jnb p2.6, ıkı
jnb p2.7, uc
satır2:mov p2,#11111101b
jnb p2.5, dort
jnb p2.6, bes
jnb p2.7, altı
satır3:mov p2,#11111011b
jnb p2.5, yedı
jnb p2.6, sekız
jnb p2.7, dokuz
satır4:mov p2,#11110111b
jnb p2.6,sıfır
sjmp scan
sıfır: mov r5,#00h
sjmp updownlımıt
bır: mov r5,#01h
sjmp updownlımıt
ıkı: mov r5,#02h
sjmp updownlımıt
uc: mov r5,#03h
sjmp updownlımıt
dort: mov r5,#04h
sjmp updownlımıt
bes: mov r5,#05h
sjmp updownlımıt
altı: mov r5,#06h
sjmp updownlımıt
yedı: mov r5,#07h
sjmp updownlımıt
sekız: mov r5,#08h
sjmp updownlımıt
dokuz: mov r5,#09h
sjmp updownlımıt
;||* keypad'ten alınan değerlerin*||
;||* kaydedildiği altprogram*||
updownlımıt:
tus1:cjne r2,#00h,tus2
ınc r2
mov 50h,r5
acall delay5ms
ljmp scan
tus2:cjne r2,#01h,tus3
ınc r2
mov 51h,r5
acall delay5ms
ljmp scan
tus3:cjne r2,#02h,tus4
ınc r2
mov 52h,r5
acall delay5ms
ljmp scan
tus4:mov r2,#00h
mov 53h,r5
retı
end
|
|