#include <reg51.h>
sbit Direction = P1^7;
void initialize(void) {
SCON = 0xF0; // 9 bit multipoint mode UART
TMOD = 0x30; // Timer 1 = baudrate generator
TH1 = 0xFD; // 9600 baud
TR1 = 1; // start baudrate generator
}
void SerialOut(char c){
while (!TI) ; // wait until ready to sent char
TI = 0; // reset flag
SBUF = c; // get a char
}
char SerialIn(void){
unsigned int wait;
wait = 0xFFFF; // waiting loop constant
while (!RI && wait) wait--; // wait until char arrive or time out
RI = 0; // reset flag
return ( wait ? SBUF : 0 ); // if time out return 0
}
void main(void){
char c,i,j;
char answer[11];
initialize();
TB8 = 1; // 9th bit = 1
// scanning port 0 .. 7
i = 0;
while (1){
Direction = 1; // transmit
SerialOut(i); // invoke slave #i
i = i++ & 0x07; // 0 .. 7
Direction = 0; // receiver
j = 0;
do {
c = SerialIn();
answer[j++] = c;
} while (!c);
if (answer[0]==0) {
// slave #i not installed or
// slave #i does not response
}
else {
// do some thing
};
};
}