; 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 件のコメント:
コメントを投稿