また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

Similar documents
も 常に 2 つのコイルに電圧を印加する 2 層励磁方式や 1 つのコイルと 2 つのコイルに交互に電圧を印 2

正転時とは反対に回転する これが逆転である 図 2(d) の様に 4 つのスイッチ全てが OFF の場合 DC モータには電流が流れず 停止する ただし 元々 DC モータが回転していた場合は 惰性でしばらく回転を続ける 図 2(e) の様に SW2 と SW4 を ON SW1 と SW3 を O

スライド 1

Microsoft PowerPoint - 工学ゼミⅢLED1回_2018

Microsoft Word - 4章.doc

PowerPoint プレゼンテーション

スライド 1

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

Taro11-…e…L…X…g.jtd

スライド 1

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

PowerPoint プレゼンテーション

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

ex05_2012.pptx

スライド 1

ソフトウェア基礎技術研修

スライド 1

余白 : 上下 25.4mm, 左右 19mm (Word2012 での やや狭い 設定 ) マイコンプログラミング演習 I レポート 1 実験日 提出日 回路構築 /LED を用いた I/O 制御 [16pt] 班員と担当責任者第 0 班レポート作成

スライド 1

スライド 1

実習内容 PIC18C242 のポート B に接続した LED を点滅させます ( 他の実習と同じ内容です ) 8 個の LED に表示される値が +3 ずつインクリメントします MPLAB を使って MPASM アセンブラのソース ファイルをアセンブルします MPLAB とソース ファイルは配布し

計算機アーキテクチャ

スライド 1

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コー

メソッドのまとめ

< 動作マトリクス > 停止 REQ 固定位置 REQ 往復 REQ 停止 () 現在位置と同じなら無視異なれば停止パルス中へ 停止パルス中へ 停止 ( 固定位置 ) 現在位置と同じなら無視異なれば停止パルス中へ 停止パルス中へ 停止パルス中 ( 停止パルス終了後 ) ( 停止パルス終了後動作 )

Microsoft Word - 工学ゼミ3_テキスト

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

Microsoft PowerPoint - kougi7.ppt

プログラミングA

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

untitled

ex04_2012.ppt

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

C#の基本2 ~プログラムの制御構造~

計算機アーキテクチャ

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

情報処理概論(第二日目)

Microsoft Word - テキスト.docx

Microsoft Word - 工学ゼミ3_テキスト

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

PLCシリアル通信 MODBUS通信 データ送信/受信プログラム例

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

VLSI工学

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

スライド 1

Microsoft Word - 19-d代 試é¨fi 解ç�fl.docx

プログラミング入門1

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

スライド 1

Microsoft Word - VBA基礎(3).docx

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

PowerPoint プレゼンテーション

Microsoft Word - VBA基礎(6).docx

プログラミングA

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

PowerPoint プレゼンテーション

Microsoft PowerPoint - 11Web.pptx

MMUなしプロセッサ用Linuxの共有ライブラリ機構

プログラミング入門1

1. 購入物品リスト 電子部品名 用途 規格 単価 数量 合計 購入先 PIC16F84A-20/P PIC16F 秋月電子通商 カーボン抵抗 1/4W R0,R1 10kΩ 秋月電子通商 カーボン抵抗 1/4W R2,R2 追加分 300Ω 秋月

Microsoft Word - 実験4_FPGA実験2_2015

Microsoft PowerPoint - C4(反復for).ppt

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

出 アーキテクチャ 誰が 出 装置を制御するのか 1

東邦大学理学部情報科学科 2014 年度 卒業研究論文 コラッツ予想の変形について 提出日 2015 年 1 月 30 日 ( 金 ) 指導教員白柳潔 提出者 山中陽子

CASL入門

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

Microsoft PowerPoint - OS11.pptx

CC-Link通信

BANK1 MOVLW b' ' PIC16F648A独自 MOVWF CMCON コンパレータ OFF BCF INTCON,PEIE 周辺割り込み OFF PIC16F648A独自 MOVLW B' ' RB2/TX, RB1/RX PIC16F648A独自 MOVW

GR-SAKURA-SAのサンプルソフト説明

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

PowerPoint Presentation

2. アーキテクチャ 概 要 PIC16F8x ファミリは 命 令 語 長 14bit の RISC[1]で 命 令 は35 種 類 である 1 命 令 は4クロックで 実 行 されるが 実 際 にはパイプライン 処 理 [2]されている ノイマン 型 コンピュータ[3]と 違 いプログラムとデータ

プログラミングI第5回

データ構造

,, ( ) 5 ma ( ) 5V V 5 6 A B C D E F G H I J , LED LED, LED, 7 LED,, 7 LED ( ) V LED VCC 5V 7 LED VCC f g f a g b a b c e d e d c dp dp VCC (

JavaプログラミングⅠ

PIC18 Istructios PIC16, PIC x Microchip Techology Icorporated. All Rights Reserved. PICmicro PIC18 52

Microsoft PowerPoint - diip ppt

15群(○○○)-8編

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門 作品のタイトル : Toppers_JSP と Scicos_lab / (Scilab でも可 ) による 組込みメカトロニクス制御シミュレーション 作成者 : 塩出武 ( シオデタ

プログラミングI第10回

Microsoft PowerPoint - OS07.pptx

スライド 1

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

Processingをはじめよう

今回の内容 マイクロコンピュータにおけるプログラミング 機器の中に組み込まれる ロボット 自動車 家電 などいろいろな分野で利用 プログラムを用いて外部の装置を動作させる マイコンから の出力 発光ダイオード Light Emitting Diode 液晶ディスプレイ Liquid Crystal

情報処理Ⅰ

Arduino をドリトルから 制御する教材の試行 鈴木裕貴 1

Taro-再帰関数Ⅲ(公開版).jtd

Microsoft Word - 3new.doc

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

情報システム設計論II ユーザインタフェース(1)

1 はじめに このアプリケーションは 計算機ハードウェア論 のアセンブリ言語 ( 超簡単命令セット ) の理解を助けるために製作されました 便宜的に機能を追加 削除した箇所があるため このアプリケーション上での動き方が実際のCPUでの動き方と異なる場合があることに留意してください このアプリケーショ

Transcription:

コンピュータ工学講義プリント (12 月 11 日 ) 今回は ローテイト命令を用いて 前回よりも高度な LED の制御を行う 光が流れるプログラム 片道バージョン( 教科書 P.119 参照 ) 0.5 秒ごとに 教科書 P.119 の図 5.23 の様に LED の点灯パターンが変化するプログラムを作成する事を考える この様にすれば 光っている点が 徐々に右に動いているように見え 右端まで移動したら また左端に光が移動するように見える この様な点灯パターンを実現するには PORTB レジスタに 80H 40H 20H 10H 08H 04H 02H 01H 80H 40H 20H と順に 0.5 秒ごとに書き込めばよい この様な点灯パターンを実現する方法は色々考えられるが 最も効率が良い実現方法は おそらくローテイト命令を利用する方法である ローテイト命令( 教科書 P.81~P.82 参照 ) PIC16F84A には RRF 命令 ( 教科書 P.81 参照 ) と RLF 命令 ( 教科書 P.82 参照 ) の 2 種類のローテイト命令がある RRF 命令は 図 1 に示す様に C フラグをファイルレジスタの最上位ビットの左に配置し C フラグおよびファイルレジスタの各ビットを一つずつ 右方向に回転 ( ローテイト ) する命令である ( ファイルレジスタの最下位ビットは C フラグに入る ) そして 第 2 オペランドの d が 0 なら結果は C フラグと W レジスタに d が 1 なら結果は C フラグと元のファイルレジスタに格納される 1

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB) には 0 が入る これは 変数の値を 2 倍したことに相当する RLF A,1 の結果 C フラグが 1 になれば 2 倍した際にオーバーフローが起こった事を意味する ( リスト 1 参照 ) リスト 1 8 ビット変数を 2 倍するプログラム RLF A,1 ; A を左ローテイト ; この時点で 8 ビット変数 A は 2 倍され オーバーフローが起こっていれば C フラグが 1 になっている また 16 ビット変数 A の下位バイトのアドレスを AL 上位バイトのアドレスを AH とした場合 まず C フラグを 0 にした上で 先に下位バイトを左ローテイトし 次に上位バイトを左ローテイトすると 16 ビット変数 A の値を 2 倍する事ができる ( リスト 2 参照 ) リスト 2 16 ビット変数を 2 倍するプログラム RLF AL,1 ; 下位バイトを左ローテイト RLF AH,1 ; 上位バイトを左ローテイト ; (AL の MSB は C フラグ経由で AH の LSB に転送される ) ; この時点で 16 ビット変数 A は 2 倍され オーバーフローが起こっていれば C フラグが 1 になっている 2

リスト 1 やリスト 2 の例で分かるように RLF 命令は 変数の値を 2 倍する時に使われる命令である 一方で RRF 命令は 変数の値を 1/2 にする時に使われる命令である 8 ビット変数のアドレスを A とし C フラグを 0 にした上で RRF A,1 を実行すると 変数の内容が右に 1 ビットシフトし 最上位ビットには 0 が入る これは変数を 1/2 にし 小数点以下の端数を切り捨てる操作に相当する 端数が出た場合は C フラグが 1 になる ( リスト 3 参照 ) リスト 3 8 ビット変数を 1/2 にするプログラム RRF A,1 ; A を右ローテイト ; この時点で 8 ビット変数 A は 1/2 になり 小数点以下の端数があれば C フラグが 1 になっている また 16 ビット変数 A の下位バイトのアドレスを AL 上位バイトのアドレスを AH とした場合 まず C フラグを 0 にした上で 先に上位バイトを右ローテイトし 次に下位バイトを右ローテイトすると 16 ビット変数 A の値を 1/2 にして 小数点以下の端数を切り捨てする事ができる ( リスト 4 参照 ) リスト 4 16 ビット変数を 1/2 にするプログラム RRF AH,1 ; 上位バイトを右ローテイト RRF AL,1 ; 下位バイトを右ローテイト ; (AH の LSB は C フラグ経由で AL の MSB に転送される ) ; この時点で 16 ビット変数 A は 1/2 になり 小数点以下の端数があれば C フラグが 1 になっている 光が流れるプログラム 片道バージョンの RRF 命令による実装 ( 教科書 P.120 参照 ) C フラグに 0 を代入し PORTB レジスタに 80H を代入した状態で RRF PORTB,1 を何度も実行する と C フラグと PROTB レジスタの内容は 表 1 の様に変化してゆく 表 1 RRF 命令の実行回数と C フラグおよび PORTB レジスタの内容の変化 RRF 命令の C フラグ PORTB RRF 命令の C フラグ PORTB 実行回数 実行回数 0 0 10000000B (80H) 5 0 00000100B (04H) 1 0 01000000B (40H) 6 0 00000010B (02H) 2 0 00100000B (20H) 7 0 00000001B (01H) 3 0 00010000B (10H) 8 1 00000000B (00H) 4 0 00001000B (08H) 9 0 10000000B (80H) この様に PORTB の内容は 80H 40H 20H 10H 08H 04H 02H 01H 00H 80H 40H 20H と変化していく事がわかる ほぼ目的の変化の仕方をしているが 01H の次は 80H になっているのではなく 一旦 00H を経由する事に注意が必要である 教科書 P.120 では 図 5.24 のフローチャートに示すように タイマ3(0.5 秒のウェイトを与えるサブルーチン ) の呼び出しと右ローテイト (RRF 命令 ) を交互に行えば 教科書 P.119 の図 5.23 の様な LED の点 3

灯パターンが得られると説明されている しかしながら 表 1 を見れば分かるように この方法では LED が全て消灯する (PORTB が 00H になる ) 瞬間が生じるようになり 目的の点灯パターンは得られない 講義では 実際に教科書 P.120 のリスト 5.5 のプログラムを実行するデモを行うので LED が全て消える瞬間があるのを 各自で確認せよ また 教科書では特に説明されていないが リスト 5.5 のタイマルーチン (TIMER1~3) が C フラグに影響するような命令を一切含んでいない事に注意が必要である タイマルーチンが C フラグを書き換えてしまうと PORTB の変化が表 1 には従わなくなるため LED の発光パターンが崩れてしまう もし C フラグに影響する命令を使ってタイマルーチンを作成するなら タイマルーチンの実行の前に C フラグを退避し 実行後に C フラグを復帰する必要がある さて 教科書のリスト 5.5 では目的の点灯パターンが得られない事が分かったので 一部を書き換えて ちゃんと動作するようにする事を考える リスト 5.5 の初期化ルーチン (BCF STATUS,C 以前 ) と タイマルーチン (TIMER1 MOVLW D 62 以降 ) には問題がないので メインルーチン (MOVLW LEDD から GOTO REPEAT まで ) を書き換えることにする 教科書のリスト 5.5 のメインルーチンを抜き出して書いたのが 次のリスト 5 である リスト 5 教科書のリスト 5.5 のメインルーチン MOVLW LEDD ; 点灯データを W レジスタにセット MOVWF PORTB ; 点灯データをポート B に出力 REPEAT CALL TIMER3 ; 0.5 秒タイマの呼び出し RRF PORTB,1 ; ポート B を 1 ビット右にローテイト GOTO REPEAT 問題になっているのは PORTB が 00H になる瞬間があることである 表 1 をみると PORTB が 00H になっているときは C フラグが 1 になっており PORTB が 00H 以外の時は C フラグが 0 になっている事が分かる これを利用して RRF 命令の実行後に C フラグが 1 になっている場合に もう一度 RRF 命令を実行すれば 問題を回避できる なお RRF 命令は Z フラグには影響しないので Z フラグで PORTB が 00H になっているかどうかの判断はできないことに注意が必要である この様な考え方でメインルーチンを書き直すと 次のリスト 6 の様になる リスト 6 リスト 1 を書き直し LED が全て消灯する不具合を修正したもの MOVLW LEDD ; 点灯データを W レジスタにセット MOVWF PORTB ; 点灯データをポート B に出力 REPEAT CALL TIMER3 ; 0.5 秒タイマの呼び出し RRF PORTB,1 ; ポート B を 1 ビット右にローテイト BTFSC STATUS,C ; C フラグが 0 ならば 次の命令をスキップ RRF PORTB,1 ; C フラグが 1 ならば もう一度 右にローテイト GOTO REPEAT 講義では メインルーチンをリスト 6 に書き換えたプログラムを実行するデモを行うので LED が全て 4

消えてしまう不具合が修正されている事を 各自で確認せよ なお 厳密に言えば リスト 6 のプログラムでも PORTB が 00H になって LED が全て消える瞬間が 2 実行サイクル (0.8μs) だけ発生するが 人間の知覚できる時間ではないので 問題にはならない PORTB が 00H になる瞬間が発生するのを厳密に回避したいなら PORTB の内容を直接 RRF 命令で右方向にローテイトするのではなく PORTB に書き込む値を保持する変数を作り その変数を RRF 命令で操作してから PORTB に転送すればよい なお 今回は RRF 命令を用いて 光の点が右に流れるプログラムを作ったが RLF 命令を用いると 同様の方法で 光の点が左に流れるプログラムを作る事もできる 光が流れるプログラム 往復バージョン( 教科書 P.121 参照 ) 今度は LED の点灯が 教科書 P.121 の図 5.25 に示すように 往復して流れるように見えるプログラムを作成する このためには PORTB の内容が 80H 40H 20H 10H 08H 04H 02H 01H 02H 04H 08H 10H 20H 40H 80H 40H 20H という順番で変化すればよい 光が右に流れている間は RRF 命令で 点灯する LED を右にずらしていけばよい また 光が左に流れている間は RLF 命令で 点灯する LED を左にずらしていけばよい しかし問題は 光の流れる方向が変わる時の処理である まず C フラグを 0 PORTB を 80H に初期化して RRF 命令で LED の点灯位置を右にずらしていく事を考える この場合 表 1 の様に PORTB の内容が変化してゆく RRF 命令を 7 回実行して PROTB が 01H になるところまでは良いが ここでもう 1 度 RRF 命令を実行すると PORTB が 00H になってしまう この時に C フラグが 1 になる事を利用して BTFSS STATUS,C で RRF 命令を実行するループから抜け その後に RLF 命令を 2 回実行すると PORTB は 目的の 02H となる 以後は RLF 命令を繰り返せば PORTB の内容は 04H 08H 10H 20H 40H 80H と変化し LED の点灯位置は左にずれていく しかしここでもう一度 RLF 命令を実行すると PORTB は 00H となってしまう この時に C フラグが 1 になる事を利用して BTFSS STATUS,C で RLF 命令を実行するループから抜け その後に RRF 命令を 2 回実行すると PORTB は 目的の 40H となる ( 教科書 P.121 図 5.26 参照 ) 以後は RRF 命令を繰り返すループに戻ればよい この考え方をフローチャートにすると 教科書 P.122 の図 5.27 となり それをプログラムにしたのが 同じページのリスト 5.6 である 講義では リスト 5.6 のプログラムを実行するデモを行うので 教科書 P.121 の図 5.25 の通りの点灯パターンが得られている事を 各自で確認せよ 5