Şimdi Ara

Pic16F877 Acil yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
1
Cevap
0
Favori
528
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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

    PSP_CtrlByte equ 0x20
    PSP_inputBuffer equ 0x21
    PSP_outputBuffer equ 0x21

    ORG 0
    clrf PCLATH
    goto Ana_Program

    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
    ;*******************************************************************
     Pic16F877 Acil yardım







  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.