Merhaba. vize ödevi olarak fotoğraftaki devreyi çizmem gerekiyor fakat sağ taraftaki malzemeyi isiste bulamadım. birde mplab da çalışıp çalışmadığından emin değilim kodları aşağıda gönderiyorum bana yardım ederseniz çok sevinirim. bu ilk konum ve yorumum umarım devamı gelir şimdiden teşekkür ederim...
;***************************************************************** ; Dosya Adı : 10_1.asm ; Programın Amacı : PSP kullanımı ; Notlar : Proteus programı simülasyonu ; : XT ==> 20Mhz ;******************************************************************* list p = 16F877A include "p16F877A.inc" __config H'3F3A' ;Tüm program sigortaları kapalı, ;Osilatör HS ve 20Mhz ;------------------------------------------------------------------- ; Genel değişken tanımlamaları ;------------------------------------------------------------------- #define PSP_errorFlag 7 #define PSP_inputFlag 6 #define PSP_outputFlag 5
ORG 4 ;------------------------------------------------------------------- ; PSP'den gelen kesmeleri işler. Veri alındı ise alınan veriyi ; PSP_inputBuffer'a yazar ve verinin alındığına dair PSP_inputFlag ; bayrağını set eder. Master cihazdan okuma komutu geldi ise ve ; gönderilecek bir veri daha önceden PSP_outputBuaffer'a yazıldı ise ; Master cihaza PORTD üzerinden veriyi transfer eder. Ve Verinin ; hazır olduğunu belirten PSP_outputFlag bayrağı siler. ;------------------------------------------------------------------- interrupt banksel PIR1 btfss PIR1, PSPIF ;PSP kesmesi oluştu ise (veri geldi ;ya da veri gönderildi ise) komut ;atla. goto int_son ;Kesme sonuna git ve kesmeden çık. banksel TRISE btfss TRISE, IBF ;Veri alındı ise komut atla. goto int_j1 banksel PSP_CtrlByte bsf PSP_CtrlByte, PSP_inputFlag ;Veri alındı bayrağını ;set et. movf PORTD, W ;Gelen veriyi W'ye al. movwf PSP_inputBuffer ;W'yi giriş buffer değişkenine ;aktar. int_j1 banksel TRISE ;Bank1'e geç. btfss TRISE, OBF ;Veri gönderildi ise komut atla. goto int_j2 banksel PSP_CtrlByte ;Bank0 seçildi, bu değişken ve ;PORTD aynı bankda. btfss PSP_CtrlByte, PSP_outputFlag ;veri gönderme bayrağı ;set ise komut atla. goto int_j2 movf PSP_outputBuffer, W ;Çıkış buffer değişkenine ;yüklenen veriyi movwf PORTD ;PORD'ye gönder. bcf PSP_CtrlByte, PSP_outputFlag ;Veri göndermeye hazır ;bayrağını sil. int_j2 banksel TRISE ;Bank1'e geç. btfss TRISE, IBOV ;PSP'de hata oluştuysa komut atla. goto int_son banksel PSP_CtrlByte bsf PSP_CtrlByte, PSP_errorFlag ;Hata bayrağını set et bcf TRISE, IBOV bcf PIR1, PSPIF ;PSP kesme bayrağını sil. int_son retfie ;------------------------------------------------------------------- ; PSP iletişimi ayarlar, portları yönlendirir ve kesmeleri ; aktifleştirerek PSP iletişimi başlatır. ;------------------------------------------------------------------- init banksel TRISE ;Bank1'e geçildi. movlw B'00110111' movwf TRISE ;PSPMODE aktif hale getirildi, RD, ;WR ve CS uçları giriş yapıldı. clrf TRISB ;PORTB çıkış yapıldı. movlw 0x07 movwf ADCON1 ;Analog girişler kapatıldı. ;PORTE'nin RD, WR ve CS girişleri ;için banksel PORTB ;Bank0'a geçildi. clrf PORTB ;PORTB'nin ilk çıkışları LOW ;yapıldı. clrf PSP_CtrlByte ;PSP değişkenlerinin ilk durumu ;sıfırlanıyor. clrf PSP_inputBuffer clrf PSP_outputBuffer banksel PIE1 bsf PIE1, PSPIE ;Paralel Slave Port kesmesi ;etkinleştirildi. bsf INTCON, PEIE ;Çevresel kesmeler etkinleştirildi. bsf INTCON, GIE ;Etkinleştirilen kesmelere izin ;verildi. return ;------------------------------------------------------------------- ; Ana program PSP'den yazma sinyali geldiğinde gelen veriyi alır ve ; PORTB üzerinde bağlı olan LED’ler üzerinde görüntüler. Veri okuma ; kısmı uygun bir master cihaz kullanılmadığı ve kurulan devremiz ; uygun olmadığı için boş bırakılmıştır, fakat gerekli ipucu ; verilmiştir. ;------------------------------------------------------------------- Ana_Program call init ana_j1 banksel PSP_CtrlByte btfss PSP_CtrlByte, PSP_inputFlag goto ana_j2 movf PSP_inputBuffer, W movwf PORTB bcf PSP_CtrlByte, PSP_inputFlag ;Veri alındı bayrağını ;sil. ana_j2 btfsc PSP_CtrlByte, PSP_outputFlag ;Çıkış verisi hazır ;bayrağı sıfır ise ;komut atla. goto ana_j1
;Buraya gönderilecek veriyi çıkış buffer değişkenine yazan kodlar ;eklenecek. Örneğin sayac diye bir değişken içeriğini çıkışa ;transfer etmek istersek
;movf sayac, W ;movwf PSP_outputBuffer
;sayac içeriği çıkış buffer'ına yazıldı, gönderilmek için beklemede
bsf PSP_CtrlByte, PSP_outputFlag ;Veri gönderme ;bayrağını set et ;(veri gönderilmeye hazır).
;Eğer MASTER cihazdan okuma (RD) sinyali gelirse TRISE'nin OBF bit’i ;set olur, kesmede ilgili kısım çalışır. PSP_outputBuffer'a yüklenen ;veri kesme içerisinden Master cihaza gönderilir ve PSP_outputFlag ;bayrağı silinir. goto ana_j1
END ;*******************************************************************
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme