シリアル-パラレル変換器を作成
シリアルポートからの入力を表示したり、DIPスイッチの状態をシリアル送信したりするアダプタ
2台用意し、Zigbee-シリアルやBluetoothシリアル等で接続すれば遠隔8bitIOとして使える。
以下ソースコード
コンパイラはCCS社のPIC用Cコンパイラ
#include <16F873.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=10000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void HW_INIT(void);
void main()
{
unsigned char in,out;
HW_INIT();
// TODO: USER CODE!!
while(1){
if(kbhit()){ //シリアル受信がある場合
out = getc();
output_b(out); //ポートに出力
}
in = input_c(); //ポートCの状態を読み込む
in = in & 0x03; //C0,C1以外をマスクする
in = in << 6; //C0,C1を7,8ビット目にする
in |= (input_a() & 0x3F); //ポートAの上位2ビットをマスクしてORを取る
putc(in);
delay_ms(10); //10ms待ち
}
}
void HW_INIT(void){
set_tris_a(0xff); //A0-A5:IN
set_tris_b(0x00); //B0-B7:OUT
set_tris_c(0x83); //C0,C1:IN C6:TX C7:RX
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
}