Soru:
8051 internal data memory 30H adresinde pozitif sayılardan oluşan 25d byte uzunluğunda bir X dizisi bulunmaktadır. Y= Toplam(20 x X + 7) bağıntısı ile tanımlı sonucu hesaplayan ve bellekte 50H adresine kaydeden program.
MOV R0,#30H
MOV R1,#25
MOV R2,#0
TEKRAR:
MOV B,#20
MOV A,@R0
MUL AB ;SIRADAKI ELEMAN 20 ILE CARPILDI
CLR C ;CARRY TEMIZLENDI
ADD A,#7 ;SIRADAKI ELEMAN 7 ILE TOPLANDI
JNC DEVAM1
CLR C
INC B
JNC DEVAM1
INC R2
DEVAM1:
CLR C
ADD A,50H
MOV 50H,A
JNC DEVAM2
CLR C
INC 51H
JNC DEVAM2
CLR C
INC 52H
DEVAM2:
CLR C
MOV A,B
ADD A,51H
MOV 51H,A
JNC DEVAM3
CLR C
INC 52H
DEVAM3:
CLR C
MOV A,R2
ADD A,52H
MOV 52H,A
INC R0
CJNE R0,#49H,TEKRAR
END
P1 Portuna bağlı ortak katot 7 segment displayi sürekli 0'dan 9'a kadar saydıran program:
MOV 50H,#11111100B ;0
MOV 51H,#01100000B ;1
MOV 52H,#11011010B ;2
MOV 53H,#11110010B ;3
MOV 54H,#01100110B ;4
MOV 55H,#10110110B ;5
MOV 56H,#10111110B ;6
MOV 57H,#11100000B ;7
MOV 58H,#11111110B ;8
MOV 59H,#11100110B ;9
MOV R0,#4FH
TEKRAR:
INC R0
MOV P1,@R0
LCALL BEKLE
CJNE R0,#59H,TEKRAR
MOV R0,#4FH
JMP TEKRAR
BEKLE:
MOV R2,#0FFH
MOV R1,#0FFH
TEKRARB:
DJNZ R1,TEKRARB
DJNZ R2,TEKRARB
RET
P1 Portuna bağlı bir ortak katot display, P2,0 portuna bağlı bir butona basıldıkça ondalık olarak saydırılacaktır. P2,1 portuna bağlı olan butonla da sıfırlanacaktır. Çözümü:
MOV 50H,#11111100B ;0
MOV 51H,#01100000B ;1
MOV 52H,#11011010B ;2
MOV 53H,#11110010B ;3
MOV 54H,#01100110B ;4
MOV 55H,#10110110B ;5
MOV 56H,#10111110B ;6
MOV 57H,#11100000B ;7
MOV 58H,#11111110B ;8
MOV 59H,#11100110B ;9
MOV P1,#11111100B ;0
MOV R0,#50H
TEKRAR:
MOV A,P2
ANL A,#00000001B
CJNE A,#1,RESET?
CJNE R0,#59H,DEVAM
JMP RESET?
DEVAM:
INC R0
MOV P1,@R0
LCALL BEKLE
JMP TEKRAR
RESET?:
MOV A,P2
ANL A,#00000010B
CJNE A,#2,TEKRAR
MOV R0,#50H
MOV P1,@R0
LCALL BEKLE
JMP TEKRAR
BEKLE:
MOV R2,#0FFH
MOV R1,#0FFH
TEKRARB:
DJNZ R1,TEKRARB
DJNZ R2,TEKRARB
RET
30H adresinde 25D uzunluğundaki bir dizi yer almaktadır. Y= (X^2)-5 bağıntısı ile tanımlı Y dizisini 50H adresinden itibaren oluşturunuz:
MOV R0,#2FH
MOV R1,#50H
TEKRAR:
INC R0
MOV A,@R0
MOV B,A
MOV A,@R0
MUL AB
CLR C
SUBB A,#5
JNC DEVAM1
DEC B
DEVAM1:
MOV @R1,A
INC R1
MOV @R1,B
INC R1
CJNE R0,#49H,TEKRAR
END
P2.0 a basınca tek, P2.1 set olunca da çift sayan program:
MOV DPTR,#0700H
MOV R5,#0
TEKRAR:
MOV C,P2.0
JC TEK
MOV C,P2.1
JC CIFT
JMP DEVAM
TEK:
MOV R3,#1
JMP DEVAM
CIFT:
MOV R3,#0
DEVAM:
MOV A,R5
MOVC A,@A+DPTR
MOV P1,A
LCALL BEKLE
INC R5
INC R5
CJNE R5,#0AH,DEVAM2
DEVAM2:
JC TEKRAR
SIFIRLA:
MOV A,R3
MOV R5,A
JMP TEKRAR
BEKLE:
MOV R2,#0FFH
MOV R1,#0FFH
TEKRARB:
DJNZ R1,TEKRARB
DJNZ R2,TEKRARB
RET
org 700h
DB 11111100B ;0
DB 01100000B ;1
DB 11011010B ;2
DB 11110010B ;3
DB 01100110B ;4
DB 10110110B ;5
DB 10111110B ;6
DB 11100000B ;7
DB 11111110B ;8
DB 11100110B ;9
P2 portuna bağlı 8 adet ledi sağa ve sola kaydıran program:
MOV A,#01H
MOV P2,A
SOLA:
LCALL BEKLE
CJNE A,#128,SOLA2
LJMP SAGA
SOLA2:
RL A
MOV P2,A
LJMP SOLA
SAGA:
LCALL BEKLE
CJNE A,#1,SAGA2
LJMP SOLA
SAGA2:
RR A ;
MOV P2,A
LJMP SAGA
BEKLE:
MOV R4,#0FFH
D2:
MOV R5,#0FFH
D1:
DJNZ R5,D1
DJNZ R4,D2
RET
TMR1 Kullanılarak yapılmış, P1.0 pğortundan 500Hz frekansında kare dalga üreten program:
ORG 0000H
LJMP ANA
ORG 001BH
MOV TL1,#17H
MOV TH1,#0FCH
LJMP TMR1
ANA:
MOV TMOD,#10H
MOV TL1,#17H
MOV TH1,#0FCH
SETB TR1
SETB EA
SETB ET1
DON:
SJMP DON
TMR1:
PUSH PSW
CPL P1.0
POP PSW
RETI
END
(https://www.teknolojiekibi.com/yeni/proxy.php?request=http%3A%2F%2Fimg141.imageshack.us%2Fimg141%2F8803%2F21348155.jpg&hash=0c26503bc06f3e7aa5d0e0f6ffd0f009c89af243) (http://www.postimage.org/)
Timer1 kullanılarak T1 girişinbe uygulanan 10KHz frekansındaki sinyali P1.0 çıkışında 10Hz'e düşüren program:
ORG 0000H
LJMP ANA
ORG 001BH
MOV TL1,#9BH
MOV TH1,#9BH
LJMP TMR1
ANA:
MOV TMOD,#60H
MOV TL1,#9BH
MOV TH1,#9BH
SETB TR1
SETB EA
SETB ET1
DON:
SJMP DON
TMR1:
PUSH PSW
CPL P1.0
POP PSW
RETI
END
(https://www.teknolojiekibi.com/yeni/proxy.php?request=http%3A%2F%2Fimg241.imageshack.us%2Fimg241%2F5227%2F55376795.th.jpg&hash=b33ca416d6e0a47f2f8893d949a2d538a6b2e6ad) (http://www.postimage.org/image.php?v=gxKcbdA)
!!!!!!!!!!!!ACİLLL!!!!!!!!!!!
OFC3H adresinden başlayan dizinin uzunluğu R1 kayıtçısında saklıdır bu dizindeki her elemanı 2 ile çarpan ve çarpımında 2 bit sağa döndüren 8051 programını yazınız....
yapabilirseniz cok işime yarar acillll.........