
ちょと長いですがプログラムおいときます
下のプログラムでは割り込みをスイッチで行うのですが
スイッチを使わない割り込みをするにはタイマーがいいのではと聞きましたが
私にはわからなかったので教えていただきたいです
どこをどう変えたら起動できるでしょうか?
使っているものはマイコン(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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
めんどくさいので要点だけ。
1・ベクタテーブルのタイマ割込みのところに、タイマ割込みで処理したいエントリを指定する。
2・初期化のところでタイマ関係の初期化もする。そして割込みを許可する。
ハードウェアマニュアルをよく読んでください。少なくともプログラミングされているわけですから理解できない内容ではないハズです。他力本願にならぬよう、ご注意ください。
割込みをかける周期とかは設計上の話になりますのでそれは自分でクリアしてください。
あまり極端に短いタイマで割込みをかけるとメインループ処理に影響しますので、そういう部分は自分で習得する以外に方法はないのです。
No.1
- 回答日時:
前回の質問読みました.
ソースコードは斜め読み.
デバッグする気はありません.
とりあえず質問を眺めた上でのアドバイスですが,
1.「到達点は明確ですか?」
20MHzでR8を利用している様ですが, 壊れたLCDコントローラの代わりにタイマ割り込みを利用してビデオ信号をポート制御にて行おうとしているのであれば無謀としか言い様がありません.
ポート制御で生成できるパルス波形は1Mhz前後になるでしょう.
ビデオ信号に必要なピクセルクロックはVGAサイズでさえ20MHz程度になります.
昨今のFullHDであれば135Mhzとか.
作業前にその辺りに見積もりが取れていないと, 作業時間が無駄になってしまいます.
2.「タイマは定周期イベントを得る為に利用します」
タイマと呼ばれる周辺モジュール(ペリフェラル)の実態は概ねカウンタです.
カウントアップするパルスエッジのリソースとして正確なクロックを与えることで, 定周期のイベントを起こすことが可能です.
一般的にはイベントとしてCPU割り込みを発生させ, 定周期処理を実現します.
3.「要点は明確・簡潔に」
質問の記述からは困っているポイント・どのように動作したらOKなのかが伝わってこないので, アドバイスを送ろうにもどんなアドバイスを送れば良いのか困ってしまいます.
質問の仕方を工夫すれば, より多くの方から回答が寄せられるでしょう.
極論から言うと, 箇条書きがベストです.
社会に出られて実務を行われる際, コンパクトに話をまとめられる力はエンジニアにとって知識と並ぶ超強力な武器となるので是非磨いて下さい.
機能をすべて盛り込んだプログラムから不具合を抽出するのは難しいです.
(※結合テストから実施するのは非効率的)
各機能レベルまで分解し, 個々のドライバが期待の動作をしているか「モジュールテスト」から始めましょう.
具体的に言うならば, データシートを熟読してタイマ割り込みでLEDでも点滅させる動作確認用のプログラムを書き, タイマの使い方を把握してから実機能の搭載に取り掛かるべきだと思います.
ここまで書けるのなら半日~1日程度で片が付く問題でしょう.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- 英語 be sorry for doingとbe sorry to have doneの意味の違いについて 2 2023/06/09 13:57
- 英語 外国人 ウェイウェイ言ってる 3 2022/07/07 10:06
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- 英語 未来なのにwillを使わないことについて 3 2023/06/26 10:48
- 英語 "I can't wait."って、そのまま「待てない」じゃないんですか? 7 2022/06/16 06:36
- ブルーレイ・プレーヤー・レコーダー 東芝vardiaの難しそうな修理 5 2022/09/10 13:26
- pixiv 腐女子の方に質問です(できれば二次創作される方) 2 2022/06/20 04:47
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AWTのList仕様の可能、不可能に...
-
一定時間操作がなかったら、と...
-
pic 複数の割り込み関数 切り分...
-
ウォッチドッグタイマ(WDT)の...
-
電車で待機列の割り込みについ...
-
このレジの並び方は間違ってま...
-
メルコの無線LANで割り込み...
-
マイコン C言語 割り込み処理...
-
Macターミナルで実行中のプログ...
-
家電製品の電力周波数を変える機械
-
メモリのセグメント違反の解決...
-
バックグラウンドのプロセスの...
-
C# シリアル通信でデータ受信...
-
3のつく数字と3の倍数のみを表...
-
計算速度が遅い
-
VBAの配列サイズとメモリに関して
-
ACCESS側からEXCELの書式を設定...
-
c++でmatからvectorへの変換の...
-
C/C++→JAVAに変換するツール
-
VBAで一度開いたIEで再操...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
スーパーのレジで並んでいたら...
-
CPU負荷率の安全な上限と計...
-
マイコン C言語 割り込み処理...
-
このレジの並び方は間違ってま...
-
USB機器からのデータ受信による...
-
【組込み】割り込み中のstatic...
-
VB6でSendKeyを利用したTab移動...
-
一定時間操作がなかったら、と...
-
VB.NET スレッドからのイベント...
-
irqbalance って
-
ウォッチドッグタイマ(WDT)の...
-
Timerコントロールによる動作の...
-
pic 複数の割り込み関数 切り分...
-
マイコンSH-2の割り込みを用い...
-
Amazonfireタブレットにわから...
-
STATUSのZフラグについて
-
マイコンの割り込みについて教...
-
Timerコンポーネントのインター...
-
電車乗車時、並んでいるのに割...
おすすめ情報