Pic Modbus
Pic Modbus
// Interrupt routine
void interrupt() {
RS485Master_Receive(dat);
}
void main(){
CMCON |= 0x07; // Disable comparators
TRISA = 0xff; //all porta input
TRISB = 0x07;
PORTA = 0;
PORTB = 0;
/*
PORTA.0 = INPUT 1
PORTA.1 = INPUT 2
PORTA.2 = INPUT 3
PORTA.3 = INPUT 4
PORTA.4 = INPUT 5
*/
/*
PORTB.0 = RX/TCX
PORTB.1 = RX
PORTB.2 = TX
PORTB.3 = OUTPUT 1
PORTB.4 = OUTPUT 2
PORTB.5 = OUTPUT 3
PORTB.6 = OUTPUT 4
PORTB.7 = OUTPUT 5
*/
RS485Master_Send(dat,1,100);
while (1){
//1
while (porta.f4==1 && porta.f3==1 && porta.f2==1 && porta.f1==1 &&
porta.f0==0){
delay_ms(10);
dat[0]= 1;
RS485Master_Send(dat,1,100);
}
//2
while (porta.f4==1 && porta.f3==1 && porta.f2==1 && porta.f1==0 && porta.f==1)
{
delay_ms(10);
dat[0]= 2;
RS485Master_Send(dat,1,100);
}
//3
while (porta.f4==1 && porta.f3==1 && porta.f2==1 && porta.f1==0 && porta.f==0)
{
delay_ms(10);
dat[0]= 3;
RS485Master_Send(dat,1,100);
}
dat[0]= 0; //send 0 if no input
RS485Master_Send(dat,1,100);
}
}
//////
/*
SLAVE - RS485 COMMUNICATION
1. PIC16F628A - 4MHZ internal oscillator
2. MAX485
*/
char dat[9]; // buffer for receving/sending messages
// Interrupt routine
void interrupt() {
RS485Slave_Receive(dat);
}
void main() {
CMCON |= 0x07; // Disable comparators
TRISA = 0x1F; //INITIALIZE PORTA
TRISB = 0x07; //INITIALIZE PORTB
PORTA = 0;
PORTB = 0;
/*
PORTA.0 = INPUT 1
PORTA.1 = INPUT 2
PORTA.2 = INPUT 3
PORTA.3 = INPUT 4
PORTA.4 = INPUT 5
*/
/*
PORTB.0 = RX/TCX
PORTB.1 = RX
PORTB.2 = TX
PORTB.3 = OUTPUT 1
PORTB.4 = OUTPUT 2
PORTB.5 = OUTPUT 3
PORTB.6 = OUTPUT 4
PORTB.7 = OUTPUT 5
*/
while (1) {
}
//2
else if(dat[0]==2){
portb=0x10; //TURN ON PORTB.F4 OF SLAVE
}
//3
else if(dat[0]==3){
portb=0x18; //TURN ON PORTB.F3 && PORTB.F4 OF SLAVE