Parallel Slave Port Sorunu.(Cözdüm)

Başlatan NaMcHo, 11 Aralık 2010, 16:48:48

NaMcHo

Merhabalar;
Dosyalar : http://hotfile.com/dl/88736932/6e8667d/PSP.rar.html
Ana kod
#include <pic168xa.h>
#include "delay.h"
#include "LCD216_benim.h" 

unsigned char bilgi[7];

void main(void)
{
    TRISB=0;    PORTB=0;
    TRISC=0;    PORTC=0;
    TRISD=0xFF; //PORTD=0;                 //Giriş olarak ayarli cunki veri girişi olucak,84' den.
    
                               //D portu PSP modunda.0 olsaydı genel çıkış giriş yapar.
    TRISE0=1;   TRISE1=1;   TRISE2=1;   //RD WR CS ayarlari.Giris olarak ayarlanmali.
    PCFG0=0;    PCFG1=1;    PCFG2=1;    PCFG3=0;        // AN0-7 bacaklari dijital yapildi.

    lcd_hazirla();
    
    PSPMODE=1;
    PSPIE=1;                            
    PSPIF=0;
    GIE=1;
    for(;;);
}

static void interrupt PSP(void)
{
    unsigned char a=0;
    if(PSPIF==1)
    {
        GIE=0;
        if(IBF==1)                //Bilgi alinmis mi diye kontrol ediliyor.
        {
            DelayMs(2);
            bilgi[0]=(PORTD & 1);   /*bilgi dizisine portd degeri bit bit aktariliyor.*/
            bilgi[1]=(PORTD & 2);
            bilgi[2]=(PORTD & 4);
            bilgi[3]=(PORTD & 8);
            bilgi[4]=(PORTD & 16);
            bilgi[5]=(PORTD & 32);
            bilgi[6]=(PORTD & 64);
            bilgi[7]=(PORTD & 128);

            while(bilgi[a]!='\0')
            {
                lcd_karakter_yolla(bilgi[a++]); //16f84 den alinan bilgi lcdye yaziliyor.
            }
        }
        else if(IBOV==1)    //Tasma olursa yani bir onceki bilgi alinmadan yeni bir bilgi yazilirsa Portd ye IBOV tasmasi temizlenmeli.
            IBOV=0;
    }
    PSPIF=0;
    GIE=1;
}


-Amacım 16f84'ün A portuna bağlı butonlardan gelen bilgiyi yine 16f84'ün B portundan 16f877A nın D portuna gönderek PSP modda yazma yapıp WR bitini yükeselen kenarda tetikleyerek Lcd ye veriyi yazdırmak fakat bir türlü beceremedim psp kullanımını.

-Basit bir örnek paylaşılabilirse buda yeterli olur benim icin.


Basit bir örnek : Isis dosyası  http://hotfile.com/dl/88805851/8bcc30e/psp_2.DSN.html
#include <pic168xa.h>

unsigned char a=1;
void main(void)
{
    TRISD=0xFF; PORTD=0;
    TRISB=0;    PORTB=0;
    TRISC=0;    PORTC=0;
    TRISE0=1;   TRISE1=1;   TRISE2=1;

    PCFG0=1;    PCFG1=1;    PCFG2=1;    PCFG3=0;

    PSPMODE=1;
    PSPIE=1;
    PSPIF=0;
    GIE=1;
    PEIE=1;
    for(;;)
    {
        if(IBF==1)
        {
            //IBOV=0;
            PORTB=PORTD;
        }
    }
}
static void interrupt PSP()
{
    if(PSPIF)
    {
        RC0=a;
        a++;
        if(a==2)
            a=0;
        PSPIF=0;
    }
    
}