KARABÜK ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ MTM 305 MİKROİŞLEMCİLER Arş. Gör. Emel SOYLU Arş. Gör. Kadriye ÖZ
Basit Giriş/Çıkış Teknikleri
IN ve OUT komutları X86 komut kümesi kullanan işlemcilerde verinin I/O cihazlarından alınması veya bu cihazlara veri gönderilmesi işi IN ve OUT komutlarıyla gerçekleşmektedir. IN kaydedici, port OUT port, kaydedici IN EAX/AX/AL,PORT OUT PORT,EAX/AX/AL
Dinamik adres tanımlama MOV AL,B6H MOV DX,43H OUT DX,AL
PORT NO Portlar bilgisayar sistemini dış dünyaya açan bir kapı olarak düşünülebilir. Her portun standart bir adresi vardır.
Dinamik adres örnekleri ADRESLER 040H-043H 060H-06FH 061H 278H-27GH 2F8H-2FFH 300H-31FH 378H-3FFH 3BCH-3BFH MANALARI Zamanlayıcı ve Sayıcı 8042 Klavyedeb giriş 8255 portu (0. ve 1. bitler hoparlör için) Paralel port LPT-3 Seri port-com2 Prototip kart Paralel port LPT-1 Paralel port LPT-1
Örnek YAZI DW 03BCH. MOV BL, @ MOV DX,YAZI MOV AL,BL OUT DX,AL @ karakterini LPT1 üzerindeki yazıcıya gönderen program
Örnek: #make_com# ORG 100h ;115 NOLU PORTA 215 DEĞERİNİ YAZ mov al, 215 out 115, al ;117 NOLU PORTA 1234 DEĞERİNİ YAZ mov ax, 1234 out 117, ax ;RESETLE mov ax, 0 ;110 NOLU PORTTAKİ DEĞERİ AL YE OKU in al, 110 ;PORT 112 DEKİ DEĞERİ AX'E OKU in ax, 112 ret
;PRINTIRA YAZI GÖNDERME ÖRNEĞİ #make_com# ORG 100h MESAJ db "MEKATRONIK",10,13,"BOLUMU",07 lea bx, MESAJ ; MESAJIN İLK ADRESİNİ BX'E AL mov cx, 19d ; MESAJ UZUNLUĞU mov ax, 0h ; AX'İ SIFIRLA GONDER: mov al, [bx] ; KARAKTERİ AL'YE AL out 130d, al ; KARAKTERİ ÇIKIŞ PORTUNA KOY INC BX ; BX'i BİR ARTIR BEKLE: ; PRINTERIN HAZIR OLMASINI BEKLE IN al, 130d ; HAZIRSA PORTU TEMİZLE OR al, 0 ; JNZ BEKLE loop GONDER ; CX SIFIRLANANA KADAR DÖNGÜ ret
; TRAFİK IŞIKLARI ÖRNEĞİ #MAKE_BIN# #CS = 500# #IP = 0# ;TRAFİK IŞIKLARI ÖRNEĞİ MOV AX, 0000000000000001B DONGU: OUT 4, AX JMP DONGU
Led Display örneği mov ax, 1234 out 199, ax mov ax, -5678 out 199, ax mov ax, 0 hlt
;EMU8086 SAYAÇ #make_com# ; COM file is loaded at CS:0100h ORG 100h mov cx,10 mov al,01 mov dx,199 git1: out dx,al loop git1 mov cx,10 inc ax jmp git1 hlt
Step Motor (Adım Motoru) Step motor elektrik enerjisini dönme enerjisine çeviren elektromekanik bir cihazdır. Step motorlarda rotor hareketleri dijital sinyallere göre değişir. Motorun bir adımda ne kadar yol alacağı yapısına bağlıdır. Örneğin bir adımda 90,45,30,18 derece ya da daha küçük açı aralıklarında olabilir. Motora uygulanacak sinyallerin frekansı değiştirilerek motorun hızı değiştirilebilir. Ayrıca uygulanan sinyallerin sırası değiştirilerek motorun yönü saat yönü veya saat yönünün tersi olarak ayarlanabilir. Step motorlar bir turda yaptığı adım sayısı ile tanımlanırlar. Örneğin 600 adımlık bir step motor 360 derece döndüğü zaman 600 adım yapmış olur. Yani adım açısı 0.6 derece olur. Bir step motor yarım adım modunda çalışıyorsa iki katı adım yapar.
Step Motor (Adım Motoru) Emu8086 similasyon programındaki step motor yarım adım 11.25 derece, tam adım 22.5 derece dönmektedir. Motor saat yönü ve saat yönünün tersinde döndürülebilmektedir. 7 nolu porta değer göndererek motor kontrol edilmektedir. Bu motor 3 fazlı temel bir motordur. Motorun içindeki üç mıktatıs 0,1 ve 2. bitlerle kontrol edilmektedir. Diğer bitler kullanılmamaktadır. Mıknatıs çalışırken kırmızı olur. Yeşil çizgi motorun hareketini göstermektedir. Yarım adım dönme: 2 mıknatıs aktif ardından bir mıknatıs aktif Tam adım dönme: 2 mıknatıs aktif, ardından iki mıknatıs aktif, ardından tek mıknatıs aktif ;3 tane saat yönünde yarım adım MOV AL, 001b ; başla MOV AL, 011b ; yarım adım 1. MOV AL, 010b ; yarım adım 2. MOV AL, 110b ; yarım adım 3.
Step motor örnek org 100h #start=stepper_motor.exe# ;tam adım saat yönünün tersi MOV CX,20 GIT1: MOV AL, 100b MOV AL, 110b MOV AL, 011b LOOP GIT1 ;tam adım saat yönü MOV CX,20 GIT2: MOV AL, 100b MOV AL, 011b MOV AL, 110b LOOP GIT2 ;yarım adım saat yönü MOV CX,20 GIT3:MOV AL, 001b MOV AL, 011b MOV AL, 010b MOV AL, 110b LOOP GIT3 ;yarım adım saat yönünün tersi GIT4:MOV CX,20 MOV AL,100B MOV AL,110B MOV AL,010B MOV AL,011B LOOP GIT4 ret
PARALEL PORTA VERİ GÖNDERME
ÖRNEK: Önce 0. sonra 1. ledi yakan program MOV AL,00000001B G1:OUT DX,AL ;bekleme yapıyoruz LOOP G1 MOV AL,00000010B G2:OUT DX,AL LOOP G2
TITLE 8086 Code Template (for EXE file) ; AUTHOR emu8086 ; DATE? ; VERSION 1.00 ; FILE?.ASM ; 8086 Code Template ; Directive to make EXE output: #MAKE_EXE# DSEG SEGMENT 'DATA ; TODO: add your data here!!!! DSEG ENDS SSEG SEGMENT STACK 'STACK' DW 100h DUP(?) SSEG ENDS CSEG SEGMENT 'CODE ;********************************** ********* START PROC FAR ; Store return address to OS: PUSH DS MOV AX, 0 PUSH AX ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX ; TODO: add your code here!!!! MOV AX,0B800H MOV DS,AX MOV [00H],' WK1:MOV AH,1 INT 16H JZ WK1 MOV AH,0 INT 16H CMP AL,31h JZ DURUM1 CMP AL,32h JZ DURUM2 CMP AL,33h JZ DURUM3 CMP AL,34h JZ DURUM4 CMP AL,35h JZ DURUM5 CMP AL,36h JZ DURUM6 CMP AL,37h JZ DURUM7 CMP AL,38h JZ DURUM8 JMP WK1 DURUM1: MOV CX,000fh MOV DX,03BCH GONDER1: MOV AL,01H OUT DX,AL LOOP GONDER1 JMP WK1 DURUM2: MOV CX,000fh MOV DX,03BCH GONDER2: MOV AL,02H OUT DX,AL LOOP GONDER2 JMP WK1 DURUM3: MOV CX,000fh MOV DX,03BCH GONDER3: MOV AL,04H OUT DX,AL LOOP GONDER3 JMP WK1 DURUM4: MOV CX,000fh MOV DX,03BCH GONDER4: MOV AL,08H OUT DX,AL LOOP GONDER4 JMP wk1 DURUM5: MOV CX,000fh MOV DX,03BCH GONDER5: MOV AL,00010000b OUT DX,AL LOOP GONDER5 JMP wk1 DURUM6: MOV CX,000fh MOV DX,03BCH GONDER6: MOV AL,00100000b OUT DX,AL LOOP GONDER6 JMP wk1 DURUM7: MOV CX,000fh MOV DX,03BCH GONDER7: MOV AL,01000000b OUT DX,AL LOOP GONDER7 JMP wk1 DURUM8: MOV CX,000fh MOV DX,03BCH GONDER8: MOV AL,10000000b OUT DX,AL LOOP GONDER8 JMP wk1 ; return to operating system: RET START ENDP ;********************************** ********* CSEG ENDS END START ; set entry point.
TITLE 8086 Code Template (for EXE file) ; AUTHOR emu8086 ; DATE? ; VERSION 1.00 ; FILE?.ASM ; 8086 Code Template ; Directive to make EXE output: #MAKE_EXE# DSEG SEGMENT 'DATA' ; TODO: add your data here!!!! DSEG ENDS SSEG SEGMENT STACK 'STACK' DW 100h DUP(?) SSEG ENDS CSEG SEGMENT 'CODE' ;********************************** ********* START PROC FAR ; Store return address to OS: PUSH DS MOV AX, 0 PUSH AX ; set segment registers: MOV AX, DSEG MOV DS, AX MOV ES, AX MOV DX,03BCH BASLA: MOV AL,00000001B G1:OUT DX,AL LOOP G1 MOV AL,00000010B G2:OUT DX,AL LOOP G2 MOV AL,00000100B G3:OUT DX,AL LOOP G3 MOV AL,00001000B G4:OUT DX,AL LOOP G4 MOV AL,00010000B G5:OUT DX,AL LOOP G5 MOV AL,00100000B G6:OUT DX,ALLOOP G6 MOV AL,01000000B G7:OUT DX,AL LOOP G7 MOV AL,10000000B G9:OUT DX,AL LOOP G9 MOV AL,01000000B G10:OUT DX,AL LOOP G10 MOV AL,01000000B G11:OUT DX,AL LOOP G11 MOV AL,00100000B G12:OUT DX,AL LOOP G12 MOV AL,00010000B G13:OUT DX,AL LOOP G13 MOV AL,00001000B G14:OUT DX,AL LOOP G14 MOV AL,00000100B G15:OUT DX,AL LOOP G15 MOV AL,00000010B G16:OUT DX,AL LOOP G16 MOV AL,00000001B G17:OUT DX,AL LOOP G17 JMP BASLA ; return to operating system: RET START ENDP ;********************************** ********* CSEG ENDS END START ; set entry point.
Beni dinlediğiniz için teşekkür ederim.