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