MPLAB X のシミュレータを動かして見る(UART編)

〔基本編〕 〔刺激編〕 〔MPLAB X の使い方に戻る〕


前回の〔基本編〕で、シミュレータの基本操作を書きました、
なので、ここでは基本操作の事は省いて書きますので基本操作は前回の頁を見て下さい。
この頁では〔UART編〕と題してUSARTのシミュレーション機能を動作させて見ようと思います。
尚、使用するPICにUASRT機能が無いとダメなのでPIC12F1822を使います。

《シミュレータのサンプルプログラム3》

12F1822ピン構成  左図がピンの構成図です。
 2番ピンRX(RA5)が受信ピンです。
 3番ピンTX(RA4)が送信ピンです。

 動作的には1バイト受信してそのまま
 1バイト送信するだけのプログラムを組みます。


 下記がサンプルプログラムです。
 MPLAB(R) XC8 C Compiler Version 1.32コンパイラを使用しています。
 プログラムソースをダウンロードして下さい。
 プロジェクトを作成して、プロジェクトに取込みます。
---------------------------------------------------------------------
// シミュレータ機能のテスト3(USART入出力)
#include <xc.h>
#include "skUARTlib.h"

// コンフィギュレーション1の設定
#pragma config FOSC     = INTOSC   // 内部クロック使用する(INTOSC)
#pragma config WDTE     = OFF      // ウオッチドッグタイマー無し(OFF)
#pragma config PWRTE    = ON       // 電源ONから64ms後にプログラムを開始する(ON)
#pragma config MCLRE    = OFF      // 外部リセット信号は使用せずにデジタル入力(RA3)ピンとする(OFF)
#pragma config CP       = OFF      // プログラムメモリーを保護しない(OFF)
#pragma config CPD      = OFF      // データメモリーを保護しない(OFF)
#pragma config BOREN    = ON       // 電源電圧降下常時監視機能ON(ON)
#pragma config CLKOUTEN = OFF      // CLKOUTピンをRA4ピンで使用する(OFF)
#pragma config IESO     = OFF      // 外部・内部クロックの切替えでの起動はなし(OFF)
#pragma config FCMEN    = OFF      // 外部クロック監視しない(OFF)

// コンフィギュレーション2の設定
#pragma config WRT    = OFF        // Flashメモリーを保護しない(OFF)
#pragma config PLLEN  = OFF        // 動作クロックを32MHzでは動作させない(OFF)
#pragma config STVREN = ON         // スタックがオーバフローやアンダーフローしたらリセットをする(ON)
#pragma config BORV   = HI         // 電源電圧降下常時監視電圧(2.5V)設定(HI)
#pragma config LVP    = OFF        // 低電圧プログラミング機能使用しない(OFF)

// 割り込み処理(受信しないならこの関数は不要)
void interrupt InterFunction( void )
{
     InterUART() ;             // USART関連の割り込み処理
}
// メインの処理
void main()
{
     char dt[4] ;

     OSCCON = 0b01110010 ;     // 内部クロックは8MHzとする
     ANSELA = 0b00000000 ;     // アナログは使用しない(すべてデジタルI/Oに割当てる)
     TRISA  = 0b00100000 ;     // 2(RX:RA5)番ピンは入力、その他は出力に割当てる(RA3は入力専用)
     PORTA  = 0b00000000 ;     // 出力ピンの初期化(全てLOWにする)

     InitUART(2,3,51) ;        // USARTの初期化(RX=2 TX=3 9600bps)

     dt[0] = 0 ;

     while(1) {
          if (UART_Available() != 0) {  // データを受信しているか調べる
               dt[0] = UART_Read() ;    // 1バイトデータを受信する
               UART_Send(dt,1) ;        // 1バイトデータを送信する
          }
     }
}
---------------------------------------------------------------------
このプログラムにはUSART通信の為の「skUARTlib.c」「skUARTlib.h」が必要ですが、
ダウンロードしたファイルに含まれています。
また、シミュレーションで使う"usart.txt"や"USART.scl"もサンプルで含めて置きます。

《シミュレーション3》

@IDEメニューバーの「File」 → 「Project Properties (xxxx)」をマウスで順番にクリックします。
  または、「Dashboard」パネルのこのプロジェクトプロパティのアイコンアイコンをクリックします。

シミュレータ起動3-1a
Categories:」のパネル内で"Simulator"を選択します。
右のパネルの「Option categories:」で"Uart1 IO Options"を選択します。

シミュレータ起動3-1b
Enable Uart1 IO」 □ にチェックを入れて、「Output」の項目を"Window"にします。
設定をしたら[OK]ボタンをクリックします。


AUSART通信模擬入力用のデータファイルを作成します
  通常は外部機器からデータが送られて来ますが、シミュレーションなのでその代役です。
 メモ帳等で下記の様に書き込みます、"0D 0A"は16進数で"CR LF"の改行です。
 (----線は書かない文字のみ、念の為)
---------------------------------------------------------------------
wait 0 ms
"12F1822"
0D 0A
"USART"
0D 0A
wait 3 sec
---------------------------------------------------------------------
 作成したらプロジェクトフォルダに保存します、ここでは"uart.txt"としました。
 繰り返す場合は3秒後に繰り返しますが、時間は正確でないです。
 "HELP"に1行辺り260文字を超えない様にとか書いて有るような気がします。

BIDEメニューバーの「Windows」→「Simulator」→ 「stimulus」を順番にクリックします。
  起動しているなら[stimulus]画面の[Register Injection]タブをクリックします。

シミュレータ起動3-2
上画面の様に設定したら[Generate SCL file]ボタンをクリックし名前を付けて保存します。

Label 英字からはじまる英数字で任意にラベル名を設定します。
Reg/Var 空欄をクリックするとメニューが表示されます、レジスター(RCREG)を選択します。
Trigger USARTをシミュレートする時は、"Message"にします。
"RCREG"が読み込まれる時ににデータファイルから順番にセットされます。
PC Value プログラムの行番号か関数名を入力します。(但し、"Trigger"が"PC= "の時)
Width "PC= "の時使用するみたいだが使い方不明?
Data Filename クリックすると[開く]ウインドウが表示されるので、Aデータファイル名を指定します。
Wap Yes:データファイルを最後まで読出すと、最初から繰り返してデータをセット。
No :繰り返さないで最後のデータを使い続けます。
Format ここの型式に応じてデータファイルの数値を書きます
Pkt:Hex or Raw packet format (used with UART receive register)
Comments 適当に説明用のコメントを入力する、しなくてもOK

C"SCL file"を作成(Generate)したら動作させたいのですが、
  "Attach SCL file"を行うとエラーが出てファイルが読み込まれません。
  なので、"SCL file"を変更します。(通常はこんな直接ファイルを変更する操作は行いません)
  上記Bで作成されたファイルを[メモ帳]あたりで開きます。
 ---------------------------------------------------------------------
 // 
 // C:\Users\user\Documents\Electrical circuit\PIC\12F1822\test.X\USART.scl
 // Generated by Stimulus MPLAB X
 // Wed Jul 16 17:32:36 JST 2014
 // 


 configuration for "pic12f1822" is
 //    shared variable RCREG;      ← この行をコメントにする。
 end configuration;

 testbench for "pic12f1822" is
 begin
     // Register Injection (message-based)
     process is
         file     data_file_RCREG  : text;
         variable pkt_line_RCREG   : line;
         variable status_RCREG     : file_open_status;
    ・
    ・
    ・
 ---------------------------------------------------------------------
 上記の場所(9行目辺り)をコメントにしたら上書き保存します。
 ダウンロードファイルに"USART.scl"が有るのでそれを利用しても良いでしょう。
"MPLAB X V3.50"では上記ファイルが修正されたのでCの操作は必要ありません、
最新版を使いましょう。 *1)

D"SCL file"を上書き保存したら"stimulus"を動作させます。
 シミュレータ起動8a このアイコン[Attach SCL file]ボタンをクリックします。
 "SCL file"を選択する画面が出るのでBで保存したファイル名を選び動作させます。
 シミュレータ起動8b このアイコン[Detach SCL file]ボタンは動作終了です。

E後は、シミュレータを起動させます。

F[Output]画面の[UART1 Output]タブをクリックします。

シミュレータ起動3-3
この様に"12F1822"と"USART"の文字が数秒毎に繰り返されて表示されます。
"RCIE"のビットで"USART割込み受信を有効"にした場合もちゃんと割り込みが発生します。


《その他》

I2CとSPIの模擬も出来る様にして欲しいぞぉ。

"SCL file(Stimulus Control Language)"の記述方法のユーザーズガイド開き方(MPLAB X V3.50) *1)

@ [Start Page]を表示させます。
  メニューバーの「Help」→「Start Page」をクリックします。
A 開いたら、「Learn&Discover」タブをクリックします。
B ”Getting Started”の”Users Guides & Release Notes ”をクリックします。
  ブラウザでHTMLが開きます。
C そこの項目から”SCL User's Guide”を見れば良いでしょう。
  ”SCL User's Guide”はPC内にインストールされたHTMLファイルの様です。
  [file:///C:/Program%20Files%20(x86)/Microchip/MPLABX/v3.50/mplab_ide/mplab_ide/modules/docs/SCL_Users_Guide/index.html]
  がMyPCでのインストール先みたいなぁ。



"MPLAB X V3.50"での注意事項の追記(*1) 2016/12/28


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2016 Shigehiro Kimura All Rights Reserved.