質問編集履歴

1

必要のない箇所の削除

2019/06/18 05:51

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,737 +1 @@
1
1
  Qt↔マイコン(MT-RL78)のシリアル通信をして、マイコン上にあるボリュームの値の大きさをQtに渡したいのですがやり方が分からないのでどうかご教授ください。
2
-
3
-
4
-
5
- ・A/D変換の開始となる、
6
-
7
- ```
8
-
9
- ADCS = 1; /* A/D変換の開始 */
10
-
11
- ```
12
-
13
- を組み込むと、Qtの起動と同時にC言語が落ちます。
14
-
15
-
16
-
17
- ```Qt
18
-
19
- /***** スタート画面 *****/
20
-
21
- #include "mainwindow.h"
22
-
23
- #include "ui_mainwindow.h"
24
-
25
- #include <QPalette>
26
-
27
- #include <QDebug>
28
-
29
- #include <QtWidgets>
30
-
31
- #include "question1.h"
32
-
33
-
34
-
35
- MainWindow::MainWindow(QWidget *parent) :
36
-
37
- QMainWindow(parent),
38
-
39
- ui(new Ui::MainWindow)
40
-
41
- ,m_serial(new QSerialPort(this))
42
-
43
- {
44
-
45
- ui->setupUi(this);
46
-
47
- buffer.clear();
48
-
49
-
50
-
51
- // portName : COMポート名はデバイスマネージャーで確認すること
52
-
53
- m_serial->setPortName(QString("COM3"));
54
-
55
-
56
-
57
- // COMポートでつながれたハードウェアで指定された数値を指定する。
58
-
59
- m_serial->setBaudRate(QSerialPort::Baud38400);
60
-
61
- m_serial->setDataBits(QSerialPort::Data8);
62
-
63
- m_serial->setParity( QSerialPort::OddParity);
64
-
65
- m_serial->setStopBits(QSerialPort::OneStop);
66
-
67
-
68
-
69
- if(m_serial->open(QIODevice::ReadWrite)) //送受信できる設定
70
-
71
- {
72
-
73
- connect(m_serial,&QSerialPort::readyRead,
74
-
75
- this,&MainWindow::printData);
76
-
77
- }
78
-
79
- else
80
-
81
- {
82
-
83
- qDebug() << "Couldn't open the port[COM3].";
84
-
85
- }
86
-
87
- /* 50ms毎にシグナルを送り、Send_Data()スロットを起動 */
88
-
89
- m_timer->setInterval(SPEED);
90
-
91
- m_timer->setSingleShot(false);
92
-
93
- connect(m_timer,SIGNAL(timeout()),SLOT(Send_Data()));
94
-
95
- m_timer->start();
96
-
97
-
98
-
99
- jumpquestion1 = new question1(this);
100
-
101
- jumpcorrect = new Correct (this);
102
-
103
- jumpincorrect = new Incorrect (this);
104
-
105
-
106
-
107
- setStyleSheet( "* {background-color : rgb( 255, 255, 128 )}" ); //背景色指定
108
-
109
- }
110
-
111
-
112
-
113
- MainWindow::~MainWindow()
114
-
115
- {
116
-
117
- m_serial->close();
118
-
119
- disconnect(m_serial,&QSerialPort::readyRead,this,&MainWindow::printData );
120
-
121
- delete m_serial;
122
-
123
- delete ui;
124
-
125
-
126
-
127
- delete jumpquestion1;
128
-
129
- delete jumpcorrect;
130
-
131
- delete jumpincorrect;
132
-
133
- }
134
-
135
-
136
-
137
- void MainWindow::printData()
138
-
139
- {
140
-
141
- QString AAA;
142
-
143
-
144
-
145
- if(sender() == m_serial)
146
-
147
- {
148
-
149
- buffer.append(m_serial->readAll());
150
-
151
- if(buffer.contains("\r"))
152
-
153
- {
154
-
155
-
156
-
157
- //区切り文字が含まれていたら表示してバッファクリア
158
-
159
- QString data = QString(buffer);
160
-
161
- if(data.compare("\n1\n\r", Qt::CaseSensitive) == 0){
162
-
163
- AAA = "5";
164
-
165
- m_serial->write(AAA.toUtf8()); //送信時はバイナリデータに変換
166
-
167
- jumpquestion1 -> show(); //ボタンを押したときquestion1画面へ切り替え
168
-
169
- m_timer->stop();
170
-
171
-
172
-
173
- }
174
-
175
-
176
-
177
- buffer.clear();
178
-
179
- }
180
-
181
- }
182
-
183
- }
184
-
185
- void MainWindow::Send_Data ()
186
-
187
- {
188
-
189
- QString CCC;
190
-
191
- CCC = "8";
192
-
193
- m_serial->write(CCC.toUtf8()); //送信時はバイナリデータに変換
194
-
195
- buffer.clear();
196
-
197
- }
198
-
199
-
200
-
201
-
202
-
203
- ```
204
-
205
- ***
206
-
207
- Qt↑
208
-
209
- C言語↓
210
-
211
- ***
212
-
213
- ```C
214
-
215
- #pragma sfr
216
-
217
- #pragma NOP
218
-
219
- #pragma EI
220
-
221
- #pragma interrupt INTST0 int_trmpro
222
-
223
- #pragma interrupt INTSR0 int_rcvpro
224
-
225
- #pragma interrupt INTSRE0 int_errpro
226
-
227
- #include "slos.h"
228
-
229
-
230
-
231
- /******************************************************************************
232
-
233
- * 関数プロトタイプ宣言
234
-
235
- *******************************************************************************/
236
-
237
- void init_uart(void);
238
-
239
- void PORT_Init(void);
240
-
241
- void __near int_trmpro(void) ;
242
-
243
- void __near int_rcvpro(void) ;
244
-
245
- void __near int_errpro(void) ;
246
-
247
-
248
-
249
- /******************************************************************************
250
-
251
- * グローバルデータ
252
-
253
- *******************************************************************************/
254
-
255
- unsigned char f_rcv_end ;
256
-
257
- unsigned short rcv_data ;
258
-
259
- const char *msg_p ;
260
-
261
-
262
-
263
- //char j[100];
264
-
265
- //j[0] = "ADCRH";
266
-
267
-
268
-
269
- const char msg1[] = "\n2\n\r" ;
270
-
271
- //const char msg2[] = ADCRH ;
272
-
273
- const char msg3[] = "\n1\n\r" ;
274
-
275
- const char msg_err[] = "\n Mistakes. Please retry.\n\r" ;
276
-
277
-
278
-
279
- const char ans1[] = "\nA1\n\r";
280
-
281
- const char ans2[] = "\nA2\n\r";
282
-
283
- const char ans3[] = "\nA3\n\r";
284
-
285
- const char ans4[] = "\nA4\n\r";
286
-
287
-
288
-
289
- /***********************************/
290
-
291
- /*** reset process ***/
292
-
293
- /***********************************/
294
-
295
- void uinit(void)
296
-
297
- {
298
-
299
- TAU0EN |= 0x01U;
300
-
301
- TPS0 = 0x0000;
302
-
303
- TMR00 = 0x0000;
304
-
305
-
306
-
307
-
308
-
309
- /* ポートのイニシャライズ */
310
-
311
- PM0 = 0x1;
312
-
313
-
314
-
315
-
316
-
317
- /* A/D変換器のイニシャライズ */
318
-
319
- ADCEN = 1; /* A/D変換器にクロックを供給 */
320
-
321
- ADS = 0x12; /* ANI18を選択 */
322
-
323
- ADM1 = 0x20; /* ソフトウェア・トリガ、ワンショット変換モード */
324
-
325
- ADM2 = 0x01; /* 8ビット分解能 */
326
-
327
- ADM0 = 0x23; /* セレクトモード */
328
-
329
- ADPR1 = 1; ADPR0 = 0; /* A/D変換終了の割込みレベルを3に設定 */
330
-
331
- ADMK = 0; /* A/D変換終了割り込みを許可 */
332
-
333
- }
334
-
335
-
336
-
337
- /******************************************************************************
338
-
339
- * Initial I/O Port Function
340
-
341
- *******************************************************************************/
342
-
343
- void PORT_Init(void)
344
-
345
- {
346
-
347
- P7 = 0x00; // Default is OFF
348
-
349
- PM7 = 0x00; // PORT7 OUTPUT
350
-
351
- P5 = 0xcf; // DEG0 is ON
352
-
353
- PM5 = 0xcf; // PORT5 bit4 is OUTPUT
354
-
355
- }
356
-
357
-
358
-
359
- /******************************************************************************
360
-
361
- * Initial SAU Function
362
-
363
- *******************************************************************************/
364
-
365
- void init_uart(void)
366
-
367
- {
368
-
369
-
370
-
371
- SAU0EN = 1; // シリアルアレイユニット0イネーブル
372
-
373
- NOP();NOP();NOP();NOP(); // fCLK 4クロック分ウェイト
374
-
375
-
376
-
377
- SPS0 = 0x0022; // シリアルクロック分周比設定
378
-
379
- // (ck00,ck01=8MHz(fclk=32MHz選択時) or 5MHz(fclk=20MHz選択時))
380
-
381
-
382
-
383
- // *** UART0送信側(Unit:0,ch:0)設定 ***
384
-
385
- SMR00 = 0x0023; // 動作モード:UART、転送クロック:ck00を選択、
386
-
387
- // スタートトリガ:S/Wトリガ(送信時のみ)、送信割り込みタイミング:バッファ空き時
388
-
389
- SCR00 = 0x8397; // 送信のみ実施、8bit、1SP、奇数パリティあり、LSB_first、エラー割り込みマスク
390
-
391
- SDR00 = 0xce00; // ボーレート設定(38400bps(SDR[15:9]=206))
392
-
393
-
394
-
395
- SOE0L = 1; // シリアル出力許可(SO0レジスタ書き換え不可)
396
-
397
-
398
-
399
- // *** UART0受信側(Unit:0,ch:1)設定 ***
400
-
401
- SMR01 = 0x0122; // 動作モード:UART、転送クロック:ck00を選択、
402
-
403
- // スタートトリガ:RxD端子有効エッジ(受信時のみ)、スタートビット検出:立ち下がりエッジ
404
-
405
- SCR01 = 0x4797; // 受信のみ実施、8bit、1SP、LSB_first、奇数パリティ、エラー割り込み発生許可
406
-
407
- SDR01 = 0xce00; // ボーレート設定(38400bps(SDR[15:9]=206))
408
-
409
-
410
-
411
- NFEN0 = 1; // RxD0端子のノイズフィルタをON
412
-
413
-
414
-
415
- PM5 &= ~0x02; // TxD0該当端子を出力モードに設定
416
-
417
- P5 |= 0x02; // TxD出力を有効化
418
-
419
- PM5 |= 0x01; // RxD0該当端子を入力モードに設定
420
-
421
-
422
-
423
- // 送受信割り込み設定
424
-
425
- STPR00 = 1; // Int priorty = 1
426
-
427
- STPR10 = 0;
428
-
429
- STMK0 = 0; // Enable UART0 trm interrupt(Mask Clear)
430
-
431
-
432
-
433
- SRPR00 = 1; // Int priorty = 1
434
-
435
- SRPR10 = 0;
436
-
437
- SRMK0 = 0; // Enable UART0 rcv interrupt(Mask Clear)
438
-
439
-
440
-
441
- SREPR00 = 0; // Int priorty = 2
442
-
443
- SREPR10 = 1;
444
-
445
- SREMK0 = 0; // Enable UART0 RcvErr interrupt(Mask Clear)
446
-
447
-
448
-
449
- SS0L = 0x03; // Unit0 送信(ch0),受信(ch1)開始
450
-
451
-
452
-
453
- }
454
-
455
- void TAU0_Start(void);
456
-
457
- void TAU0_Stop(void);
458
-
459
-
460
-
461
- void TAU0_Start(void)
462
-
463
- {
464
-
465
- TOE0 |= 0x01U;
466
-
467
- TS0 |= 0x01U;
468
-
469
- }
470
-
471
- void TAU0_Stop(void)
472
-
473
- {
474
-
475
- TT0 |= 0x01U;
476
-
477
- TOE0 &= 0x01U;
478
-
479
- }
480
-
481
- __rtos_interrupt void intTim(void)
482
-
483
- {
484
-
485
- slos_cyclic_timer( ); /* 周期タイマ処理をコース */
486
-
487
- }
488
-
489
-
490
-
491
-
492
-
493
- /***********************************/
494
-
495
- /*** sample tasks ***/
496
-
497
- /***********************************/
498
-
499
-
500
-
501
- void serial_tsk(void) /* プライオリティタスク */
502
-
503
- {
504
-
505
- W i = 0 ;
506
-
507
- char msg2[]="\nA1\n";
508
-
509
- //unsigned short
510
-
511
- W ercd;
512
-
513
- //int AA = ADCRH;
514
-
515
- char buf[8] = {'\0'};
516
-
517
-
518
-
519
- // = 0x950FU;
520
-
521
- //TAU0_Start();
522
-
523
-
524
-
525
- PORT_Init();
526
-
527
- init_uart() ; // SCI初期化関数呼び出し
528
-
529
- EI();
530
-
531
- while( 1 ) {
532
-
533
- if(f_rcv_end){ // 受信割り込み待ち
534
-
535
- //ADCS = 1; /* A/D変換の開始 */
536
-
537
- f_rcv_end = 0;
538
-
539
- /* 受信データのチェック */
540
-
541
- switch((unsigned char)rcv_data){
542
-
543
- /*省略*/
544
-
545
- case '8':
546
-
547
- ercd = ADCRH;
548
-
549
- ercd = ercd & 0xFF;
550
-
551
- if(P13.7 == 0){
552
-
553
- for( i=0 ; i<10000; i++ ) ; /* チャタリング対策 */
554
-
555
- while( P13.7 == 0 ) ;
556
-
557
- msg_p = msg3;
558
-
559
- }
560
-
561
- if(P3.1 == 0){
562
-
563
- for( i=0 ; i<10000; i++ ) ; /* チャタリング対策 */
564
-
565
- while( P3.1 == 0 ) ;
566
-
567
- if(ercd >= 0 && ercd < 64){
568
-
569
- msg_p = ans1;
570
-
571
- }else if(ercd < 128){
572
-
573
- msg_p = ans2;
574
-
575
- }else if(ercd < 192){
576
-
577
- msg_p = ans3;
578
-
579
- }else if(ercd < 256){
580
-
581
- msg_p = ans4;
582
-
583
- }
584
-
585
- }
586
-
587
- break;
588
-
589
-
590
-
591
- case '9':
592
-
593
- msg_p = msg3;
594
-
595
- break;
596
-
597
- default :
598
-
599
- msg_p = msg_err ;
600
-
601
- }
602
-
603
- while((SSR00L & 0x40)) ; // 文字列送信完了まで待ち
604
-
605
- SDR00 = *msg_p; // 送信メッセージの最初の文字を
606
-
607
- // 送信バッファ(SDR00)へ格納
608
-
609
- }
610
-
611
- }
612
-
613
- }
614
-
615
-
616
-
617
- void temp(void)
618
-
619
- {
620
-
621
-
622
-
623
- }
624
-
625
-
626
-
627
- /******************************************************************************
628
-
629
- * Interruput Function
630
-
631
- *******************************************************************************/
632
-
633
- /******************************************************************************
634
-
635
- * UART0 Recieve Interrupt Function
636
-
637
- *******************************************************************************/
638
-
639
- void __near int_rcvpro(void)
640
-
641
- {
642
-
643
- rcv_data = SDR01; // 受信データ読み出し
644
-
645
- f_rcv_end = 1; // 受信完了フラグセット
646
-
647
- P7 = 0; // エラー表示クリア
648
-
649
-
650
-
651
- }
652
-
653
-
654
-
655
- /******************************************************************************
656
-
657
- * UART0 transmit Interrupt Function
658
-
659
- *******************************************************************************/
660
-
661
- void __near int_trmpro(void)
662
-
663
- {
664
-
665
- msg_p++; // メッセージポインタ更新
666
-
667
- if(*msg_p != '\0') // 文字列送信完了(NULLコードか)確認
668
-
669
- SDR00 = *msg_p; // 送信データをSDRレジスタへ設定
670
-
671
-
672
-
673
- }
674
-
675
-
676
-
677
-
678
-
679
- /******************************************************************************
680
-
681
- * UART0 Err Function
682
-
683
- *******************************************************************************/
684
-
685
- void __near int_errpro(void)
686
-
687
- {
688
-
689
- unsigned char err_sts;
690
-
691
-
692
-
693
- err_sts = SSR01L & 0x07; // 受信エラーフラグ読み出し
694
-
695
-
696
-
697
- switch(err_sts){ // エラー処理
698
-
699
- case 0x01: // オーバフローエラー
700
-
701
- P7 = 0x3f; // 7seg.LEDに'OO'を表示
702
-
703
- break;
704
-
705
- case 0x02: // パリティーエラー
706
-
707
- P7 = 0x73; // 7seg.LEDに'PP'を表示
708
-
709
- break;
710
-
711
- case 0x04: // フレーミングエラー
712
-
713
- P7 = 0x71; // 7seg.LEDに'FF'を表示
714
-
715
- break;
716
-
717
- }
718
-
719
-
720
-
721
- SIR01L = 0x07; // 受信エラーフラグクリア
722
-
723
- rcv_data = SDR01; // ch1のBFFフラグクリアのためのダミーリード
724
-
725
- }
726
-
727
-
728
-
729
- void cyc(UB cid)
730
-
731
- {
732
-
733
- P0.1 = ~P0.1;
734
-
735
- }
736
-
737
- ```