槫林です。
私も2年前にはじめたばかりです。頑張りましょう。
通信系の所は詳しい方がアドバイスを出されている様なので
その他で気になった点を。
> interrupt void intprg(void){
> char *p; /*ポインタ変数*/
> p = &STR; /*STR変数のアドレスにする*/
となっていますが、STRは下記の様に宣言されてますよね?
> char STR; /*文字列の最初の文字*/
> volatile int FLG;
> unsigned char data;
この状態で2文字目を受信すると、他の変数に影響がでませんか?
実際どの様にアドレスが振られるか分かりませんが、data とかの
領域に上書き(もしくは逆)してしまわないでしょうか?
影響が出る出ないに関わらず配列とかを使って、受信バッファを
取った方が良くないですか?
何かの参考にでもなればと思いまして。
でわ