• 検索結果がありません。

PWM出力とフリーランニングによるリモコン受信

第3章  システム・クロック切り替えの応用

5.3  リモコン受信

5.3.2  PWM出力とフリーランニングによるリモコン受信

⑥ パルス幅計測中のタイム・アウト

パルス幅計測中に16ビット・タイマ/イベント・カウンタのOVF0をメイン・プログラムでテストし,2回 検出したときはタイム・アウトとしデータは無効とします。

また,この例では16ビット・タイマ/イベント・カウンタをPWM出力モードで動作させていますので,5.2 PWM出力のプログラムをリンクすることにより,リモコン受信とPWM出力を同時に行うことができます。

(1)パッケージの説明

<パブリック宣言シンボル>

TIM̲PRO :タイマ・オーバフロー処理のサブルーチン名称 RMDATA :リモコン受信データを格納

RPT :リピート有効期間判断フラグ IPDTFG :有効データの有無判断フラグ RMDTOK :入力信号の有効の有無判断フラグ RMDTSET :入力信号の有無判断フラグ

OVSENS :INTP0処理タイマ・オーバフロー検出フラグ

<使用するレジスタ>

バンク0 :AX,BC,HL

<使用するRAM>

名 称 RPTCT RMENDCT SELMOD LD̲CT RMDATA TO̲CNT CR01̲NP CR01̲OP WORKP

用    途 リピート・コード有効時間カウンタ データ入力後の無入力時間カウンタ モード選択

リーダ信号検出カウンタ 有効データ格納エリア

タイマ・オーバフロー検出カウンタ 最新タイマ・カウント値格納エリア 前回タイマ・カウント値格納エリア 入力信号格納エリア

属 性 SADDR

SADDRP

バイト 1

<使用するフラグ>

名 称 IPDTFG RMDTOK RMDTSET RPT TO̲FLG OVSENS

用    途 有効データの有無

有効な入力信号の有無 入力信号の有無

リピート有効期間が経過したかどうかの判断 タイマ・オーバフローあり

INTP0処理でタイマ・オーバフロー検出

<ネスティング>

5レベル11バイト

<使用するハードウエア>

●16ビット・タイマ/イベント・カウンタ

●P00/TI00/INTP0

●P30/TO0

<初期設定>

●OSMS=#00000001B 発振モード選択レジスタ 分周回路を使用しない

●16ビット・タイマ/イベント・カウンタの設定

 CRC0=#00000100B CR00, CR01の動作モード選択  TMC0=#00000010B PWM出力モード

 TCL0=#00100000B PWM基本周期61.0μs  TOC0=#00000011B ロウ・アクティブ出力

●PM30=0 P30出力モード

●SCS=#00000011B INTP0サンプリング・クロックfXX/26

●PPR0=0 INTP0高優先順位割り込み

●PMK0=0 INTP0割り込み許可

●カスタム・コードをCSTMに定義し,パブリック宣言

●RAMクリア

<起動方法>

●16ビット・タイマ/イベント・カウンタのOVF0をテストし,OVF0のセットのときは,サブルーチン TIM̲PROをコールしてください。

●リモコン信号のエッジ検出による割り込み要求で起動

(2)使 用 例

(3)SPDチャート

IF:入力信号あり TIM̲PRO

THEN

IF:有効データあり THEN

IF:リピート・コード無効時間 THEN

リピート・コード無効状態に設定  RPT,IPDTFG,RMDTOKクリア ELSE

IF:データ入力終了後(61.0μs×2以内)に入力なし THEN

有効データありに設定  RMDTOK,RMDTSETセット

リーダ・ロウ検出モードに設定 S̲M0SET ELSE

タイマ・オーバフローのチェック TO̲CHK

IF:リード・ロウ検出モード TO̲CHK

THEN

タイマ・オーバフローなしに設定 ELSE

タイマ・オーバフロー・カウント IF:タイマ・オーバフロー2回 THEN

リーダ・ロウ検出モードに設定 S̲M0SET

レジスタ・バンク0を選択 100μsウエイト WAIT CASE:SELMOD INTP0

OF:0

リーダ・ロウ検出モード RM̲STA リーダ・ロウ計測モード LEAD̲L リーダ・ハイ計測モード LEAD̲H

カスタム・コード/データ取り込みモード CDCODE リピート・コード検出モード REPCD

異常データ検出モード ENDCHK OF:1

OF:2 OF:3 OF:4 OF:5

タイマ・オーバフローのチェック TO̲CHK

IF:P00 = LOW RM̲STA

THEN

100μsウエイト WAIT IF:P00 = LOW THEN

キャプチャ・レジスタのデータをメモリに格納 リーダ・ロウ計測モード1を選択

INTP0立ち上がりエッジ検出モードに設定

IF:P00 = HIGH LEAD̲L

THEN

100μsウエイト WAIT IF:P00 = HIGH THEN

タイマ読み出し PW̲CT

IF:3 ms ≦ リーダ・ロウ ≦ 10 ms THEN

リーダ・ハイ検出モードを選択

INTP0立ち下がりエッジ検出モードに設定 リーダ・ロウ検出モードに設定 S̲M0SET ELSE

IF:P00 = LOW LEAD̲H

THEN

100μsウエイト WAIT IF:P00 = LOW THEN

タイマ読み出し PW̲CT IF:2 ms ≦ リーダ・ハイ ≦ 5 ms

THEN

カスタム・コード/データ取り込みモードを選択 データ格納用エリアのイニシャライズ

リピート検出モードを選択

INTP0立ち上がりエッジ検出モードに設定 ELSE

THEN

IF:リーダ・ハイ ≧ 3 ms

ELSE

リーダ・ロウ検出モードに設定 S̲M0SET

IF:P00 = LOW CDCODE

THEN

100μsウエイト WAIT IF:P00 = LOW THEN

IF:0.5 ms < 入力データ ≦ 2.5 ms THEN

IF:入力データ ≧ 1.8 ms THEN

CYセット ELSE

CYクリア

データ格納エリアにCYを格納 IF:データ入力32ビット終了 THEN

IF:カスタム・コード一致 THEN

IF:カスタム/データ・コードの反転データ一致 THEN

データ・コードを格納 入力データありの状態に設定

 IPDTFGセット,RMDTSET,RPT,

 RMDTOKクリア

異常データ検出モードに設定 S̲M5SET ELSE

リーダ・ロウ検出モードに設定 S̲M0SET ELSE

リーダ・ロウ検出モードに設定 S̲M0SET ELSE

リーダ・ロウ検出モードに設定 S̲M0SET

IF:P00 = HIGH REPCD

THEN

100μsウエイト WAIT IF:P00 = HIGH THEN

IF:有効データあり THEN

タイマ読み出し PW̲CT IF:リピート・コード ≦ 1 ms THEN

リピート・コード有効状態に設定  RPTセット

データ入力終了状態に設定

異常データ検出モードに設定 S̲M5SET ELSE

リーダ・ロウ検出モードに設定 S̲M0SET ELSE

異常データ検出モードに設定 S̲M5SET タイマ読み出し CR̲READ

IF:P00 = LOW ENDCHK

THEN

100μsウエイト WAIT IF:P00 = LOW THEN

入力信号を無効状態に設定  IPDTFG,RPTクリア

リーダ・ロウ検出モードに設定 S̲M0SET

リーダ・ロウ検出モードを選択  TO̲FLGクリア

INTP0立ち下がりエッジ検出モードに設定 S̲M0SET

異常データ検出モードを選択 リピート有効時間用のカウンタを設定 S̲M5SET

IF:エッジ検出処理後にOVF発生 PW̲CT

THEN

IF:OVF発生 < 割り込み受付処理時間以上(65クロック)

THEN

タイマ・オーバフローありに設定 キャプチャ・レジスタ値の取り込み キャプチャ・レジスタ値を前回の値から減算 IF:減算結果にボロー発生(CY = 1)

THEN

IF:タイマ・オーバフローあり(TO̲FLG = 1)

THEN ELSE

IF:タイマ・オーバフローあり(TO̲FLG = 1)

THEN

CYフラグ・クリア

CYフラグ・セット

キャプチャ・レジスタ値をメモリに格納

(4)プログラム・リスト