Vol.945 26.Jun.2026

一太郎で短縮キー入力 PIC16F13145(2)_Serial Surface2の初期化

I 一太郎で短縮キー入力を行う   〜マクロとキー割付

by fjk

 一太郎で文字の色を指定するには、上部の「アイコン」または「Func_7/飾り/文字色の指定」で行っているが、マウスの移動が面倒くさい。
 そこで、以下の「キー入力記録」を使ってみた。

  Ctrl+Shift+@
キー入力記録を行う/終了
  Ctrl+@
キー入力記録の実行

 このキー入力記録は2016年に削除された機能だが、一太郎2019ではまだ使えた。しかし、一太郎2025では使えなかった。
 そこで、2025では、「マクロ」と「キー割付」を使って、ワンタッチキー入力できる様にした。(ショートカットキーのカスタマイズはabc903で紹介済)
 さて、一太郎のマクロを使うには「表示/補助/クラシックタイプのメニューを使う」に設定しないと、ツールメニュに「マクロ」が表示されない(マクロ登録後はオリジナル表示でもマクロ実行可)。

【マクロの登録】 ジャストsystem
@「マクロ/記録開始」を選ぶと、マクロウィンドウが表示され、マクロが記録される
A 登録したい手順を実行
B マクロウィンドウの■ボタンをクリックすると、マクロ登録が終了
C「マクロ名」を入力後、OKを押すとマクロが登録される。
  (マクロは「システム」と「文書」のどちらに登録するか選択できるが、
   次のキー割付を行う場合は「システム」に登録すること)
 
【マクロの実行】 ジャストsystem
@「ツール/マクロ/マクロ実行・編集」を選ぶ。
A マクロリストで実行したいマクロを選び、「実行」」
 
【マクロをキーに割り付ける】 ジャストsystem 
@「ツール/割り付け/キー」を選ぶ
A 左側に「割り付けるキー」、右側に「(システム)マクロ」を選択し、「割付」を押す。
 
【キータッチでマクロを実行】
選択したいエリアをマウスで選び、割り付けたキーでマクロを実行することができる
もし、「範囲が設定されていません」とエラーが出る場合、マクロに以下の赤字のAdvancedRange()を追加
 
【文字色を指定するマクロの例】
!! 選択範囲の文字に指定した色(赤)を付ける
	AdvancedRange()                            !! 既に選択されている範囲を指定
	文字属性(.飾りモード=1,.文字色="R255G0B0")  !! 文字色=赤、「alt+R」に割付

 このマクロによる方法は、2025以外の他の一太郎でも有効。
 なお、一太郎のマクロ(SuperPlayRite)の詳細は、「ツール/マクロ/マイクロバイザー」を参照。

<おまけ> wordでも、「マクロの記録」と「キー割り当て」で同様のことができます。


P PIC16F13145 (2)   〜シリアル通信と割り込み処理

by fjk

 前報(abc944)に引き続き、PIC16F13145で「シリアル通信と割込」について確認を行った。

【ハード】
 ハードはabc944のままで、シリアル通信用の配線を追加した(abc944の回路図参照)。
 
★注: MCCでPPS使用上の注意!
MCCでpin設定しGenerateすると、自動でPPS設定を行ってくれるが、機能によってはPPSに対応しないピンの場合があるので注意。例えば、PIC16F13145でRxはポートB又はポートCのピンにしかPPS設定できない。もし、RxをポートAのピンにMCCで設定してもエラーとならないが、Rxとしては機能しないので注意が必要!!。(TxはポートAにも指定できます)。
 
【MCC設定】
1.MCCで「USART1」を追加
2.USART1の設定画面で、(以下以外はdefaultのまま)
   baurate=115200
   Interrupt DriveをON
3.下面にあるPinGrideViewでピン設定
   RX1 = PB7
   TX1 = RA4
   SW0 = RC3(Pins画面でNameとWPullup設定)
   LED0 = RC2(Pins画面でName設定)
4.「Ganerate」を実行
5.InterruptManagerで割込状態を確認

MCC画面例 [EUSART、PIN、INTERRUPT]

InterruptManager

【ソフト】
プログラムはabc944にシリアル通信機能を追加した。USB接続したテラタームなどのターミナルで「1」から「5」を入力(要Enter)すると、LED点滅周期が200〜1000mSに変化する。なお、基板上のプッシュスイッチの機能もそのまま使用できる。(BSキーも有効)
 
UASRTは受信データがあれば、割り込み処理で受信バッファー(eusart1RxBuffer)にデータを格納し、eusart1RxCounterに受信文字数を格納している。
 
そして、EUSART1_IsRxReady()で受信済み文字数を確認し、受信文字があれば、EUSART1_Read()で受信文字(uint8_t)を所得できる。
 
シリアル送信は、EUART1_IsTxReady()で送信バッファーの空き(eusart1TxBufferRemaining)を確認してから、EUSART1_Write(uint8_t txData)でデータ(txData)を送信している。
 
自作のシリアル文字列受信関数(myEusart)[エコーバック付]を記述し、さらに、以下の記述を追加すると、myEusart関数がシリアル受信割込関数の最後に実行され、SFlg != 0なら、char RBuf[]に受信文字列が格納されている。
		EUSART1_RxCompleteCallbackRegister( myEusart ); 

シリアル文字列出力は、改行無しのEU_print(char *str)と、改行付のEU_puts(char *str)を作製した。
 
※abc933まではeusart.cにmyEusart()を記述していたが、ここではeusartの割込Handlerを利用したので、mcc_geerated_filesに手を加える必要がなくなった。。

abc945-13145.c(zip)

/******************************(abc945-13145.c)*********************
 *  Lチカ・シリアル通信プログラム(割り込み付き)
 *-----------------------------------------------------------------*/

#include "mcc_generated_files/system/system.h"

//=====  シリアル関係 =========
#define  EU_BFSIZE   80

char     RBuf[EU_BFSIZE];                  // 受信データバッファ
uint8_t  EU_Flg = 0;                       // 受信フラグ

//-----  シリアル受信割り込み関数
void myEusart(void) {
  static uint8_t sIdx = 0;                  // 受信データポインタ
    char     ch;                            // 受信文字

    if(EUSART1_IsRxReady()){                // 受信データ有り?
        ch = EUSART1_Read();                // データ受信
        EUSART1_Write(ch);                  // エコーバック
        if((ch == 0x0a)||(ch == 0x0d)){     // 改行処理
            RBuf[sIdx] = 0;                 // 文字列終端文字
            sIdx = 0;                       // ポインタを初期化
            EU_Flg = 1;                     // 受信フラグON
        }else if((ch == 0x08)&&(sIdx > 0)){ // BS処理
            sIdx--;
        }else{                              // 上記以外の文字
            if(sIdx < EU_BFSIZE){           // バッファサイズ以内?
                RBuf[sIdx++] = ch;          // バッファにデータ格納
            }
        }
    }
}

//----- 文字列シリアル出力(改行なし)
void EU_print(char * msg) {
    while(*msg != 0)  {
        while(!EUSART1_IsTxReady());        //データ送信確認
        EUSART1_Write(*msg++);              //1文字送信
    }
}

//----- 文字列シリアル出力(改行付き)
void EU_puts(char *msg) {
    EU_print( msg );
    EU_print("\n");
}

//=========  main  ===================
int main(void) {
    uint8_t  tm = 50;                       // 10msインターバル回数
    uint8_t  tc = 0;                        // インターバルカウンタ
    uint8_t  led =  1 ;                     // LED On/Off  フラグ
    uint8_t  sw0;                           // SW0データ
    uint8_t  lst_sw0 = 1;                   // 一つ前のSW0データ
    uint8_t  rch;                           // 受信文字
  
    SYSTEM_Initialize();                    //初期化
    
    EUSART1_RxCompleteCallbackRegister(myEusart); 
                                            // 割り込みハンドラー設定
    INTERRUPT_GlobalInterruptEnable();      // 割り込み許可
    INTERRUPT_PeripheralInterruptEnable();

    EU_puts("Test PIC16F13145");

    while(1)  { 
        if(EU_Flg){                         // 受信データ有
            EU_Flg = 0;                     // 受信フラグクリア
            rch = RBuf[0];                  // 受信データ取得
            if((rch > 0x30)&&(rch < 0x36)){ // '0' < rch < '6' ? 
                tm = (rch - 0x30) * 10;
                tc = tm;
            }
        }

        sw0 = SW0_GetValue();               // SW0状態をゲット
        if((sw0 == 0) && (lst_sw0 != 0)){   // 立ち下がり検出
            tm += 10;                       // インターバルを増やす
            if (tm > 50) tm = 10;
            tc = tm;                        // カウンタ値を再セット
        }  
        lst_sw0 = sw0;                      // 一つ前のデータを記憶

        if(tc == 0){                        // カウンタが0?
            if(led)   LED0_SetLow();        // LED点灯
             else     LED0_SetHigh();       // LED消灯
            led ^= 1;                       // LEDフラグ反転
            tc = tm;                        // カウンタ再セット
        }else{
            tc--;                           // カウントダウン
        }
        __delay_ms(10);                     // ループは10mS毎
    }  
}

ブレッドボード配線例


S Surface2の初期化   〜パソコンを処分する前に

by fjk

 長い間使用しなかったため、内蔵電池が昇天し、充電できなくなったSurface2を処分するために、ACアダプターを接続してシステムを起動し、下記の手順で、初期化(工場出荷時の状態に)しました。

  1. ディスクトップ画面で、画面の右端から左にスワイプ
  2. 「設定(歯車)」をクリック
  3. 「PC設定の変更」をクリック
  4. 「保守と管理」を選択
  5. 「回復」を実行
  6. 「すべてを削除してWindowsを再インストールする」をクリック

 ちなみに、他のSurfaceも同様の手順で初期化すると、工場出荷時の状態にできるようです。

<参 考> −−− Surface 2 の仕様 −−−(Microsoftのページより)

ソフトウェア: Windows RT 8.1 、Microsoft Office 2013 RT1
外 形: 寸法: 275 mm x 173 mm x 8.9 mm、 重量: 1.49 lbs 未満 (676 グラム)
大文字と小文字: VaporMg、 色: マグネシウム (シルバー)
統合されたキックスタンド: 二重位置(24度または40度に角度を付けた表示)
物理ボタン: 音量を上げる/下げる、電源
メモリ: 32 GB または 64 GB、2 GB RAM
ディスプレイ: 画面: 10.6 インチ、解像度: 1920 x 1080、縦横比: 16:9 (ワイドスクリーン)
タッチ: 5 ポイントマルチタッチ、 耐久性に優れたディスプレイ
CPU: NVIDIA Tegra 4 (T40) 1.7 GHz クワッド コア
ワイヤレス
ネットワーク:
Wi-Fi (802.11 a/b/g/n)、 Bluetoothv.4.0 テクノロジ
2G GSM (クワッドバンド: 850/900/1800/1900)
3G UMTS (バンド 1、2、5)、 4G LTE (バンド 2、4、5、7、17)3
バッテリー残量: 最大 10 時間のビデオ再生、7 日から 15 日間のアイドル状態
付属の電源アダプターを使って 2 〜 4 時間で充電
カメラ、ビデオ: 3.5メガピクセルの前面カメラ、5.0メガピクセルのリアカメラ
オーディオ: 2 つのマイク、Dolby サウンド搭載ステレオ スピーカー
ポート: フルサイズ USB 3.0、microSD カードリーダー
microSIM カード スロット (AT&T 4G LTE モデルのみ)
ヘッドホン ジャック、HD ビデオ出力ポート、カバー用端子
センサー: 環境光センサー、加速度計、ジャイロスコープ
電子コンパス、近接センサー、デジタルコンパス
位置情報: (AT&T 4G LTE モデルのみ)GPS、 アシスト GPS、 Glonass

  1. Surface 2 は Microsoft Office 2013 RT を搭載しています。 一部の機能に制限がある場合があります。 Office.com/OfficeRT をご覧ください。
  2. システム ソフトウェアが一定の記憶容量を使用します。 使用可能な記憶容量は、システム ソフトウェアの更新プログラムやアプリの使用状況によって変化します。 詳しくは、Surface.com/Storage をご覧ください。
  3. GSM、UMTS、および LTE 仕様は Surface 2 (AT&T 4G LTE) のみに対応しています。 通話エリア、サービス、および 4G LTE は、必ずしもすべての場所では使用できません。


※プログラムのリストをハイライト付きのスタイルで見る場合はここをクリック


※ 本レポートの参考・利用は、あくまでも自己責任でお願いします。


一太郎で短縮キー入力 PIC16F13145(2)_Serial Surface2の初期化