PIC16f886のプログラミング。 ゲーム「石、はさみ、紙」

画像

この記事は、アセンブラー言語に基づいたアセンブラーpic-controllersファミリーのプログラミングの初心者を対象としています。 私はpic16f886マイクロコントローラーをベースとして使用しました。 プログラミングとモデリングには、それぞれMPlab IDE(Microchip)Proteus(Labcenter)プログラムが使用されました。





プロジェクトの本質について簡単に



このプロジェクトは、障害を持つ人々が岩、紙、はさみ、紙を再生することを可能にします(部分的な麻痺、1本以上の指や手の欠如)。



プロジェクト構造



各プレーヤーには、対応する碑文(石、はさみ、紙)が付いた3つのボタンがあります。 選択の結果とスコアは、7セグメントボードに表示されます。 スコアは9ポイントまで上がります。 「リセット」ボタンを押して新しいゲームを開始します



PICコントローラーのプログラミング



プログラミングには、機械指向の低レベル言語-アセンブリ言語を使用することをもう一度繰り返します



まず、使用するマイクロコントローラーを発表し、将来必要になる汎用レジスターを予約します。




LIST P=16f886

#include <p16f886.inc>



CBLOCK 0x20

IGROK_1

IGROK_2

KAMEN

NOJNITSI

BUMAGA

SCHET_1

SCHET_2

Reg_1

Reg_2

Reg_3

NINE

ENDC












次に、プログラムの実際の開始と入力/出力ポートの構成:






start ;



bsf STATUS, RP1 ; 3

bsf STATUS, RP0

clrf ANSEL ; \

clrf ANSELH



BCF STATUS, RP1 ; 1

BSF STATUS, RP0



movlw b'11100111' ; RA0,RA1,RA2,RA7,RA6,RA5 ,

movwf TRISA

movlw b'00000000' ;

movwf TRISB

movlw b'00000001' ; RC0 ,

movwf TRISC



bcf STATUS,RP0 ; 0

bcf STATUS,RP1



CLRF PORTA ;

CLRF PORTB

CLRF PORTC



movlw b'00000001'

movwf KAMEN

movlw b'00000010'

movwf NOJNITSI

movlw b'00000100'

movwf BUMAGA



movlw .9

movwf NINE



clrf IGROK_1

clrf IGROK_2

clrf SCHET_1

clrf SCHET_2

clrf W

bcf INTCON,6 ;

bcf INTCON,7











チーム:


movlw-定数をバッテリーに送信します。

movwf-バッテリーの内容を登録に送信します

bcf-レジスタのビットをクリアします

bsf-レジスタのビットを設定します

clrf-クリアケース

btfss-レジスタのビットをチェックし、結果1の場合、次のコマンドをスキップします

btfs-レジスタのビットをチェックし、結果が0の場合、次のコマンドをスキップします



プログラムのメインサイクル。 両方のコントローラーのボタンクリックをチェックします。






GAME ;



BTFSS PORTA,0

CALL PRE_KANMEN_1



BTFSS PORTA,5

CALL PRE_KANMEN_2



BTFSS PORTA,1

CALL PRE_NOJNITSI_1



BTFSS PORTA,6

CALL PRE_NOJNITSI_2



BTFSS PORTA,2

CALL PRE_BUMAGA_1



BTFSS PORTA,7

CALL PRE_BUMAGA_2



GOTO PROVERKA



VOZVRAT ;

GOTO GAME












PROVERKAサブルーチンは、プレーヤー1によって要素が選択されているかどうかを確認します。






PROVERKA ;

BTFSC IGROK_1,0 ;

GOTO ONE

BTFSC IGROK_1,1 ;

GOTO TWO

BTFSC IGROK_1,2 ;

GOTO THREE

GOTO VOZVRAT












プレーヤーがボタンを押すと、特定のサブプログラムに移行します(たとえば、プレーヤー1が石を選択したと想像してください)。






PRE_KAMEN_1 ;

MOVLW .1

CALL KOD

MOVWF PORTB

BSF PORTA,3

MOVFW KAMEN

MOVWF IGROK_1

CLRF W

call delay

BCF PORTA,3

RETURN












選択したアイテムはIGROK_1を登録するために書き込まれます

プレーヤー1を選択した後、プレーヤー2によって選択が行われたかどうかを確認し、同時に選択結果を比較します。 比較後、3つのサブプログラムのうちの1つに進みます。

1)最初のプレーヤーが勝った

2)2番目のプレーヤーが勝った

3)描く






ONE ;

BTFSC IGROK_2,0

GOTO NICHA

BTFSC IGROK_2,1

GOTO FIRST_WIN

BTFSC IGROK_2,2

GOTO SECOND_WIN



GOTO VOZVRAT

TWO ;

BTFSC IGROK_2,0

GOTO SECOND_WIN

BTFSC IGROK_2,1

GOTO NICHA

BTFSC IGROK_2,2

GOTO FIRST_WIN



GOTO VOZVRAT

THREE ;

BTFSC IGROK_2,0

GOTO FIRST_WIN

BTFSC IGROK_2,1

GOTO SECOND_WIN

BTFSC IGROK_2,2

GOTO NICHA



GOTO VOZVRAT












3つのサブプログラムすべてをペイントしないために、最初のプレーヤーが勝ったと想像してください。






FIRST_WIN ;

incf SCHET_1 ; 1

FIRST_W ;

MOVFW SCHET_1

CALL KOD2

MOVWF PORTB

BSF PORTC,1

NOP ;

NOP

NOP

NOP

NOP

BCF PORTC,1



MOVFW SCHET_2

CALL KOD2

MOVWF PORTB

BSF PORTC,2

NOP

NOP

NOP

NOP

NOP

BCF PORTC,2



BTFSC PORTC,0

GOTO FIRST_W

PROV ;

BTFSC PORTC,0 ; ""

GOTO PRED_GAME

GOTO PROV












KODルーチンを使用して要素が表示されます。






KOD

addwf PCL,1;

retlw b'11111111';

retlw b'10100011'; ''

retlw b'11001001'; ''

retlw b'11000000'; ''












ストーン- 画像



はさみ- 画像



紙- 画像



数字は、KOD2ルーチンを使用して表示されます。






KOD2

addwf PCL,1;

retlw b'11000000'; '0'

retlw b'11111001'; '1'

retlw b'10100100'; '2'

retlw b'10110000'; '3'

retlw b'10011001'; '4'

retlw b'10010010'; '5'

retlw b'10000010'; '6'

retlw b'11111000'; '7'

retlw b'10000000'; '8'

retlw b'10010000'; '9'












プログラムの最後のステップは、レジスタIGROK_1およびIGROK_2をクリアし、アカウントのオーバーフローを確認することです。






PRED_GAME ;

CLRF IGROK_1

CLRF IGROK_2

BCF STATUS,2

MOVFW SCHET_1

SUBWF NINE,0

BTFSC STATUS,2

GOTO CLEAR



BCF STATUS,2

MOVFW SCHET_2

SUBWF NINE,0

BTFSC STATUS,2

GOTO CLEAR



GOTO GAME



CLEAR ;

CLRF SCHET_1

CLRF SCHET_2

GOTO GAME











おわりに



Proteusプログラムでコンパイルされたこのプロジェクトのスキーム:

画像



***************************************************** *************************

便宜上、 .asmファイル.hex ファイル、および

プロテウスのシェムカ



All Articles