スライド 1

Similar documents
スライド 1

PowerPoint プレゼンテーション

スライド 1

untitled

スライド 1

PowerPoint プレゼンテーション

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

スライド 1

スライド 1

3 1EEPROMElectrically Erasable PROM PROMProgrammable ROM 2 EEPROM 3

前付(念).indd

Microsoft PowerPoint - 第8α章.ppt [互換モード]

3 4 PIC

Microsoft PowerPoint - 工学ゼミⅢLED1回_2018

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

,, ( ) 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 (

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

untitled

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

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

Microsoft Word - 4章.doc

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

Microsoft Word - 組込みプログラミング2018テキスト

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

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

DS30430C-J2-page 2 : 1998 Microchip Technology Inc.

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

Microsoft Word - テキスト.docx

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

BSF PORTA BCF PORTA MOVLWB MOVLWB MOVLWB MOVLWB , E=1, E=0 8 ビット 行表示 ディスプレイ制御 表示クリア エントリーモード CALLDSP MAIN BCF PORTA,3 R

PowerPoint プレゼンテーション

回路 : Vdd GND 回路図と呼べるようなものではありません オシレータは外部 ( セラミック発振子 ) なので GP4 と GP5 は使えません 四角の枠内はモジュールなので ここから VDD GND TX RX の4 本をつなぐだけです 測定端子 (GP0) は 1MΩの抵抗と 2MΩの半固

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

DS30292A-J-page 2 Preliminary 2000 Microchip Technology Inc. PIC16F876/

スライド 1

PIC24F Family Reference Manual Section 9 WDT

PowerPoint プレゼンテーション

スライド 1

スライド 1

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

スライド 1

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

C言語によるPIC(16F88)プログラミング実習テキスト

PIC (, 2, 3 ) PIC ( 1, 2, 3 ) 1 2 (, 2 ) PIC ( 1, 2 ) 2.1 (p.34) define #define (define ) (p.61) 1 30 (RD 7 /P SP 7 ) 32 (V DD ) IC

64 松尾邦昭 2. 無線送受信装置 SANWA 製のラジコン送受信装置は, その機能性の豊富さと価格の安さを理由に多くのラジコン ファンに愛用されており, 今回使用した VG6000は, チャンネル数が6チャンネルあり, ヘリコプター制御用に設計 開発され使用されているものだが, 我々はこれをロボ

卒 業 研 究 報 告

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

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

スライド 1

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

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

PowerPoint プレゼンテーション

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

から付与します さらに, ゼロプレッシャー ICソケットの空き部分を使って, タイマー ICである555の動作チェックができます ユニバーサル基板の一部に555 用の発振回路を構成しています 555をソケットに差し込んで電源スイッチを入れると,ICが良品の場合は LEDが点滅します LEDが点滅しな

PIC

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

VelilogHDL 回路を「言語」で記述する

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

命令セットの構成例 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

スライド 1

スライド 1

PIC16C7X日本語データシート

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

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

本日の内容 導入 回路の作製 回路図から配線図へ ブレッドボードを使った試作回路の作製 マイコンへのプログラム書き込み GPIOの実験

#define HOUR 0x04 #define DAY 0x05 #define WEEKDAY 0x06 #define MONTH 0x07 #define YEAR 0x08 #define CKOUT 0x0D #define CTRLT 0x0E // CLKOUT // TIMER

ex05_2012.pptx

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

PowerPoint プレゼンテーション

Microsoft Word - 実験4_FPGA実験2_2015

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

USB モジュール

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

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

Microsoft Word - PIC-USBマイコンボード_v1-02@WEB公開用資料.docx

-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

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

AutomaticTelegraphKeyProject.c

スライド 1

ここをクリックしてダウンロードする ダウンロードした zip ファイルを解凍する とインストーラが現れます インストーラを 起動してインストールを開始しましょう イ ンストーラの [ Next > ] ボタンを押してい けばインストールできます ライセンスの画面では I accept the ter

Microsoft PowerPoint - 3.3タイミング制御.pptx

Microsoft PowerPoint pptx

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

#include "uart.h" // #define RTC8583 0xA0 // RTC address #define CTRL 0x00 // RTC register notation START/STOP #defin

データ収集用 NIM/CAMAC モジュールマニュアル 2006/5/23 目次 クレート コントローラ CC/ NIM ADC 1821 (Seiko EG&G)...3 ADC インターフェイス U デッドタイム

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

Microsoft PowerPoint - Sol7 [Compatibility Mode]

Microsoft Word - 電子回路工房MPLAB使い方 doc

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

ex04_2012.ppt

基本条件 (1Slot 版用 ) 機能 MR-SHPC 端子名 設定内容 備考 CS 空間 -CS CS6 空間 ( キャッシュ無し ) キャッシュ無し空間を使用 (B h) RA25 0 固定 レジスタ空間 RA24 0 固定 RA23 0 固定 B83FFFE 4h~B83FFFF

スライド 1

Microsoft Word - TE7790PF_DS_REV111.doc

スライド 1

Microsoft PowerPoint - No3.ppt

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

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

Transcription:

9. 割り込みを学ぼう 9.1 外部からの割り込み (SW1 を押すことにより割り込みをかける方法 ) 9.2 タイマ 0 による割り込み ( 処理タイミングの管理方法 : 一定時間毎に LED1, 2, 3 を点滅させる方法 ) 回路製作の詳細は第 0 章を参照してください. 1

9.1 外部からの割り込み (SW1 を押すことにより割り込みをかける方法 ) ;Interrupt test program INCLUDE"p16F84.inc" list p=16f84 CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF Memory EQU 0x0C WORK1 EQU Memory+1 ;WORk1 at 0C TIME1 EQU Memory+2 ;TIME1 at 0D TIME2 EQU Memory+3 ;TIME2 at 0E TIME3 EQU Memory+4 ;TIME3 at 0F ORG 0 GOTO START ;Main Program starts at START このソースファイルを打ち込んで下さい. 詳細説明は p.11~ SW1 を押すと割り込み信号が入り, メインプログラムの処理 (LED1 を点灯,LED3 を消灯 ) を中断して割り込みプログラムを実行 (LED1 を消灯,LED3 を点灯 ) し, 一定時間後に割込処理を終了してメインプログラムの処理を再開するプログラムです. START ORG 4 ;Sub Program MOVWF WORK1 ;Save the content of Working Register to WORK1 MOVLW B'00010000' ;'00010000' -> (W) MOVWF INTCON ;(W) -> (INTCON), Inhibit another interruput CALL SUB1 ;SUB1 call MOVLW B'10010000' ;'10010000' -> (W) MOVWF INTCON ;(W)->(INTCON), Enable interrupt MOVF WORK1, 0 ;(WORK1) -> (W) RETFIE ;Return from interrupt BSF STATUS, RP0 ;Select Bank1 MOVLW B'00000111' ;'00000111' -> (W) MOVWF TRISB ;RB0-2: Input port; RB3-7: Output port MOVLW B'10010000' ;'10010000' -> (W) MOVWF INTCON ;(W) -> Intcon, Enable interrput MOVLW B'00000000' MOVWF OPTION_REG BCF STATUS, RP0 ;Select Bank0 割り込みプログラム 2

ソースファイル ( 続き ) ;Main Program MOVLW B'00010000' ;'00010000' -> (W) STEP1 MOVWF PORTB ;(W) -> (PORTB), LED1 on GOTO STEP1 ;Sub Program SUB1 MOVLW B'01000000' ;'01000000' -> (W) MOVWF PORTB ;(W) -> (PORTB), LED3 on CALL COUNT1 RETURN COUNT1 MOVLW 0x80 MOVWF TIME1 STEPM MOVWF TIME2 STEPM1 MOVWF TIME3 STEPM2 DECFSZ TIME3,1 GOTO STEPM2 DECFSZ TIME2,1 GOTO STEPM1 DECFSZ TIME1,1 GOTO STEPM RETURN デモプログラムでは 80 となっていますが, シミュレーションではくり返し回数が多すぎるので 0x03 を入力してみて下さい. END 3

Debugger Select Tool MPLAB SIM Make View Special Function Registers View File Registers Stimulus New Workbook RB0+Toggle F7 を押し続けながらときどき RB0 を Fire Toggle を選定すると,Fire をクリックするたびに Pin への入力が反転する. 4

S 1 R 1 5V. PIC16F84 V + メインプログラム (RB4 に 5V を出力して LED1 を点灯するプログラム ) を実行 6 RB0 RB7 13 7 RB1 RB6 12 0 V 5V 5V スイッチオフ 5V 8 RB2 RB5 11 9 RB3 RB4 10 5 V LED3 消灯 LED1 点灯 5

S 1 R 1 電圧の変化を捉える 5V 0V PIC16F84 11 RB0 RB7 18 V + メインプログラムの実行を中断してサブプログラム (LED1を消灯, LED3を点灯 ) を一定時間実行 12 RB1 RB6 17 5 V 5V 13 RB2 RB5 16 14 RB3 RB4 15 5V スイッチオン 5V 0 V LED3 点灯 LED1 消灯 6

7 S 1 R 1 5V. PIC16F84 V + サブプログラムの実行が終了すると, 自動的にメインプログラムの中断した場所に戻って, メインプログラムの実行を再開 11 RB0 RB7 18 12 RB1 RB6 17 0 V 5V 5V 13 RB2 RB5 16 14 RB3 RB4 15 5 V LED3 消灯 スイッチオフ 5V LED1 点灯

PIC16F84 1 RA2 RA1 18 2 RA3 RA0 17 割り込み 入力用端 子 3 RA4 OSC1 16 4 MCLR OSC2 15 5 Vss VDD 14 6 RB0 RB7 13 7 RB1 RB6 12 8 RB2 RB5 11 9 RB3 RB4 10 出力端子として利用 LEDを点灯させる. 8

本章のポイント INTCON レジスタ B 10010000 を書き込む 7 ビット目 :GIE 割り込み許可ビット 1: 許可,0: 禁止 4 ビット目 :RB0 からの割り込みを許可するビット 1: 許可,0: 禁止 アドレス ( 番地 ) 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 4Fh バンク 0 バンク 1 間接アドレス間接アドレス TMR0 OPTION_REG PCL PCL STATUS STATUS FSR FSR PORTA TRISA PORTB TRISB EEDATA EECON1 EEADR EECON2 PCLATH PCLATH INTCON INTCON 汎用ファイルレジスタ汎用ファイルレジスタ アドレス ( 番地 ) 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch CFh 本章のポイント OPTION レジスタ B 00000000 を書き込む 6 ビット目 : 割り込みエッジ選択ビット 1:RB0 の電圧が 0 V 5 V に変化したとき割り込みをかける. 0: RB0 の電圧が 5 V 0 V に変化したとき割り込みをかける. ファイルレジスタの配置 9

特殊レジスタ一覧 バンク 0 バンク 1 アドレス名称ビット7 ビット6 ビット5 ビット4 ビット3 ビット2 ビット1 ビット0 00h INDF FSR の内容のアドレスのデータメモリ ( 物理的には存在しない ) 01h TMR0 8 ビットリアルタイム クロック / カウンタ 02h PCL プログラムカウンタ (PC) の下位 8 ビット 03h STATUS IRP RP1 RP0 TO PD Z DC C 04h FSR 間接データメモリアドレスポインタ 05h PORTA - - - RA4/T0CKI RA3 RA2 RA1 RA0 06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT 07h 使用しない, 0 としてリードされる 08h EEDATA EEDATAEEPROM データレジスタ 09h EEADR EEADREEPROM アドレスレジスタ 0Ah PCLATH - - - PC の上位 5 ビットへの書き込みバッファ 0Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 80h INDF FSR の内容のアドレスのデータメモリ ( 物理的には存在しない ) 81h OPTION_REG RBPU 82h PCL プログラムカウンタ (PC) の下位 8 ビット 83h STATUS IRP RP1 RP0 TO PD Z DC C 84h FSR 間接データメモリアドレスポインタ 85h TRISA - - - 86h 87h TRISB 88h EECON1 - INTEDG T0CS PORTB データ入出力設定レジスタ 使用しない, 0 としてリードされる T0SE - - EEIF 89h EECON2 EEPROM 制御レジスタ 2( 物理的には存在しない ) PSA PS2 PORTA データ入出力設定レジスタ WRERR WREN 0Ah PCLATH - - - PC の上位 5 ビットへの書き込みバッファ 0Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF PS1 WR PS0 RD : バンク 0,1 で共通 10

;Interrupt test program INCLUDE"p16F84.inc" list p=16f84 CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF Memory EQU 0x0C WORK1 EQU Memory+1 ;WORk1 at 0C TIME1 EQU Memory+2 ;TIME1 at 0D TIME2 EQU Memory+3 ;TIME2 at 0E TIME3 EQU Memory+4 ;TIME3 at 0F ORG 0 ; 電源が入るとマイコンはこの番地からプログラム実行を開始する. GOTO START ; ただちにSTART 番地にジャンプする. START ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF STATUS, RP0 B'00000111' TRISB B'10010000' INTCON B'00000000' OPTION_REG STATUS, RP0 p.9ファイルレジスタによるとtrisbが Bank 1にあるので,Bank 1を選定している. Bankの選定は, データシートのSTATUS REGISTERによると, RP0 = 1 Bank1 = 0 Bank0 である. なお,STATUSレジスタは2バンクに共通している. 11

;Interrupt test program INCLUDE"p16F84.inc" list p=16f84 CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF Memory EQU 0x0C WORK1 EQU Memory+1 ;WORk1 at 0C TIME1 EQU Memory+2 ;TIME1 at 0D TIME2 EQU Memory+3 ;TIME2 at 0E TIME3 EQU Memory+4 ;TIME3 at 0F ORG 0 GOTO START ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE START PORT B の設定 BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF STATUS, RP0 B'00000111' TRISB B'10010000' INTCON B'00000000' OPTION_REG STATUS, RP0 RB0-RB2: 入力ポート RB3-RB7: 出力ポート 12

;Interrupt test program INCLUDE"p16F84.inc" list p=16f84 CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF Memory EQU 0x0C WORK1 EQU Memory+1 ;WORk1 at 0C TIME1 EQU Memory+2 ;TIME1 at 0D TIME2 EQU Memory+3 ;TIME2 at 0E TIME3 EQU Memory+4 ;TIME3 at 0F START ORG 0 GOTO START ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF STATUS, RP0 B'00000111' TRISB B'10010000' INTCON B'00000000' OPTION_REG STATUS, RP0 B 10010000 を INTCON (Interrupt Control) レジスタに書き込む 7 ビット目 : 割り込み許可ビット 1: 許可,0: 禁止 4ビット目 :RB0からの割り込みを許可するビット 1: 許可,0: 禁止 13

;Interrupt test program INCLUDE"p16F84.inc" list p=16f84 CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF Memory EQU 0x0C WORK1 EQU Memory+1 ;WORk1 at 0C TIME1 EQU Memory+2 ;TIME1 at 0D TIME2 EQU Memory+3 ;TIME2 at 0E TIME3 EQU Memory+4 ;TIME3 at 0F START ORG 0 GOTO START ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF STATUS, RP0 B'00000111' TRISB B'10010000' INTCON B'00000000' OPTION_REG STATUS, RP0 OPTION レジスタに B 00000000 を書き込む 6 ビット目 : 割り込みエッジ選択ビット 1:RB0 の電圧が 0 V 5 V に変化したとき割り込みをかける. 0: RB0の電圧が5 V 0 Vに変化し 14 たとき割り込みをかける

S 1 5V R 1 PIC16F84 電圧の変化を捉える OPTIONレジスタの6 ビット目に0を書き込む 5V 0V ことで,RB0の電圧が5 V 0 Vに変化したとき 11 RB0 RB7 18 + 割り込みをかける設定 V にできる. 12 RB1 RB6 17 13 RB2 RB5 16 14 RB3 RB4 15 スイッチオン 15

ソースファイル ( 続き ) ;Main Program MOVLW B'00010000' STEP1 MOVWF PORTB GOTO STEP1 メインプログラム LED1 を点灯するという信号を PORTB に出し続けるプログラム このメインプログラムを実行中に RB0 に割り込み信号が入ると, そのときのプログラムカウンタの値がスタックに格納され, プログラムカウンタには 0004 番地が書き込まれて,4 番地から書かれているプログラムが実行される. 16

ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE 割り込みプログラム. RB0 に割り込み信号が入ると, そのときのプログラムカウンタの値がスタックに格納され, プログラムカウンタには 0004 番地が書き込まれて,4 番地から書かれているこのプログラムが実行される. RETFIE ( 割り込みからの Return) が実行されると, スタックに格納した番地がプログラムカウンタに戻され, 割り込みがかかった時のメインプログラムに戻る. 17

WORK1 EQU Memory+1 ;WORk1 at 0C 割り込み時のメインプログラムのデータの退避場所. ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE W レジスタの内容を WORK1 に退避させる. サブプログラムも W レジスタを使用するので, メインプログラムで実行していた値を退避させておかないと, 書き変えられてしまうため. この他,W レジスタに限らず, サブプログラムに書き換えられては困るものがある場合は,WORK2, WORK3 等をファイルレジスタに定義しておいて, 割り込みがかかったときには, ここに退避させるようにする. 割り込み処理の終了時には, 退避させていた, 値を元の W レジスタにもどしてから, メインプログラムに帰っていく. 18

ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE INTCON レジスタの 7 ビット目を 0 とすることで, 割り込み処理中に, RB0 に割り込み信号が入っても, 割り込み処理に割り込み処理が入らないようにする. サブプログラムをコール. 19

;Sub Program SUB1 MOVLW B'01000000' MOVWF PORTB CALL COUNT1 RETURN COUNT1 MOVLW 0x80 MOVWF TIME1 STEPM MOVWF TIME2 STEPM1 MOVWF TIME3 STEPM2 DECFSZ TIME3,1 GOTO STEPM2 DECFSZ TIME2,1 GOTO STEPM1 DECFSZ TIME1,1 GOTO STEPM RETURN サブプログラム LED1 を消灯し,LED3 を一定時間点灯するプログラム LED1 を消灯し,LED3 を点灯する信号を PORTB に出力する. 一定時間, 時間を稼ぐプログラム END 20

ソースファイル ( 続き ) ;Main Program MOVLW B'00010000' STEP1 MOVWF PORTB GOTO STEP1 ;Sub Program SUB1 MOVLW B'01000000' MOVWF PORTB CALL COUNT1 RETURN COUNT1 MOVLW 0x80 MOVWF TIME1 STEPM MOVWF TIME2 STEPM1 MOVWF TIME3 STEPM2 DECFSZ TIME3,1 GOTO STEPM2 DECFSZ TIME2,1 GOTO STEPM1 DECFSZ TIME1,1 GOTO STEPM RETURN END サブプログラム LED1 を消灯し,LED3 を一定時間点灯するプログラム 初めに TIME1,2,3 に 0x80 を入れる.TIME3 を一つずつ減らしていき,0 になったら,TIME2 を一つ減らして,TIME3 に 0x80 を入れて, 再び, TIME3 を一つずつ減らしていき,0 になったら, TIME2 を一つ減らして,TIME3 に 0x80 を入れて, 再び と, くり返し, やがて,TIME2 が 0 になったら,TIME1 を一つ減らして TIME2, 3 に 0x80 を入れて とくり返す.TIME1 が 0 になったら終了. 全部で 80 80 80 回のくり返し演算を行う. 21

ORG 4 MOVWF WORK1 MOVLW B'00010000' MOVWF INTCON CALL SUB1 MOVLW B'10010000' MOVWF INTCON MOVF WORK1, 0 RETFIE 割り込み処理が終了したので,INTCON レジスタの 7 ビット目を 1 として, 割り込み処理を可として, メインプログラムに戻るようにする. 割り込み処理の終了時には, 退避させていた, 値を元の W レジスタにもどしてから, メインプログラムに帰っていく. 22

9.2 タイマ 0 による割り込み 本節では, 一定時間毎に LED1, 2, 3 を点滅させるプログラムを紹介します. LED の点滅に限らず, 決まった時間間隔で何らかの処理をさせたい場合に必須の方法です. 例 ) ステッピングモータの制御周期管理 ( 第 8α 章 ) データのサンプリング周期管理 ( モータドライブノート第 1 章 1.3.4 項 ) etc. 23

9.2 タイマ 0 による割り込み ( 処理タイミングの管理方法 : 一定時間毎に LED1, 2, 3 を点滅させる方法 ) ; タイマ 0 による割り込みプログラム INCLUDE"P16F84A.INC" list p=16f84a このソースファイルを打ち込んで下さい. 詳細説明は p26 から CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _CP_OFF WORK1 EQU 0x0C ;WORk1 at 0D ORG 0 ; 電源が入るとこの番地からプログラム実行を開始する. GOTO START ORG 4 ; 割り込みがかかるとこの番地から開始する. MOVWF WORK1 ;wレジスタの内容をwork1に退避させる CALL Timer0_interrupt MOVF WORK1, 0 ;(WORK1) -> (W) BCF INTCON, T0IF ;TMR0による再割り込みを可能とする. RETFIE ; 割り込み処理ルーチンからメインプログラムへ復帰 START ; ポートBの設定 BSF STATUS,RP0 ; バンク1の選択 MOVLW B'00000000' MOVWF TRISB ;RB0-7を出力ポートに設定 ; タイマ0の設定 BCF OPTION_REG, T0CS ; システムクロック (FOSC) を選択. 実際には FOSC/4 = 4MHz/4 = 1MHz BCF OPTION_REG, PSA ; プリスケーラをタイマ0 用に設定.(PSA = 1とすると, プリスケーラはWDT 専用となる.) BSF OPTION_REG, PS2 ; BSF OPTION_REG, PS1 ; BSF OPTION_REG, PS0 ;PS2 PS1 PS0 = 111 とすることでタイマ0のクロックをFOSC/4/256 と設定. ; 割込みの設定 BSF INTCON, GIE ; マスクされていない全ての割込みを可とする. BSF INTCON, T0IE ; タイマ0の割込みを可とする. BCF INTCON, T0IF ; タイマ0の割込みフラグをクリアする. 24 BCF STATUS,RP0 ; バンク 0 の選択

; メインルーチン STEP1 GOTO STEP1 ;STEP1にジャンプすることを繰り返す永久ループ ; 割り込み処理サブルーチン Timer0_interrupt MOVLW B'00000000' ;00000000 ->(W) ; タイマ0はこの値を初期値としてカウントアップする. ;( 次の割り込みは11111111 -> 00000000 となるタイミング ) MOVWF TMR0 ;(W) -> TMR0 COMF PORTB,1 ;PORBの各ビットを1/0 反転させる. これにより割り込みがかかるたびに :PORTBの出力を反転し,LED1, 2, 3を点滅させる. RETURN END 25

タイマ 0 による割り込みプログラム ( 本章 p.24, 25) の詳細説明 (1) ORG 0 ; 電源が入るとこの番地からプログラム実行を開始する. GOTO START START ; ポートBの設定 BSF STATUS,RP0 ; バンク1の選択 MOVLW B'00000000' MOVWF TRISB ;RB0-7を出力ポートに設定 26

タイマ 0 による割り込みプログラム ( 本章 p.24, 25) の詳細説明 (2) ; タイマ0の設定 BCF OPTION_REG, T0CS ; システムクロック (FOSC) を選択. ; 実際には FOSC/4 = 4MHz/4 = 1MHz BCF OPTION_REG, PSA ; プリスケーラをタイマ0 用に設定. ;(PSA = 1とすると, プリスケーラはWDT 専用となる.) BSF OPTION_REG, PS2 ; PS2 PS1 PS0 = 111 とすることで BSF OPTION_REG, PS1 ; タイマ0のクロックをFOSC/4/256 と設定. BSF OPTION_REG, PS0 ; データシートによると OPTION REGISTER (p.28) の各ビットによりタイマ 0 のクロックの選定, タイマ 0 のプリスケーラの設定ができる. 上のプログラムの設定によりタイマ 0 の入力クロックは, セラミック発振子に 4 [MHz] のものを用いた場合,4 [MHz]/4/256 = 3.906 [khz] となる. このクロックによりタイマ0をカウントアップして, タイマ0がオーバフロー (B 11111111 B 00000000 ) するタイミングで割り込みをかけることができる (ORG 4からのプログラムを実行する ). 割り込み処理プログラムの中でタイマ0の値を例えばB 00000000 と再設定すれば, (B 100000000 - B 00000000 )/3.906[kHz] = (256 0)/3.906[kHz] = 0.0655 [s] 後に再び割り込みがかけられる. 27

特殊レジスタ一覧 バンク 0 バンク 1 アドレス名称ビット7 ビット6 ビット5 ビット4 ビット3 ビット2 ビット1 ビット0 00h INDF FSR の内容のアドレスのデータメモリ ( 物理的には存在しない ) 01h TMR0 8 ビットリアルタイム クロック / カウンタ 02h PCL プログラムカウンタ (PC) の下位 8 ビット 03h STATUS IRP RP1 RP0 TO PD Z DC C 04h FSR 間接データメモリアドレスポインタ 05h PORTA - - - RA4/T0CKI RA3 RA2 RA1 RA0 06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT 07h 使用しない, 0 としてリードされる 08h EEDATA EEDATAEEPROM データレジスタ 09h EEADR EEADREEPROM アドレスレジスタ 0Ah PCLATH - - - PC の上位 5 ビットへの書き込みバッファ 0Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 80h INDF FSR の内容のアドレスのデータメモリ ( 物理的には存在しない ) 81h OPTION_REG RBPU 82h PCL プログラムカウンタ (PC) の下位 8 ビット 83h STATUS IRP RP1 RP0 TO PD Z DC C 84h FSR 間接データメモリアドレスポインタ 85h TRISA - - - 86h 87h TRISB 88h EECON1 - INTEDG T0CS PORTB データ入出力設定レジスタ 使用しない, 0 としてリードされる T0SE - - EEIF 89h EECON2 EEPROM 制御レジスタ 2( 物理的には存在しない ) PSA PS2 PORTA データ入出力設定レジスタ WRERR WREN 0Ah PCLATH - - - PC の上位 5 ビットへの書き込みバッファ 0Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF PS1 WR PS0 RD : バンク 0,1 で共通 28

3 番ピン FOSC/4 MUX1 0 1 MUX2 1 0 Sync 2 Cycles Data Bus 8 TMR0 reg Set TMR0IF on Overflow T0SE T0CS PSA Prescaler 0 MUX3 8-bit Prescaler WDT (Watch Dog Timer) 1 8 PSA 8-to-1 MUX PS2:PS0 0 1 MUX4 PSA WDT Timer-out タイマ 0 のプリスケーラのブロック図 MUX: マルチプレクサ (Multiplexer), 複数の入力のいずれかを選んで出力する, 入力切り替え器例えば MUX1 は T0CS=0 のとき入力の FOSC/4 を出力する.T0CS=1 のときは XOR の値を出力する. Prescaler: プリスケーラ, クロックの分周器. 上図の設定例ではタイマ 0 に入る前のクロックを (1/2) n 倍 (n = 1~8) する.n は PS2~PS0 により設定できる. WDT: ウォッチドッグタイマ (Watch Dog Timer), コンフィギュレーションにて ( CONFIG _WDT_ON) とすると, WDT が起動する. 設定時間内にプログラムが CLRWDT 命令を実行して,WDT とその WDT prescaler をクリア (0 を代入 ) しないとプログラム実行が強制リセットされる. プログラムが暴走した場合などに WDT は有効. 番犬タイマという意味. Sync 2 Cycles: Data Bus から TMR0 register に値を書き込む際に,FOSC/4 の 2 クロックの間,TMR0 register の入力 (MUX2 の出力 ) は無視される. 29

タイマ 0 による割り込みプログラム ( 本章 p.24, 25) の詳細説明 (3) ; 割込みの設定 BSF INTCON, GIE ; マスクされていない全ての割込みを可とする. BSF INTCON, T0IE ; タイマ0の割込みを可とする. BCF INTCON, T0IF ; タイマ0の割込みフラグをクリアする. BCF STATUS,RP0 ; バンク 0 の選択 p.28 より PORTB は Bank 0 にある. 割り込み処理ルーチンにて PORTB を利用するので,Bank 0 を選択しておく. データシートによるとINTCON Register (p.28 Bank0, 1に共通 ) の各ビットによりタイマ0の割り込みを設定できる. 上記のGIE, T0IEのビットを1にセットし, T0IFを0にクリアすることで, タイマ0がオーバフローしたときに, 割り込みをかけることができる. なお, タイマ0がオーバフローした際にT0IFはセットされるので, 割り込み処理プログラムの中で, T0IFを再びクリアしておく必要がある. これによりタイマ0による割り込みを再びかけることができる. 30

割り込み処理ルーチン ORG 4 ; 割り込みがかかるとこの番地からプログラム実行を開始する. MOVWF WORK1 ;wレジスタの内容をwork1に退避させる CALL Timer0_interrupt MOVF WORK1, 0 ;(WORK1) -> (W) BCF INTCON, T0IF ;TMR0による再割り込みを可能とする. RETFIE ; 割り込み処理ルーチンからメインプログラムへ復帰 Timer0_interrupt ルーチンの呼び出し 31

; 割り込み処理サブルーチン Timer0_interrupt MOVLW B 00000000 MOVWF TMR0 ;00000000 ->(W) ; タイマ0はこの値を初期値としてカウントアップする. ;( 次の割り込みは11111111 -> 00000000 となるタイミング ) ;(W) -> TMR0 COMF PORTB,1 ;PORBの各ビットを1/0 反転させる. これにより割り込みがかか ; るたびにPORTBの出力を反転し,LED1, 2, 3を点滅させる. RETURN タイマ 0 の初期値を B 00000000 = 0 に設定している. この値からカウントアップして,8 ビットタイマーがオーバフロー (B 11111111 B 00000000 ) するタイミングで割り込みをかけることができる. 割り込み周期は (B 100000000 - B 00000000 )/3.906[kHz] = (256 0)/3.906[kHz] = 0.0655 [ss] となる. 32

COMF PORTB,1 2 [V] 65 [ms] 65 [ms] 65 [ms] 毎に割り込みがかかり, 出力電圧が5[V] 0[V] で反転する. 25 [ms] タイマ 0 による割り込みプログラム実行時の 10 番ピンの出力波形 33

2004 年 8 月 2013 年 3 月 (9.2 節 ) 34