• Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

parallel slave port in pic16f877

Thread starter #1
Hello everyone,

I'm trying to design a circuit with pic16f877 with parallel slave port and this is the design I have :

Untitled.jpg

and this is the C code for this circuit :
C:
/****************************************
*Description :
* SWITCH X6 - /CS
* SWITCH X5 - /WR
* SWITCH X4 - /RD
*****************************************/

/* This header file declares the internal
   register addresses for PIC16F874 */
#include <io16f877.h>
// Main
void main(void)
{
    unsigned char temp;
    ADCON1 = 0x0f;  // Configure PORTE pins as digital input
    // Define directions for port pins
    TRISE = 0x17;
    TRISB = 0x00;
    do{
        if (IBF) temp = PORTD;
        else if (OBF == 0) PORTB = temp;
    }while(1);
}

I want to add a light sensor with the high priority in this circuit so when the light is more than a specified value,reading and writing stop working.
and altough I have another circuit with pic16f877 :
Untitled1.png
with this C code :
C:
#include <io16f874.h>
// Transmit
void TXD(unsigned char data)
{
    RC2 = 1;
    TXREG = data;      // Put data into buffer sneds the data
    TXEN = 1;
    while(!TRMT);      // Wait for empty transmit buffer
    TXEN = 0;
    RC2 = 0;
}
// Receive
unsigned char RXD(void)
{
    unsigned char data;
    RC0 = 1;
    RC0 = 0;
    RC0 = 1;
    RC1 = 0;
    RCIF = 0;
    SREN = 1;
    TXEN = 1;
    while(!RCIF);      // Wait for data to be received
    data = RCREG;      // Read RCREG into data
    RC1 = 1;
    TXEN = 0;
    return(data);      // Return received data
}
// Main
void main(void)
{
    unsigned char data;
    // Set baud rate(19200[bps])
    SPBRG = 191;
    TXSTA = 0x90;
    TRISC = 0xf8;   // Set RC<0:2) as outputs
    TRISA = 0xff;   // Set RA0 input
    ADCON1 = 0x06;  // Configure all pins as digital inputs
    PORTC = 0xfa;
    RCSTA = 0x80;
    do{
        while(RA0);
        data = RXD();
        TXD(data);
        while(!RA0);
    }while(1);
}
when we press X4 the value of dip switch will be display on level meter. I want to add a light sensor in this circuit so when the light is more than a specified value, the circuit stop functioning.
can anyone help me with these two problems??
 
Last edited by a moderator:
#2
I see you're double posting this over at the Sparkfun forums.

Why do you think you need to use the PSP? From what you have in your schematic, it's completely unnecessary. Feed your light sensor into a comparator adjusted to the light values you want and hook the output of the comparator to a digital I/O pin on the PIC. From there it's nothing more than a simple bit comparison in your firmware and you can make the PIC do whatever you want depending on the state of the light sensor.

Also, what's going on with your second schematic? it's not even connected to PSP pins.

-Bill
 

Pommie

Well-Known Member
Most Helpful Member
#4
If you use a comparator you don't need an output pin - just read the value in CMCON. Also you can use the comparator voltage reference instead of an input pin.

Mike.
 

Latest threads

EE World Online Articles

Loading

 
Top