สวัสดีครับ K.maxmkung
ขอสอบถามว่า เมื่อตัว master จะติดต่อกับ slave เราจะส่ง address โดยใช้คำสั่งอย่างไรครับ ทั้งตัวส่ง (master) และตัวรับ (slave) ครับ ขอบคุณครับ
ที่ทดสอบให้ Master ส่งข้อมูลแล้วให้ Slave ตอบสนองก็โค้ดตามนี้นะครับ
Master#include <16F628A.h>
#FUSES HS,NOPROTECT,NOLVP,NOWDT,PUT,NOBROWNOUT
#define OSC_CLK 10000000
#USE delay(clock=OSC_CLK)
#USE rs232(BAUD=9600,xmit=PIN_B2,rcv=PIN_B1,BITS=8,PARITY=N,STOP=1)
#int_RDA
void master_isr(){
}
void main(void){
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
while(TRUE){
printf("%c%c%c",0x31,0x31,0x31); //DEVICE ID 1
delay_ms(2000);
printf("%c%c%c",0x32,0x31,0x31); //DEVICE ID 2
delay_ms(2000);
printf("%c%c%c",0x31,0x31,0x30); //DEVICE ID 1
delay_ms(2000);
printf("%c%c%c",0x32,0x31,0x30); //DEVICE ID 2
delay_ms(2000);
}
}
Slave#include <16F628A.h>
#FUSES HS,NOPROTECT,NOLVP,NOWDT,PUT,NOBROWNOUT
#define OSC_CLK 10000000
#USE delay(clock=OSC_CLK)
#USE rs232(BAUD=9600,xmit=PIN_B2,rcv=PIN_B1,BITS=8,PARITY=N,STOP=1)
#define DEVICEID '1'
unsigned char dat[3];
int8 i=0;
#int_RDA
void slave_isr(){
dat[i]=getch();
i++;
if(i>2){
i=0;
if(DEVICEID==dat[0]){
switch(dat[1]){ //Device ID of Slave 1
case '1':
if(dat[2]=='1')
{
output_HIGH(PIN_B0);
delay_ms(1000);
printf("ID1");
}
else output_LOW(PIN_B0);
break;
case '2':
if(dat[2]=='1') output_HIGH(PIN_B1);
else output_LOW(PIN_B1);
break;
}
}
}
}
void main(void){
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
while(TRUE);
}