JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC16F1455 MCC シリアル通信テスト

2023-07-02 19:02:37 | PIC16F1455
 PIC16F1455でシリアル通信のテストをします。

 回路は、PIC16F1455開発ボードを使います。回路図です。


 projectを作成し、MCCの設定をします。

 System Moduleの設定をします。
 クロックは16MHzにしました。


 EUSARTモジュールを導入します。
 自動的にRC5がRX(input)に、RC4がTX(output)に設定されます。
 設定はデフォルトのままにして、Baud Rateは9600bpsです。


 これでGenerateして、次の簡単なエコーバックプログラムをコンパイル書き込みをしてテストします。
-----------------------------------------------------------------
#include "mcc_generated_files/mcc.h"

void main(void)
{
     // initialize the device
     SYSTEM_Initialize();

     uint8_t data;
      while (1)
    {
          data = EUSART_Read();
          EUSART_Write(data);
    }
}
-----------------------------------------------------------------
 FT-234をパソコンに接続し、通信ソフトTera Termを立ち上げて、送った文字が返ってくるかどうか確認します。



キーボードで打ったとおりの文字が返ってきました。OKです。


 送受信できることが確認できましたので、次に文字列をPICからTeraTermに送ってみます。
 プログラムです。
------------------------------------------------------------------
#include "mcc_generated_files/mcc.h"

//文字列の送信
void Send_str(char *str)
{
     while(*str)
    {
         EUSART_Write(*str++);
    }
}

void main(void)
{
     // initialize the device
     SYSTEM_Initialize();
     char msg[]="PIC16F1455 TEST\r\n";

      while (1)
    {
          Send_str(msg);
          __delay_ms(1000);
    }
}
------------------------------------------------------------------
 1秒ごとに「PIC16F1455 TEST」がTeraTermに表示されます。
 \r\nはエスケープシーケンスで、\rがキャリジリターン、\nがニューラインです。

 さらに文字列や数値を簡単に文字として送信するために、printf()を使えるようにすると、次のようなプログラムになります。
 2行目に#include <stdio.h>を追加します。
 1文字出力関数 putch()を定義します。
--------------------------------------------------------------
#include "mcc_generated_files/mcc.h"
#include <stdio.h>

//1文字送信
void putch(char ch)
{
     EUSART_Write(ch);
}

void main(void)
{
     // initialize the device
     SYSTEM_Initialize();

     uint8_t count=0;
      while (1)
    {
          printf("count = ");
          printf("%3d\r\n",count);
          count++;
          __delay_ms(1000);
    }
}
--------------------------------------------------------------
このプログラムで下のようにTeraTermに1秒ごとにcountの値がアカウントアップされて表示されます。