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