2008年9月アーカイブ

%E5%9B%9E%E8%B7%AF%E5%9B%B3.jpg

とても簡単な配線で楽しむことができます。

ファームウエアのソースは下記の通りです。
*-------------------------------------------------------------------------------------------------------------------------------*
; LEDを点滅するテストプログラム
; GP0 に接続したLEDを点滅します
;
; アセンブル オプションで、大文字小文字の区別をOFFにすること

list p=pic12f629 ; プロセッサ名変更 PIC12F629 へ
#include ; プロセッサに合わせて、INCファイル変更
errorlevel -302 ; エラーレベル追加


__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

; 変数のメモリへのマッピング
CBLOCK 0x20 ; 12F629 の BANK0 メモリはアドレス 0x20~0x5f が利用可能
CNT1
CNT2
CNT3
ENDC

;***************************
; プログラム開始
;***************************
ORG 0x000
GOTO PROGRAM_START

ORG 0x004 ; 不意の割り込みが発生した場合
RETFIE

PROGRAM_START
; GPIO の IN/OUT 設定 (GP0 を OUTPUT)
BSF STATUS, RP0 ; Select Bank 1
MOVLW B'00000000' ; bit0 が GP0 に対応、bit0=0とする
MOVWF TRISIO

; GPIO GP0 ~ GP2 のコンパレータ設定 (OFFとする)
BCF STATUS, RP0 ; Select Bank 0
MOVLW 0x07 ; コンパレータを使わない
MOVWF CMCON

BCF INTCON, PEIE ; 周辺割り込みすべてOFF

CLRF GPIO ; 全I/O クリア

MAIN
;赤色LED
BSF GPIO, 0 ; GP0=1 LED点灯
CALL DELAY_500MSEC ; 0.5秒待ち
BCF GPIO, 0 ; GP0=0 LED消灯
CALL DELAY_500MSEC ; 0.5秒待ち
BSF GPIO, 0 ; GP0=1 LED点灯
CALL DELAY_500MSEC ; 0.5秒待ち
BCF GPIO, 0 ; GP0=0 LED消灯
CALL DELAY_1SEC ; 0.5秒待ち

;緑色色LED
BSF GPIO, 1 ; GP1=1 LED点灯
CALL DELAY_500MSEC ; 0.5秒待ち
BCF GPIO, 1 ; GP1=0 LED消灯
CALL DELAY_500MSEC ; 0.5秒待ち
BSF GPIO, 1 ; GP1=1 LED点灯
CALL DELAY_500MSEC ; 0.5秒待ち
BCF GPIO, 1 ; GP1=0 LED消灯
CALL DELAY_1SEC ; 0.5秒待ち

;赤色・緑色LED
MOVLW B'00000011' ; bit0 が GP0 に対応、bit0=0とする
MOVWF GPIO
CALL DELAY_500MSEC ; 0.5秒待ち
MOVLW B'00000000' ; bit0 が GP0 に対応、bit0=0とする
MOVWF GPIO
CALL DELAY_500MSEC ; 0.5秒待ち
MOVLW B'00000011' ; bit0 が GP0 に対応、bit0=0とする
MOVWF GPIO
CALL DELAY_500MSEC ; 0.5秒待ち
MOVLW B'00000000' ; bit0 が GP0 に対応、bit0=0とする
MOVWF GPIO
CALL DELAY_500MSEC ; 0.5秒待ち

GOTO MAIN

;***************************
; ここからサブルーチン部(時間計算)
;***************************

; 1命令サイクル = 4クロック
; 4MHzクロック時は、1命令は1MHz(=1usec)

DELAY_50MSEC
MOVLW D'50'
MOVWF CNT1

DELAY_50MSEC_LOOP0 ; ((4*250)+5)*50サイクル = 50250サイクル
MOVLW D'250'
MOVWF CNT2

DELAY_50MSEC_LOOP1 ; 4*250サイクル
NOP ; 1
DECFSZ CNT2, F ; 1(no skip), 2
GOTO DELAY_50MSEC_LOOP1 ; 2
DECFSZ CNT1, F ; 1(no skip), 2
GOTO DELAY_50MSEC_LOOP0 ; 2

RETURN

DELAY_1SEC
MOVLW d'20'
MOVWF CNT3 ; 50msec * 20
DELAY_1SEC_LOOP
CALL DELAY_50MSEC
DECFSZ CNT3, F
GOTO DELAY_1SEC_LOOP

DELAY_500MSEC
MOVLW d'10'
MOVWF CNT3 ; 50msec * 10
DELAY_500MSEC_LOOP
CALL DELAY_50MSEC
DECFSZ CNT3, F
GOTO DELAY_500MSEC_LOOP


RETURN


END
*--------------------------------------------------------------------------------------------------------------------------------*

単純にLEDを点滅させるプログラムになっています。

このアーカイブについて

このページには、2008年9月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2007年8月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

Powered by Movable Type 4.21-ja