プロが教えるわが家の防犯対策術!

ちょと長いですがプログラムおいときます
下のプログラムでは割り込みをスイッチで行うのですが
スイッチを使わない割り込みをするにはタイマーがいいのではと聞きましたが
私にはわからなかったので教えていただきたいです
どこをどう変えたら起動できるでしょうか?
使っているものはマイコン(R8C15)です
内容とか足らないのかもしれませんが何でも言ってください
すみませんがよろしくお願いします

.INCLUDE sfr_r815.inc
;プログラム部分
.SECTION PROGRAM, CODE
.ORG 0D000h

Start:
LDC #0500h, isp
LDINTB #VarVector

JSR SetClock20MHz
JSR InitPort
JSR InitKeyInputIntr


MOV.B Dummy, r0h
FSET i


Loop:
BCLR p1_1
JSR Wait2s

BSET p1_1
JSR Wait2s

JMP Loop

;外部クロックに切り替えるサブルーチン

SetClock20MHz:
BSET prc0
BSET cm13
BSET cm15
BCLR cm05
BCLR cm16
BCLR cm17
BCLR cm06
NOP
NOP
NOP
NOP
BCLR ocd2
BCLR prc0
RTS

;ポートの初期化を行なうサブルーチン
InitPort:
MOV.B #00000110b,drr
MOV.B #00000110b,p1
MOV.B #00000110b,pd1
RTS
;キー入力割り込みの初期化を行なうサブルーチン
InitKeyInputIntr:
BCLR ki0pl
BSET ki0en
MOV.B #01h, kupic
RTS

;2秒待ちサブルーチン
Wait2s:
MOV.W #200, r1
Wait2s_1:
JSR Wait10ms
SBJNZ.W #1, r1, Wait2s_1
RTS

;10m秒待ちサブルーチン
Wait10ms:
PUSH.W r0
MOV.W #28571,r0
Wait10ms_1:
SBJNZ.W #1,r0,Wait10ms_1
POP.W r0
RTS

;キー入力割り込み処理ルーチン
KeyInput:
Start1:
MOV.B #10001001b,pd1
MOV.B #00000000b,p1

MOV.B #10111000b,pd3
MOV.B #00000000b,p3


Syoki01:
MOV.W #2,r1
BSET p1_3 ;M
BCLR p3_3 ;SDI
Loop1:
MOV.W #2,a1
GYOU:
MOV.W #9,a0
CP00:
BSET p3_4 ;CP=H
BCLR p3_5
JSR wait1
BCLR p3_4 ;CP=L
JSR wait1
BSET p3_4 ;CP=H
BCLR p3_5
JSR wait1
BCLR p3_4 ;CP=L
JSR wait1
SBJNZ.W #1,r1,CP00
BNOT p3_3 ;SDI
MOV.W #2,r1
SBJNZ.W #1,a0,CP00

LOAD0:
BSET p3_4 ;CP=H
;BSET p3_5 ;LOAD
JSR wait1
BCLR p3_4 ;CP=L
BCLR p1_0 ;DIO
BSET p3_5 ;LOAD
JSR wait1
BNOT p3_3 ;SDI
SBJNZ.W #1,a1,GYOU
MandDIO:
BSET p1_0 ;DIO
BNOT p1_3 ;M
JMP Loop1
wait1:
MOV.W #30,r2
wait001:
SBJNZ.W #1,r2,wait001
RTS


REIT

;その他の割り込み処理ルーチン
NOTUSE:
REIT

;データ(作業領域)部分
.SECTION WORK,DATA
.ORG 0400h

Dummy:
.BLKB 1

;可変ベクタテーブル
.section VARIABLEVECTOR, ROMDATA
.org 0F000h

VarVector:
.lword NOTUSE
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword 0
.lword KeyInput
.lword NOTUSE
.lword NOTUSE
.lword NOTUSE
.lword NOTUSE
.lword NOTUSE


;リセットベクタ部分
.SECTION FIXVECTOR, ROMDATA
.ORG 0FFFCh
Reset:
.LWORD Start | 0FF000000h

.END

A 回答 (2件)

めんどくさいので要点だけ。



1・ベクタテーブルのタイマ割込みのところに、タイマ割込みで処理したいエントリを指定する。

2・初期化のところでタイマ関係の初期化もする。そして割込みを許可する。

ハードウェアマニュアルをよく読んでください。少なくともプログラミングされているわけですから理解できない内容ではないハズです。他力本願にならぬよう、ご注意ください。

割込みをかける周期とかは設計上の話になりますのでそれは自分でクリアしてください。
あまり極端に短いタイマで割込みをかけるとメインループ処理に影響しますので、そういう部分は自分で習得する以外に方法はないのです。
    • good
    • 0

前回の質問読みました.


ソースコードは斜め読み.
デバッグする気はありません.

とりあえず質問を眺めた上でのアドバイスですが,
1.「到達点は明確ですか?」
20MHzでR8を利用している様ですが, 壊れたLCDコントローラの代わりにタイマ割り込みを利用してビデオ信号をポート制御にて行おうとしているのであれば無謀としか言い様がありません.
ポート制御で生成できるパルス波形は1Mhz前後になるでしょう.
ビデオ信号に必要なピクセルクロックはVGAサイズでさえ20MHz程度になります.
昨今のFullHDであれば135Mhzとか.
作業前にその辺りに見積もりが取れていないと, 作業時間が無駄になってしまいます.

2.「タイマは定周期イベントを得る為に利用します」
タイマと呼ばれる周辺モジュール(ペリフェラル)の実態は概ねカウンタです.
カウントアップするパルスエッジのリソースとして正確なクロックを与えることで, 定周期のイベントを起こすことが可能です.
一般的にはイベントとしてCPU割り込みを発生させ, 定周期処理を実現します.

3.「要点は明確・簡潔に」
質問の記述からは困っているポイント・どのように動作したらOKなのかが伝わってこないので, アドバイスを送ろうにもどんなアドバイスを送れば良いのか困ってしまいます.
質問の仕方を工夫すれば, より多くの方から回答が寄せられるでしょう.
極論から言うと, 箇条書きがベストです.
社会に出られて実務を行われる際, コンパクトに話をまとめられる力はエンジニアにとって知識と並ぶ超強力な武器となるので是非磨いて下さい.


機能をすべて盛り込んだプログラムから不具合を抽出するのは難しいです.
(※結合テストから実施するのは非効率的)
各機能レベルまで分解し, 個々のドライバが期待の動作をしているか「モジュールテスト」から始めましょう.

具体的に言うならば, データシートを熟読してタイマ割り込みでLEDでも点滅させる動作確認用のプログラムを書き, タイマの使い方を把握してから実機能の搭載に取り掛かるべきだと思います.
ここまで書けるのなら半日~1日程度で片が付く問題でしょう.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!