目的
GPIOとソフトウェアシリアルのテスト
速度は、9600bps
//ser_read_test_031_1
//#define in7 1 //uno
#define in7 PB7 // 1pin
//#define in7 PA9 // 1pin
#define RX1 PA10 // 1pin
#define TX1 PA9 // 1pin
#define DW digitalWrite
//#define UART_DELAY 832 // 1200bps ok 031
#define UART_DELAY 102 // 9600bps ok 031
int pc_getc()
{
int a,b,c,d,e,f,g,h;
int bs;
// int zt,it;
//待ちループ
while( digitalRead(RX1) == 1 ) {}
// zt = micros();
delayMicroseconds(156-3);
a=(digitalRead(RX1));
delayMicroseconds(104-3);
b=(digitalRead(RX1));
delayMicroseconds(104-4);
c=(digitalRead(RX1));
delayMicroseconds(104-4);
d=(digitalRead(RX1));
delayMicroseconds(104-3);
e=(digitalRead(RX1));
delayMicroseconds(104-3);
f=(digitalRead(RX1));
delayMicroseconds(104-4);
g=(digitalRead(RX1));
delayMicroseconds(104-4);
h=(digitalRead(RX1));
delayMicroseconds(156-3);
// it = micros();
//debug
//String thisString9;
//pc_printf("1041 it=");
// thisString9 = String( 1041 - (it-zt) );
// pc_printf( (char *)thisString9.c_str() );
//pc_printf("\r\n");
bs=h*128+g*64+f*32+e*16+d*8+c*4+b*2+a;
return(bs);
}//pc_getc
//仮想シリアルへの一文字出力 9600bps
int pc_putc(char ch) {
DW(TX1, HIGH);
DW(TX1, LOW);//START
delayMicroseconds(UART_DELAY);
for(int ii=0;ii<8;ii++){
DW(TX1, (ch>>ii)&1 );
delayMicroseconds(UART_DELAY);
}//for
DW(TX1, HIGH);//Stop
delayMicroseconds(UART_DELAY);
return(0);
}//pc_putc
//文字列の表示
int pc_printf(char *str1) {
//文字の中身がゼロか
while(*str1){
//一文字出力
pc_putc(*str1 ++);
} //while
//戻り値
return(0);
}//pc_printf
//初期化
void setup()
{
delay(3000);
//ポートをhiにする 初期化
pinMode(TX1, OUTPUT);
DW(TX1, HIGH);
pinMode(RX1,INPUT_PULLUP);
//LEDの初期化
pinMode(in7, OUTPUT);
DW(in7, HIGH);
pc_printf("STRT\r\n"); //debug
} //setup
//メインループ
void loop()
{
char ch = pc_getc();
char str2[2]={ ch ,0};
pc_printf("-----ch=[");
pc_printf( str2 );
pc_printf("\r\n");
DW(in7, (ch & 1) );
//1秒の待ち
//delay(1000);
} //loop
出力がPA0のバージョン
//ser_read_test_031_1
//#define in7 1 //uno
#define in7 PB7 // 1pin
//#define in7 PA9 // 1pin
#define RX1 PA10 // 1pin
#define TX1 PA0 // 1pin
#define DW digitalWrite
//#define UART_DELAY 832 // 1200bps ok 031
#define UART_DELAY 102 // 9600bps ok 031
int pc_getc()
{
int a,b,c,d,e,f,g,h;
int bs;
// int zt,it;
//待ちループ
while( digitalRead(RX1) == 1 ) {}
// zt = micros();
delayMicroseconds(156-3);
a=(digitalRead(RX1));
delayMicroseconds(104-3);
b=(digitalRead(RX1));
delayMicroseconds(104-4);
c=(digitalRead(RX1));
delayMicroseconds(104-4);
d=(digitalRead(RX1));
delayMicroseconds(104-3);
e=(digitalRead(RX1));
delayMicroseconds(104-3);
f=(digitalRead(RX1));
delayMicroseconds(104-4);
g=(digitalRead(RX1));
delayMicroseconds(104-4);
h=(digitalRead(RX1));
delayMicroseconds(156-3);
// it = micros();
//debug
//String thisString9;
//pc_printf("1041 it=");
// thisString9 = String( 1041 - (it-zt) );
// pc_printf( (char *)thisString9.c_str() );
//pc_printf("\r\n");
bs=h*128+g*64+f*32+e*16+d*8+c*4+b*2+a;
return(bs);
}//pc_getc
//仮想シリアルへの一文字出力 9600bps
int pc_putc(char ch) {
DW(TX1, HIGH);
DW(TX1, LOW);//START
delayMicroseconds(UART_DELAY);
for(int ii=0;ii<8;ii++){
DW(TX1, (ch>>ii)&1 );
delayMicroseconds(UART_DELAY);
}//for
DW(TX1, HIGH);//Stop
delayMicroseconds(UART_DELAY);
return(0);
}//pc_putc
//文字列の表示
int pc_printf(char *str1) {
//文字の中身がゼロか
while(*str1){
//一文字出力
pc_putc(*str1 ++);
} //while
//戻り値
return(0);
}//pc_printf
//初期化
void setup()
{
delay(3000);
//ポートをhiにする 初期化
pinMode(TX1, OUTPUT);
DW(TX1, HIGH);
pinMode(RX1,INPUT_PULLUP);
//LEDの初期化
pinMode(in7, OUTPUT);
DW(in7, HIGH);
pc_printf("STRT\r\n"); //debug
} //setup
//メインループ
void loop()
{
char ch = pc_getc();
char str2[2]={ ch ,0};
pc_printf("-----ch=[");
pc_printf( str2 );
pc_printf("\r\n");
DW(in7, (ch & 1) );
//1秒の待ち
//delay(1000);
} //loop