; LEDを点滅するテストプログラム ; GP0 に接続したLEDを点滅します ; ; アセンブル オプションで、大文字小文字の区別をOFFにすること LIST p=pic12f629 ; デバイスのリスト指示です。 決まり文句 #INCLUDE <p12f629.inc>;PIC12F675を使用する際の各種定義をインクルードします。決まり文句 ERRORLEVEL -302 ; エラーレベル追加 ;コンフィグレーション設定 __CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT ;_MCLRE_ON GP3ピンを MCLR として使用するかどうかの指定 ;_INTRC_OSC_NOCLKOUT 内臓クロック発振器を使用する。クロック出力しないの意味。 ; 変数のメモリへのマッピング ;0xは16進数を表わす時の頭文字 CBLOCK 0x20 ; 12F629 の BANK0 メモリはアドレス 0x20~0x5f が利用可能 64個の8ビットレジスタ CNT1 CNT2 ENDC ;*************************** ; プログラム開始 ;*************************** ORG 0x000 ;プログラムの開始位置です。 電源オン後、リセットが解除されるとプログラムメモリのアドレス 0x000 にある命令から実行し始めます。 GOTO PROGRAM_START ;goto xx 命令が書かれていますので xx と書かれたラベルの位置にプログラムは移行します。 ORG 0x004 ; 不意の割り込みが発生した場合 RETFIE PROGRAM_START ; GPIO の IN/OUT 設定 (GP0 を OUTPUT) BSF STATUS, RP0 ; Select Bank BSFは1をセットする。STATUSのRPO(ビット5)に1 MOVLW B'00000000' ; bit0 が GP0 に対応、bit0=0とする wレジスタに00000000をロード ワーキングレジスタは一個の8ビットのレジスタ ;00000000の右からポート0(7pin) 0 なら出力、1なら入力です MOVWF TRISIO ;ワーキングレジスタの内容をTRISIOレジスタにコピー ; GPIO GP0 ~ GP2 のコンパレータ設定 (OFFとする) BCF STATUS, RP0 ; Select Bank 0 STATUSのRPO(ビット5)に0をセット MOVLW 0x07 ; コンパレータを使わない bit7が使用しない コンパレータは二つの電圧(流)の比較 ;CMCONレジスタに2進数で00000111を書き込み、デジタル入出力を可能にする000から111まで8種類のモードがある MOVWF CMCON ;ワーキングレジスタの内容をCMCONレジスタにコピー BCF INTCON, PEIE ; 周辺割り込みすべてOFF CLRF GPIO ; 全I/O クリア CLRFはGPIOをゼロクリア MAIN BSF GPIO,0 ;点灯 CALL WAIT ;WAITルーチンへ 201.603ミリ秒(0.201603秒)の遅延 BCF GPIO,0 ;消灯 CALL WAIT ;201.603ミリ秒の遅延 GOTO MAIN ;MAINへ ;*************************** ; ここからサブルーチン部 ;*************************** ; 1命令サイクル = 4クロック ; 4MHzクロック時は、1命令は1MHz(=1usec) WAIT ;MOVLW(1)+MOVWF(2)+201599+RETURN(2)=201603 201.603ミリ秒 MOVLW D'200' ;1サイクル MOVWF CNT1 ;1サイクル WAIT_LOOP ;{CALL(2)+WAITE_SUB(1003)+DECFSZ(1)+GOTO(2)}X199+ ;CALL(2)+WAITE_SUB(1003)+DECFSZ(2)=201599サイクル CALL WAIT_SUB ;2サイクル DECFSZ CNT1,F ;1サイクル::0の時2サイクル 次行GOTOはスッキップ GOTO WAIT_LOOP ;2サイクル RETURN ;2サイクル WAIT_SUB ;(1+1+2)+999=1003サイクル 1.003ミリ秒 MOVLW D'200' ;1サイクル MOVWF CNT2 ;1サイクル WAIT_SUB_LOOP ;{(NOP(1)+NOP(1)+DECFSZ(1)+GOTO(2)}X199+{NOP(1)+NOP(1)+RETURN(2)}=999サイクル NOP ;1サイクル NOP ;1サイクル DECFSZ CNT2,F ;1サイクル::0の時2サイクル 次行GOTOはスッキップ GOTO WAIT_SUB_LOOP ;2サイクル RETURN ;2サイクル END
2010年10月10日日曜日
点滅プログラムの解説
ファイルのダウンロード
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿