RDRに格納されたデータを別の配列に格納
Posted: 2017年1月19日(木) 17:12
1. 自分は今何がしたくて
パソコンからシリアル送信された文字列(36~38字のCSV)をRX621マイコンで受信し、受信した文字列を配列A,B,C,D,Eに格納し、配列Aのみをパソコンへ送信したい
2. どう取り組んで(作ったプログラムはどれで
パソコン-マイコン間のシリアル送受信のプログラムはできています。
受信したデータはRX621マイコンのRDRレジスタに格納されています。
プログラムは下にあります。
4. 自分は何が解らないのか、知りたいのか
RDRレジスタに格納された文字列を、配列A,B,C,D,Eに格納するプログラムが分からない
5. 今のCの知識はどの程度なのか
0から独学で始めて、数ヶ月たった程度
パソコンからシリアル送信された文字列(36~38字のCSV)をRX621マイコンで受信し、受信した文字列を配列A,B,C,D,Eに格納し、配列Aのみをパソコンへ送信したい
2. どう取り組んで(作ったプログラムはどれで
パソコン-マイコン間のシリアル送受信のプログラムはできています。
受信したデータはRX621マイコンのRDRレジスタに格納されています。
プログラムは下にあります。
4. 自分は何が解らないのか、知りたいのか
RDRレジスタに格納された文字列を、配列A,B,C,D,Eに格納するプログラムが分からない
5. 今のCの知識はどの程度なのか
0から独学で始めて、数ヶ月たった程度
#include <machine.h>
#include <stdio.h>
#include <string.h>
#include "iodefine.h"
// #define USE_IR
#define DDR_IN 0
#define DDR_OUT 1
// LED (P15) 負論理
#define LED_DDR PORT1.DDR.BIT.B2
#define LED_DR PORT1.DR.BIT.B2
#define LED_OFF 1
#define LED_ON 0
static void delay_1ms(void)
{ // 実測でループ回数を決定
unsigned int n = 20000;
while (n--)
nop();
}
void delay_ms(unsigned int n)
{
while (n--)
delay_1ms();
}
void setup_clock(void)
{ // SCKCRはワードで一括指定しても良い。
// ICLK x8
SYSTEM.SCKCR.BIT.ICK = 0;
while (SYSTEM.SCKCR.BIT.ICK != 0) ;
// PCLK x4
SYSTEM.SCKCR.BIT.PCK = 1;
while (SYSTEM.SCKCR.BIT.PCK != 1) ;
}
void setup_port(void)
{
LED_DR = LED_OFF;
LED_DDR = DDR_OUT;
PORTD.DDR.BIT.B2=1;
PORTD.DDR.BIT.B0=1;
PORTD.DR.BIT.B2=1;
PORTD.DR.BIT.B0=1;
PORT1.DDR.BIT.B3=1;
PORT3.DDR.BYTE=0x1c;
PORT1.DR.BIT.B3=1;
PORT3.DR.BYTE=0x1c;
}
void SciInit(void)
{ // SCI1: P26/TXD1, P30/RXD1
MSTP(SCI1) = 0;
SCI1.SCR.BYTE = 0;
PORT2.DDR.BIT.B6 = DDR_OUT;
PORT3.DDR.BIT.B0 = DDR_IN;
PORT3.ICR.BIT.B0 = 1;
SCI1.SMR.BYTE = 0;
SCI1.BRR = 12;
// wait 1 bit time
// 1 / 9600 = 約 0.11ms -> 1msとする。
delay_ms(1);
SCI1.SCR.BYTE |= 0x30; // TE=1,RE=1
}
void SciSend( char DATA)
{
SCI1.TDR = DATA; //送信データを格納
}
char SciRecv(void)
{
char read_char;
read_char = SCI1.RDR; //データを変数へ
SCI1.SSR.BIT.RDRF=0;
return read_char;
}
void main(void)
{
char read_char;
setup_clock();
setup_port();
SciInit();
while(1){
PORTD.DR.BIT.B2=1;
PORTD.DR.BIT.B0=1;
read_char = SciRecv();
char DATA[38] = read_char;
SciSend(*DATA);
}
}