マイコンプログラミング演習I
第02-03回
回路構築/LEDを用いた出力制御
担当:植村
講義内容
本講義では携帯電話や携帯オーディオプレイヤー、各種 ロボットなどの電子機器・情報機器に用いられるマイコン 制御技術を、実習を通して理解する。
PIC: Peripheral Interface Controller
直訳:周辺装置インタフェースコントローラー
マイクロコンピュータ
CPUやメモリをワンチップ化した小型のコンピュータ
4
講義内容
目的 マイコン制御システムの設計に必要なマイコンのI/Oポー ト制御技術、アセンブラ言語によるプログラミング、ROM ライタによる書込みと実装、回路部品技術、センサー入 力技術などを学び、企業におけるマイコン制御設計の即 戦力となるべく技術の習得を目的とする。 開発環境 マイコンプログラミング演習 I ではアセンブラ言語を用い てプログラミングを行う。各自ノートPCを持参のこと講義内容
本講義での規約事項 • 忌引きや病欠などのやむない理由を除く欠席は原則 として認めない。 欠席する場合は事前、または事後速やかに連絡を入 れること。 • 全てのレポートに於いて規定の評価基準を満たす必 要がある。1つでも未提出、不合格のレポートがある場 合は成績評点を不可とする。 ただし、レポートは採点後返却され、再提出が1度のみ 認められる。6 文字 画像 音声 印刷 再生 表示 情報の入力 情報の処理 情報の出力 数値
コンピュータの行うこと
入力装置 キーボード マウスなど 演算装置 制御装置 主記憶装置 出力装置 ディスプレー プリンターなど 中央制御装置
ノイマン型コンピュータの基本構成
8
① プログラム内蔵方式
– 処理手順であるプログラムはコンピュータ内部に記 憶される② 逐次処理
– プログラムで指定した順序で、逐次命令が実行され る③ 命令とデータの共存
– 同じメモリ(主記憶装置)上に命令とデータが共存す るノイマン型コンピュータの特徴
入力装置 キーボード マウスなど 演算装置 制御装置 プログラム メモリ 出力装置 ディスプレー プリンターなど
ハーバード型コンピュータの基本構成
データ メモリ10
① プログラム内蔵方式
– 処理手順であるプログラムはコンピュータ内部に記 憶される② 逐次処理
– プログラムで指定した順序で、逐次命令が実行され る③ 命令とデータのメモリ分離
– 命令(プログラム)とデータの記憶領域が別であるハーバード型コンピュータの特徴
ハーバード型の利点
CPU メモリ (プログラム・データ兼用) CPU プログラム メモリ データ メモリ ノイマン型 ハーバード型 1つのバスでプログラムとデータの やりとりを行うので、転送が混雑 →パフォーマンスの低下 (フォン・ノイマンのボトルネック) プログラムとデータはそれぞれ別の バスが使われる12
ハーバード型の利点
ハーバード型のコンピュータの特徴から、以下のような用 途で使われることが多い • プログラムを利用者が書き換える必要がない • プログラムにアクセスさせたくない • 高速にプログラムを処理したい →リモコンやマウス、タイマー、コントローラーなどの 制御によく使われる① 命令の取り出し(フェッチ)
② 命令の解読(デコード)
③ 命令の実行
命 令 の 取 出 し ( フ ェ ッ チ) 命 令 の 解 読 ( デ コ ー ド) 命 令 の 実 行命令実行サイクル
14 プログラム カウンター 命令 レジスタ デコーダ 命令 演算回路 各種レジスタ 制御装置 命令メモリ 演算装置 命令 命令 命令 命令 データメモリ データ データ データ データ データ
命令実行の流れ
PICマイコンの特徴
• 小型パッケージに全ての機能を内蔵
– CPU,メモリ,I/O(入出力)• プログラムを内蔵するメモリがフラッシュメモリ
• 機能が豊富…パワーアップタイマ、ウォチドッグタイマ、
割込み、スリープモード、ADコンバータ等
• 命令数が少ない(35個)
• 低消費電力(2mA)
• 安価(100円程度)
16
PICマイコンの概要
ゲーム機のコントローラーに用いられる PICマイコン その他リモコンやマウスなど この実験で用いるPICマイコン 16F84APICの端子の構成
入出力ポートA クロック IN/OUT 電源(+) 入出力ポートB 入出力ポートA リセット 電源(-) 入出力ポートB 入出力ポート数 ポート A 最大5個(5bit) ポート B 最大8個(8bit)20
配線図
22
プログラミング~PICへの書き込み
MPLABでソースコードを記述 アセンブル ○ ○ ○ ○.HEX Picに書き込む マシン語のファイルアセンブラによるプログラム(P54)
LIST P=PIC16F84A INCLUDE P16F84A.INC
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF BSF STATUS, RP0 CLRF TRISA CLRF TRISB BCF STATUS, RP0 MOVLW B’00001111’ ;リテラル→Wレジスタ MOVWF PORTB ;Wレジスタ→ファイルレジスタ LOOP GOTO LOOP
24
プログラム(P54)
LIST P=PIC16F84A 使用するPICの記述 INCLUDE P16F84A.INC ファイルのインクルード
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
BSF STATUS, RP0 CLRF TRISA CLRF TRISB BCF STATUS, RP0 MOVLW B‘00001111’ ;リテラル→Wレジスタ MOVWF PORTB ;Wレジスタ→ファイルレジスタ LOOP GOTO LOOP END PICの機能の設定。 順に • 発振回路の周波数をHSモード(1MHz~20MHz)にする • ウォッチドッグタイマ(暴走防止用のタイマ)をOFFにする • パワーアップタイマ(安定起動させるためのタイマ)をONにする • プログラムメモリのコードプロテクト(外部からのアクセスを禁止 する)をOFFにする
プログラム(P54)
LIST P=PIC16F84A INCLUDE P16F84A.INC
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
BSF STATUS, RP0 CLRF TRISA CLRF TRISB BCF STATUS, RP0 MOVLW B‘00001111’ ;リテラル→Wレジスタ MOVWF PORTB ;Wレジスタ→ファイルレジスタ LOOP GOTO LOOP
26
新しく使う命令
BSF fレジスタ 処理bit Bit Set File-register
ビット単位でファイルレジスタの値を1にセットする
CLRF fレジスタ Clear File-register
バイト単位でファイルレジスタの値を0にクリアする
BCF fレジスタ 処理bit Bit Clear File-register
ワーキングレジスタとファイルレジスタ
PICの命令文はデータを2つまでしか制御できない ファイルレジスタに同時に2つ以上アクセスできない ワーキングレジスタ: 一時的に値を入れておくことのできるメモリ ファイルレジスタ: 設定やプログラムで予約することのできるメモリ領域 RAM Fレジスタ Wレジスタ ALU 算術演算部 8bit 8bit × 68 8bitを2つまで制御 8bit 8bit 8bit28
P16F84Aのファイルレジスタ
Address BANK 0 BANK 1 Address
00h Indirect addr BANK0 にマップ 80h
01h TMR0 OPTION 81h 02h PCL BANK0 にマップ 82h 03h STATUS BANK0 にマップ 83h 04h FSR BANK0 にマップ 84h 05h PORTA TRISA 85h 06h PORTB TRISB 86h 07h 使用不可 BANK0 にマップ 87h 08h EEDATA EECON1 88h 09h EEADR EECON2 89h
0Ah PCLATH BANK0 にマップ 8Ah
0Bh INTCON BANK0 にマップ 8Bh 0Ch 68 SRAM 汎用レジスタ BANK0 にマップ 8CH : : : : 4Fh CFh 50h 使用不可 使用不可 D0h : : : : 7Fh FFh 設定用の メモリ領域 プログラムが 自 由 に 使 用 できるメモリ
P16F84Aのファイルレジスタ
Address BANK 0 Address BANK 1
00h 000000002 80h 000000002 01h 000000002 81h 000000002 02h 000000002 82h 000000002 03h 000000002 83h 000000002 04h 000000002 84h 000000002 05h 000000002 85h 000000002 06h 000000002 86h 000000002 07h 000000002 87h 000000002 08h 000000002 88h 000000002 09h 000000002 89h 000000002 0Ah 000000002 8Ah 000000002 0Bh 000000002 8Bh 000000002 0Ch 000000002 : : 000000002 8CH 000000002 : : 000000002 : : : : 4Fh CFh 50h D0h
30
STATUSレジスタの各bitの意味
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 IRP RP1 RP0 ^TO ^PD Z DC C IRP PIC16F84では未使用 RP1 PIC16F84では未使用 RP0 バンク選択ビット 0=バンク0 1=バンク1 ^TO タイムアウトビット 1=電源ON後,CLRWDT命令またはSLEEP命令実行後 0=WDTタイムアウト発生 ^PD パワーダウンビット(SLEEP命令実行有無判定用) 1=電源ON後またはCLRWDT命令実行により1になる 0=SLEEP命令により0になる Z ゼロビット 1=計算結果またはロジック演算結果がゼロ 0=計算結果またはロジック演算結果がゼロでない DC デジットキャリービット 1=結果により下位4ビット目からキャリーが発生した 0=結果により下位4ビット目からキャリーが発生しなかった C キャリービット 1=結果により最上位ビットからキャリーが発生した 0=結果により最上位ビットからキャリーが発生しなかった
TRISA, TRISB レジスタ
• 各ビットは PORTA の RA0~RA4 ピンおよび PORTB のRB0~RB7ピンの入出力モードを設定する
0=出力 1=入力
※使わないポートは通常1をセットする
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
TRISAレジスタ
TRISBレジスタ
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
32
前回のプログラム(P54)
LIST P=PIC16F84A
INCLUDE P16F84A.INC
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
BSF STATUS, RP0 CLRF TRISA CLRF TRISB BCF STATUS, RP0 MOVLW B’00001111’ ;リテラル→Wレジスタ MOVWF PORTB ;Wレジスタ→ファイルレジスタ LOOP GOTO LOOP END
新しく使う命令
MOVLW 指定値 MOVe Literal to Working-register
リテラルの値(こちらが表記で指示した値)をワーキング レジスタへ格納
B’00001111’ … バイナリ(B)の数字列の意味
MOVWF fレジスタ MOVe Working-register to File-register
ワーキングレジスタ内の値を指定されたファイルレジス タに格納する
34