1つのPICデバイスに2チャンネル以上のRS232ポートは設定できますか?

#use rs232ディレクティブ(I2Cもほぼ同じです。)は、GETC、PUTC、PRINTF、KBHITの各関数を#use rs232が見つかった時点で用意します。

#use rs232が定義される行は、実行される(プログラムコードになる)行ではなくどちらかというと#defineに似た動きをします。

次の参考プログラムを見てください。このプログラムは、RS-232ポートAで受信した内容を、RS232ポートAとポートBにエコーします。

#USE RS232(BAUD=9600, XMIT=PIN_B0, RCV=PIN_B1)

void put_to_a( char c ) {
	put(c);
}

char get_from_a( ) {
	return(getc());
}

#USE RS232(BAUD=9600, XMIT=PIN_B2,RCV=PIN_B3)

void put_to_b( char b ) {
	putc(c);
}

main() {
	char c;
	put_to_a("Online\n\r");
	put_to_b("Online\n\r");
	while(TRUE) {
		c=get_from_a();
		put_to_b(c);
		put_to_a(c);
	}
}

このプログラムと同じ動作するプログラムは次のようにもかけますが、非常に見にくいプログラムとなります。:

main() {
	char c;
	#USE RS232(BAUD=9600, XMIT=PIN_B0, RCV=PIN_B1)
	printf("Online\n\r");
	#USE RS232(BAUD=9600, XMIT=PIN_B2,RCV=PIN_B3)
	printf("Online\n\r");
	while(TRUE) {
		#USE RS232(BAUD=9600, XMIT=PIN_B0, RCV=PIN_B1)
		c=getc();
		#USE RS232(BAUD=9600, XMIT=PIN_B2,RCV=PIN_B3)
		putc(c);
		#USE RS232(BAUD=9600, XMIT=PIN_B0, RCV=PIN_B1)
		putc(c);
	}
}