keniti akiba
/
serial_rx_test_010
Diff: main.cpp
- Revision:
- 0:b98487737435
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed May 12 22:14:44 2021 +0000 @@ -0,0 +1,223 @@ +#include "mbed.h" + +//10の割り算 0から1028までは、正しい。主に0から999 +#define DVI10(n) ((n*205)>>11) + +//Serial pc(USBTX, USBRX); // tx, rx +//Serial pc(SERIAL_TX, SERIAL_RX); //767 +//Serial pc(PA_2, PA_3); //010 +//Serial pc(PA_9, PA_10); //010 + +#define UART_DELAY 96 // 1/9600 + +DigitalOut TX(PA_2); +DigitalIn RX(PA_3); +//DigitalOut TX(PA_9); +//DigitalIn RX(PA_10); + +char ch_hex_a_b[5]; +char *ch_hex_a(int l_num) +{ + int a,b,c; + + int q=0; +if(l_num < 0) { l_num = 0 - l_num; q = 1;} + + b=DVI10(l_num); + c=l_num-(b*10); + l_num=b; + a=DVI10(l_num); + b=l_num-(a*10); + + ch_hex_a_b[0] = '0' + a; + ch_hex_a_b[1] = '0' + b; + ch_hex_a_b[2] = '0' + c; + ch_hex_a_b[3] = 0; + +if( q == 1 ) {ch_hex_a_b[0]='-';} + + return(ch_hex_a_b); +} //ch_hex_a + + +//仮想シリアルへの一文字出力 9600bps +int pc_putc(char ch) { + + TX=1; + TX=0;//START + wait_us(UART_DELAY); + + for(int ii=0;ii<8;ii++){ + TX=(ch>>ii)&1; + wait_us(UART_DELAY); + }; //for + + TX=1;//Stop + wait_us(UART_DELAY); + + return(0); + +} //pc_putc + +//文字列の表示 +int pc_printf(char *str1) { + + int ii = 0; //ループカウンター + while(str1[ii]!=0){ + + //一文字出力 + pc_putc(str1[ii]);ii++; + + } //while + + //戻り値 + return(0); +} + +//タイマーの定義 +Timer t; + +int a,b,c,d,e,f,g,h; +int bs; +int zt,at,bt,ct,dt,et,ft,gt,ht,it; +char *ret1="\r\n"; + + +int pc_getc() +{ + + //待ちループ + while( RX == 1 ) {} + +//llllllllllllllllllllllllllllllllllllllll + + zt = t.read_us(); + + wait_us(156-7-12); + + a=RX; + at = t.read_us(); + + wait_us(104-7-11); + + b=RX; + bt = t.read_us(); + + wait_us(104-7-11); + + c=RX; + ct = t.read_us(); + + wait_us(104-7-11); + + d=RX; + dt = t.read_us(); + + wait_us(104-7-10); + +//hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh + + e=RX; + et = t.read_us(); + + wait_us(104-7-11); + + f=RX; + ft = t.read_us(); + + wait_us(104-7-12); + + g=RX; + gt = t.read_us(); + + wait_us(104-7-11); + + h=RX; + ht = t.read_us(); + + wait_us(156-7-11); + + it = t.read_us(); + +//pc_printf(ret1); +//pc_printf("0 zt="); +//pc_printf( ch_hex_a(zt) ); +//pc_printf(ret1); + +//pc_printf("156 at="); +//pc_printf( ch_hex_a( 156 - (at-zt) ) ); +//pc_printf(ret1); + +//pc_printf("260 bt="); +//pc_printf( ch_hex_a( 260 - (bt-zt) ) ); +//pc_printf(ret1); + +//pc_printf("364 ct="); +//pc_printf( ch_hex_a( 364 - (ct-zt) ) ); +//pc_printf(ret1); + +//pc_printf("468 dt="); +//pc_printf( ch_hex_a( 468 - (dt-zt) ) ); +//pc_printf(ret1); + +//pc_printf("572 et="); +//pc_printf( ch_hex_a( 572 - (et-zt) ) ); +//pc_printf(ret1); + +//pc_printf("677 ft="); +//pc_printf( ch_hex_a( 677 - (ft-zt) ) ); +//pc_printf(ret1); + +//pc_printf("781 gt="); +//pc_printf( ch_hex_a( 781 - (gt-zt) ) ); +//pc_printf(ret1); + +//pc_printf("885 ht="); +//pc_printf( ch_hex_a( 885 - (ht-zt) ) ); +//pc_printf(ret1); + +//pc_printf("1041 it="); +//pc_printf( ch_hex_a( 1041 - (it-zt) ) ); +//pc_printf(ret1); + + //h=0; g=1; f=0; e=0; d=0; c=0; b=0; a=1; + + bs=h*128+g*64+f*32+e*16+d*8+c*4+b*2+a; + + //char str2[2]={ bs ,0}; + //pc_printf(" ch=["); + //pc_printf( str2 ); + //pc_printf(ret1); + + return(bs); +}//pc_getc + +int main() +{ + RX.mode( PullUp ); // 内蔵プルアップを使う + + //タイマーの開始 + t.start(); + //pc.printf("Hello World!\r\n"); + //t.stop(); + + char ch; + + while(1) { + + t.reset(); + + ch = pc_getc(); + + char str2[2]={ ch ,0}; + pc_printf("-----ch=["); + pc_printf( str2 ); + pc_printf(ret1); + + + wait(1.0); + }//while +}//main + +//容量削減 +void error(const char* format, ...){}