マイコンプログラミング演習I
第04-05回
LEDを用いたI/O制御
担当:植村
実験の目的
本実験ではマイコンシステムを用いた信号の入出力の 制御方法を理解することを目的とし,マイコンのアーキテ クチャを理解・実装するとともに,アセンブラによるプログラ ミング技術の習得を行う. 回路の構成として,PIC16F84Aを用いてスイッチを入力と するLEDの点灯/消灯の出力操作を行う回路ならびにア センブラプログラムを実装する.PICの端子の構成
入出力ポートA クロック IN/OUT 電源 入出力ポートB 入出力ポートA リセット 電源 入出力ポートB 入出力ポート数 ポート A 5個(5bit) ポート B 8個(8bit)前回のプログラム(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 END
設定用の メモリ領域
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 ポートA, Bの端子の 入出力設定 ポートA, Bの H/L 信号設定 PICの状態設定
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=結果により最上位ビットからキャリーが発生した STATUSレジスタ
TRISA, TRISB レジスタ
• 各ビットは PORTA の RA0~RA4 ピンおよび PORTB
のRB0~RB7ピンの入出力モードを設定する 0=出力 1=入力 ※使わないポートは通常1をセットする TRISAレジスタ TRISBレジスタ
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
PORTA, PORTB レジスタ
• 各ビットは PORTA の RA0~RA4 ピンおよび PORTB
のRB0~RB7ピンの出力信号の状態を設定する
0 = Lレベル 1 = Hレベル
PORTAレジスタ
PORTBレジスタ
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 - - - RA4 RA3 RA2 RA1 RA0
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
アセンブラによるプログラム(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
新しく使う命令
MOVLW 指定値 MOVe Literal to Working-register
リテラルの値(こちらが表記で指示した値)をワーキング レジスタへ格納
MOVWF fレジスタ MOVe Working-register to File-register
ワーキングレジスタ内の値を指定されたファイルレジス タに格納する