マイコンプログラミング演習 I 第 04-05 回 LEDを用いたI/O 制御担当 : 植村
実験の目的 本実験ではマイコンシステムを用いた信号の入出力の制御方法を理解することを目的とし, マイコンのアーキテクチャを理解 実装するとともに, アセンブラによるプログラミング技術の習得を行う. 回路の構成として,PIC16F84A を用いてスイッチを入力とする LED の点灯 / 消灯の出力操作を行う回路ならびにアセンブラプログラムを実装する. 2
PIC の端子の構成 入出力ポート A リセット電源 入出力ポート B 入出力ポート A クロック IN/OUT 電源 入出力ポート B 入出力ポート数ポート A ポート B 5 個 (5bit) 8 個 (8bit) 3
4
前回のプログラム (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 HSモード (1MHz~20MHz) にする BCF STATUS, RP0 ウォッチドッグタイマ ( 暴走防止用のタイマ ) をOFFにする MOVLW B 00001111 ; リテラル Wレジスタ パワーアップタイマ ( 安定起動させるためのタイマ ) をONにする MOVWF PORTB ;Wレジスタ ファイルレジスタ プログラムメモリのコードプロテクト ( 外部からのアクセスを禁止 LOOP する ) をOFFにする GOTO LOOP END 5
前回のプログラム (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 6
P16F84A のファイルレジスタ Address BANK 0 BANK 1 Address 00h Indirect addr BANK0 にマップ 80h 01h TMR0 OPTION 81h 02h PCL BANK0 にマップ 82h PICの状態設定 03h STATUS BANK0 にマップ 83h 04h FSR BANK0 にマップ 84h ポートA, Bの 05h PORTA TRISA ポート 85h A, Bの端子の H/L 信号設定 06h PORTB TRISB 86h 入出力設定 07h 使用不可 BANK0 にマップ 87h 08h EEDATA EECON1 88h 09h EEADR EECON2 89h 0Ah PCLATH BANK0 にマップ 8Ah 0Bh INTCON BANK0 にマップ 8Bh 0Ch : : 4Fh 50h : : 7Fh 68 SRAM 汎用レジスタプログラムで扱うことのできるメモリ領域 使用不可 BANK0 にマップ 使用不可 8CH : : CFh D0h : : FFh 設定用のメモリ領域 7
STATUS レジスタの各 bit の意味 STATUS レジスタ 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 ^PD Z DC C タイムアウトビット 1= 電源 ON 後,CLRWDT 命令またはSLEEP 命令実行後 0=WDTタイムアウト発生パワーダウンビット (SLEEP 命令実行有無判定用 ) 1= 電源 ON 後またはCLRWDT 命令実行により1になる 0=SLEEP 命令により0になるゼロビット 1= 計算結果またはロジック演算結果がゼロ 0= 計算結果またはロジック演算結果がゼロでないデジットキャリービット 1= 結果により下位 4ビット目からキャリーが発生した 0= 結果により下位 4ビット目からキャリーが発生しなかったキャリービット 1= 結果により最上位ビットからキャリーが発生した 0= 結果により最上位ビットからキャリーが発生しなかった 8
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 をセットする 9
PORTA, PORTB レジスタ PORTA レジスタ Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - RA4 RA3 RA2 RA1 RA0 PORTB レジスタ Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 各ビットは PORTA の RA0~RA4 ピンおよび PORTB の RB0~RB7 ピンの出力信号の状態を設定する 0 = L レベル 1 = H レベル 10
配置図 (P181) 11
配線図 (P180) 12
アセンブラによるプログラム (P54) LIST P=PIC16F84A INCLUDE P16F84A.INC CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF BSF STATUS, RP0 ; バンク1に切り替え MOVLW B 00001111 ;RA0~RA3を入力に設定 Wレジスタ MOVWF TRISA ;WレジスタでAポートを入力に設定 CLRF TRISB ;Bポートを出力に設定 BCF STATUS, RP0 ; バンク0に切り替え LOOP MOVF PORTA, W ;PORTAのbit 情報をWレジスタへ MOVWF PORTB ;WレジスタをPORTBに出力 GOTO LOOP END ビルド時に Absolute~ を選ぶ 13
新しく使う命令 MOVLW 指定値 MOVe Literal to Working-register リテラルの値 ( こちらが表記で指示した値 ) をワーキングレジスタへ格納 MOVWF f レジスタ MOVe Working-register to File-register ワーキングレジスタ内の値を指定されたファイルレジスタに格納する 14
ワーキンク レシ スタとファイルレシ スタ PIC の命令文はデータを 2 つまでしか制御できないファイルレジスタに同時に 2 つ以上アクセスできない ワーキングレジスタ : 一時的に値を入れておくことのできるメモリ ファイルレジスタ : 設定やプログラムで予約することのできるメモリ領域 8bit 68 RAM 8bit W レジスタ 8bit 8bit F レジスタ 8bit ALU 算術演算部 8bit を 2 つまで制御 15
課題 本プログラムでは電源投入後 ( スイッチを押さない状態 ) に LED が点灯し, スイッチを押すと LED が消灯する. この動作を逆にする, つまりスイッチを押す前に消灯しており, スイッチを押すと点灯するようにする方法を, ハードウェア的な方法とソフトウェア的な方法で示しなさい. なお, ハードウェア的な方法は回路図と解説を添え, ソフトウェア的な方法はソースリストと解説を添えること. 配置図 回路図は web ページに載せています. http://www.cis.sojo-u.ac.jp/~t_uemura 16