いつもお世話になっております。
現在私は、
TeraTermで一文字を入力~送信
↓
TeraTermで受信、マイコン(RL78/G14)で文字を受け取る
マイコンを経由しててLCD(AQM1602XA-RN-GBW)に受け取った一文字を表示
という事をさせたく思っています。
現在詰まっている点は、TeraTermで1文字を入力してもそれがLCDに表示されない事です(シリアル通信なので、デバックでどこまでできているか確認できず…)。
シリアル通信無しの場合、文字送信が確認できています。
恐らくシリアル通信そのものか、変数による受け渡しがうまくいっていないと予想しています。
おききしたいのは、下記のコーディング内容において、どこがネックになっているかについてです。
【メイン関数内容】************************************************************************************************
void main(void){ uint8_t recv_buf ; //割り込みで受け取った文字を格納する R_MAIN_UserInit(); //割り込み許可 R_IT_Start(); //インターバルタイマスタート acc_data_Init(); //LCD初期化 R_UART0_Start(); while (1U) { if(SW1 == SW_ON) { R_UART0_Receive((unsigned char *)recv_buf,1); Send_Char_LCD(recv_buf); } }}
***********************************************************************************************************************
//【LCD初期化(動作確認済み)】******************************************************************************void acc_data_Init(void){uint8_t lcd_init_data[] = {0x38, 0x39, 0x14, 0x73, 0x56, 0x6C, 0x38, 0x01, 0x0C};uint8_t i;i2c_flag = 0;while (0 == time_flag);time_flag = 0;
for (i = 0; i < 9; i++){uint8_t data_to_send[2] = {0x00, lcd_init_data[i]};R_IICA0_Master_Send(0x3e << 1, data_to_send, sizeof(data_to_send), 1); // 2バイト送信while (0 == time_flag);time_flag = 0;while (i2c_flag == 0); /* 送信完了待ち */R_IICA0_StopCondition(); /* I2C通信終了 */while (SPD0 == 0); /* ストップ・コンディション検出待ち */}}/***********************************************************************************************************************/
//【LCD文字送信(動作確認済み)】******************************************************************************void Send_Char_LCD (uint8_t dat){uint8_t buf[2];
buf[0] = 0x40; /* DDRAMアドレスを指定 */buf[1] = dat; /* レジスタに書き込む値を指定 */
i2c_flag = 0;R_IICA0_Master_Send(0x3E << 1, buf, 2, 1);while (i2c_flag == 0); /* 送信完了待ち */R_IICA0_StopCondition(); /* I2C通信終了 */while (SPD0 == 0); /* ストップ・コンディション検出待ち */}/***********************************************************************************************************************/
ソースをちらりと見て、まず、
void main(void){ uint8_t recv_buf ; //割り込みで受け取った文字を格納する ~略〜 R_UART0_Receive((unsigned char *)recv_buf,1); ~略〜}
は、
uint8_t recv_buf ; を uint8_t recv_buf [1] ; にするか、
R_UART0_Receive((unsigned char *)recv_buf,1) ; を R_UART0_Receive((unsigned char *) &recv_buf,1) ; にしないと、
と思いました。コピペミスでしょうか?
チョコです。
ハード屋なので、ソフトの細かいとことは分かりませんが、R_UART0_Receive関数は、コード生成ツールユーザーズマニュアル RL78 API リファレンス編では以下のように記述されているようです。第1引数は単にデータ格納領域のポインタであり、格納領域が配列であることを要求しているわけではないので、現状の記述でも問題なく使えています。
以上
egret様
リプライありがとうございます。
こちらは問題なく動いていました。