●LEDプログラム 12F683LED01
;****************************************************************************************** ;* ●LEDプログラム 12F683LED01 ●言語:MPASMアセンブラ * ;****************************************************************************************** ; ; LED点灯の順番( GP0 → GP1 → GP2 → GP4 → GP5 )、これを繰り返す。 ; ;------------------------------------------------------------------------------------------ ; ; 【 PIC12F683 】 ; ____________ _____________ ; | V | ; | | ; 3〜5V+ ---+ 1 Vdd(+) | Vss(-) 8 +--- 0V ; LED(5) <--+ 2 GP5 OSC1 | GP0 7 +--> LED(0) ; LED(4) <--+ 3 GP4 OSC2 | GP1 6 +--> LED(1) ; 未使用 >--+ 4 GP3 | GP2 5 +--> LED(2) ; | | ; +--------------------------+ ; ・クロック周波数:約4MHz Copyright (c) 2011.01.09 by T.EJIRI ;------------------------------------------------------------------------------------------ ERRORLEVEL -302 ;バンク指定の確認 Warning Message[302]非表示にする ;------------------------------------------------------------------------------------------ LIST P=12F683 ;標準ヘッダー INCLUDE P12F683.INC ;定義ファイルを取り込む ;------------------------------------------------------------------------------------------ ;****************************************************************************************** ;* コンフィグレーションビット(14ビット)とIDロケーション(4桁)の設定 * ;****************************************************************************************** ; ;---コンフィグレーションビットの設定--- CB = _CPD_OFF ;データEEPROMを(コードプロテクトしない) CB &= _CP_OFF ;プログラムメモリを(コードプロテクトしない) CB &= _MCLRE_OFF ;MCLRリセットを(使わない)、GP3ピンが入力設定になる CB &= _PWRTE_ON ;パワーアップタイマーを(使う) CB &= _WDT_OFF ;ウォッチドックタイマを(使わない) CB &= _INTRC_OSC_NOCLKOUT ;発振回路(INTOSCモード)内部発信器を使う(4MHz) __CONFIG CB ;コンフィグレーションビットにCBを書き込む ;------------------------------------------------------------------------------------------ ; ;---IDロケーションの設定--- __IDLOCS H'0001' ;IDロケーション ← プログラムのバージョン ;****************************************************************************************** ;* 変数項目 汎用レジスタ(64バイト:20h〜5Fh番地) * ;****************************************************************************************** TIMCNT1 EQU H'20' ;タイマーカウンター1 TIMCNT2 EQU H'21' ;タイマーカウンター2 ;****************************************************************************************** ;* LED出力パターンデータ ( 0:消灯 1:点灯 ) * ;****************************************************************************************** LEDOFF EQU B'00000000' ;GPIOポート(全て)消灯 LED0 EQU B'00000001' ;GPIOポート(GPIO0)のみ点灯、以外は消灯 LED1 EQU B'00000010' ;GPIOポート(GPIO1)のみ点灯、以外は消灯 LED2 EQU B'00000100' ;GPIOポート(GPIO2)のみ点灯、以外は消灯 LED4 EQU B'00010000' ;GPIOポート(GPIO4)のみ点灯、以外は消灯 LED5 EQU B'00100000' ;GPIOポート(GPIO5)のみ点灯、以外は消灯 ;****************************************************************************************** ;* プログラムの開始 (リセット・ベクタ) * ;****************************************************************************************** ORG 0 ;リセット・ベクタ(0h番地) GOTO START ;STARTへ ジャンプする ;****************************************************************************************** ;* 割り込み (割り込みベクタ) * ;****************************************************************************************** ORG 4 ;割り込みベクタ(4h番地) GOTO START ;STARTへ ジャンプする ;****************************************************************************************** ;* プログラム・メイン処理の開始 * ;****************************************************************************************** ORG 5 ;プログラムの開始アドレス(5h番地) START CALL INT_RTN ;初期処理 CALL MAIN_RTN ;主処理 ;****************************************************************************************** ;* 初期処理 * ;****************************************************************************************** INT_RTN ;---【 特殊機能レジスタ(バンク1)の初期設定 】------------------------------------------- BSF STATUS,RP0 ;■バンク1にする ( ステータスレジスタのRP0 ← 1 ) ;---デジタルI/Oモード--- CLRF ANSEL ;ANSELレジスタ←0 (デジタルI/Oモードにする) (GP0〜4) ;---ポートの初期化--- MOVLW B'00000000' ;Wレジスタ ← 出力ピンとして使う MOVWF TRISIO ;TRISIOレジスタ ← Wレジスタ ;---【 特殊機能レジスタ(バンク0)の初期設定 】------------------------------------------- BCF STATUS,RP0 ;■バンク0にする ( ステータスレジスタのRP0 ← 0 ) ;---コンパレータの電源オフ--- MOVLW B'00000111' ;Wレジスタ ← CM0〜2 コンパレータは電源オフする MOVWF CMCON0 ;CMCOM0レジスタ ← Wレジスタ RETURN ;****************************************************************************************** ;* 主処理 * ;****************************************************************************************** MAIN_RTN CLRF GPIO ;GPIOレジスタ ← 0 CALL LED_OUT_RTN ;LED(GPIOポート)出力処理 GOTO MAIN_RTN ;MAIN_RTNへ ジャンプする(永久ループ) ;****************************************************************************************** ;* LED(GPIOポート)出力処理 * ;****************************************************************************************** LED_OUT_RTN MOVLW LED0 ;Wレジスタ ← GPIOポート(GP0)を点灯する MOVWF GPIO ;GPIOレジスタ ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED1 ;Wレジスタ ← GPIOポート(GP1)を点灯する MOVWF GPIO ;GPIOレジスタ ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED2 ;Wレジスタ ← GPIOポート(GP2)を点灯する MOVWF GPIO ;GPIOレジスタ ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED4 ;Wレジスタ ← GPIOポート(GP4)を点灯する MOVWF GPIO ;GPIOレジスタ ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED5 ;Wレジスタ ← GPIOポート(GP5)を点灯する MOVWF GPIO ;GPIOレジスタ ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) RETURN ;****************************************************************************************** ;* タイマー処理 * ;****************************************************************************************** TIM_RTN MOVLW D'255' ;Wレジスタ ← 255 MOVWF TIMCNT1 ;TIMCNT1(タイマーカウンター1) ← Wレジスタ TIM_LOOP1 MOVLW D'255' ;Wレジスタ ← 255 MOVWF TIMCNT2 ;TIMCNT2(タイマーカウンター2) ← Wレジスタ TIM_LOOP2 NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ NOP ;空ステップ DECFSZ TIMCNT2,F ;(TIMCNT2=TIMCNT2−1)=0の時 次の命令をスキップする GOTO TIM_LOOP2 ;TIM_LOOP2へ ジャンプする(タイマーカウンタ2、ループ) DECFSZ TIMCNT1,F ;(TIMCNT1=TIMCNT1−1)=0の時 次の命令をスキップする GOTO TIM_LOOP1 ;TIM_LOOP1へ ジャンプする(タイマーカウンタ1、ループ) RETURN ;****************************************************************************************** END ;プログラムの終了