●LEDプログラム 16F887LED01
;****************************************************************************************** ;* ●LEDプログラム 16F887LED01    ●言語:MPASMアセンブラ * ;****************************************************************************************** ; ; 【 PIC16F887 】(40ピン) ; ____________________ ____________________ ; | V | ; | | ; 未使用 >--+ 1 RE3 MCLR | PORTB(BIT7) RB7 40 +--> LED(7) ; 未使用 <--+ 2 RA0 PORTA(BIT0) | PORTB(BIT6) RB6 39 +--> LED(6) ; 未使用 <--+ 3 RA1 PORTA(BIT1) | PORTB(BIT5) RB5 38 +--> LED(5) ; 未使用 <--+ 4 RA2 PORTA(BIT2) | PORTB(BIT4) RB4 37 +--> LED(4) ; 未使用 <--+ 5 RA3 PORTA(BIT3) | PORTB(BIT3) RB3 36 +--> LED(3) ; 未使用 <--+ 6 RA4 PORTA(BIT4) | PORTB(BIT2) RB2 35 +--> LED(2) ; 未使用 <--+ 7 RA5 PORTA(BIT5) | PORTB(BIT1) RB1 34 +--> LED(1) ; 未使用 <--+ 8 RE0 PORTE(BIT0) | PORTB(BIT0) RB0 33 +--> LED(0) ; 未使用 <--+ 9 RE1 PORTE(BIT1) | (+) Vdd 32 +-- 3〜5V+ ; 未使用 <--+ 10 RE2 PORTE(BIT2) | (-) Vss 31 +-- 0V ; 3〜5V+ --+ 11 Vdd (+) | PORTD(BIT7) RD7 30 +--> 未使用 ; 0V --+ 12 Vss (-) | PORTD(BIT6) RD6 29 +--> 未使用 ; 未使用 <--+ 13 RA7 PORTA(BIT7) | PORTD(BIT5) RD5 28 +--> 未使用 ; 未使用 <--+ 14 RA6 PORTA(BIT6) | PORTD(BIT4) RD4 27 +--> 未使用 ; 未使用 <--+ 15 RC0 PORTC(BIT0) | PORTC(BIT7) RC7 26 +--> 未使用 ; 未使用 <--+ 16 RC1 PORTC(BIT1) | PORTC(BIT6) RC6 25 +--> 未使用 ; 未使用 <--+ 17 RC2 PORTC(BIT2) | PORTC(BIT5) RC5 24 +--> 未使用 ; 未使用 <--+ 18 RC3 PORTC(BIT3) | PORTC(BIT4) RC4 23 +--> 未使用 ; 未使用 <--+ 19 RD0 PORTD(BIT0) | PORTD(BIT3) RD3 22 +--> 未使用 ; 未使用 <--+ 20 RD1 PORTD(BIT1) | PORTD(BIT2) RD2 21 +--> 未使用 ; | | ; +-----------------------------------------+ ; Copyright (c) 2017.03.01 by T.EJIRI ;------------------------------------------------------------------------------------------ ERRORLEVEL -302 ;バンク指定の確認 Warning Message[302]非表示にする ;------------------------------------------------------------------------------------------ LIST P=PIC16F887 ;標準ヘッダー INCLUDE "P16F887.INC" ;定義ファイルを取り込む ;------------------------------------------------------------------------------------------ ;****************************************************************************************** ;* コンフィグレーションビット1の設定 * ;****************************************************************************************** ; ; ●低電圧書き込み許可の指定 :_LVP_OFF :低電圧書き込みを禁止する ; ●フェイルセーフクロックモニタの指定     :_FCMEN_OFF:フェイルセーフクロックモニタの無効 ; ●内部・外部クロック切替の指定 :_IESO_OFF :無効 ; ●ブラウンアウトリセットの指定 :_BOR_OFF :低電圧リセットしない ; ●EEPROMコードプロテクトの指定 :_CPD_OFF :プロテクトしない ; ●プログラムコードプロテクトの指定 :_CP_OFF :プロテクトしない ; ●マスタ・クリア・リセットの指定:_MCLRE_OFF:無効 ; ●パワーアップタイマの指定 :_PWRTE_ON :パワーアップタイマ(PWRTE)の動作を許可する ; ●ウォッチドックタイマの動作指定:_WDT_OFF :ウォッチドックタイマ(WDT)の動作を禁止する ; ●クロック発振モード(OSC)の指定 :_INTRC_OSC_NOCLKOUT : 内部クロック使用する ; (RA6,RA7は汎用入出力ピンとなる) __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT ;****************************************************************************************** ;* コンフィグレーションビット2の設定 * ;****************************************************************************************** ; ; ●Flashメモリへの書込みの指定 :_WRT_OFF :プロテクトしない ; ●リセットの検出電圧を指定   :_BOR21V :2.1V __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ;****************************************************************************************** ;* IDワードの設定 * ;****************************************************************************************** __IDLOCS H'0001' ;IDワード ← プログラムのバージョン ;****************************************************************************************** ;* 変数項目 汎用レジスタ ■バンク0(96バイト:20Ch〜7Fh番地)    * ;****************************************************************************************** TIMCNT1 EQU H'20' ;タイマーカウンター1 TIMCNT2 EQU H'21' ;タイマーカウンター2 ;****************************************************************************************** ;* LED出力パターンデータ ( 0:消灯 1:点灯 )    * ;****************************************************************************************** LEDOFF EQU B'00000000' ;PORTB(全て)消灯 LED0 EQU B'00000001' ;PORTB(RB0)のみ点灯、以外は消灯 LED1 EQU B'00000010' ;PORTB(RB1)のみ点灯、以外は消灯 LED2 EQU B'00000100' ;PORTB(RB2)のみ点灯、以外は消灯 LED3 EQU B'00001000' ;PORTB(RB3)のみ点灯、以外は消灯 LED4 EQU B'00010000' ;PORTB(RB4)のみ点灯、以外は消灯 LED5 EQU B'00100000' ;PORTB(RB5)のみ点灯、以外は消灯 LED6 EQU B'01000000' ;PORTB(RB6)のみ点灯、以外は消灯 LED7 EQU B'10000000' ;PORTB(RB7)のみ点灯、以外は消灯 ;****************************************************************************************** ;* プログラムの開始 (リセット・ベクタ)                   * ;****************************************************************************************** ORG 0 ;リセット・ベクタ(0h番地) GOTO START ;STARTへ ジャンプする ;****************************************************************************************** ;* 割り込み (割り込みベクタ)                   * ;****************************************************************************************** ORG 4 ;割り込みベクタ(4h番地) GOTO START ;STARTへ ジャンプする ;****************************************************************************************** ;* プログラム・メイン処理の開始                    * ;****************************************************************************************** ORG 5 ;プログラムの開始アドレス(5h番地) START CALL INT_RTN ;初期処理 CALL MAIN_RTN ;主処理 ;****************************************************************************************** ;* 初期処理                   * ;****************************************************************************************** INT_RTN BSF STATUS,RP0 ;■バンク1にする ( ステータスレジスタのRP0 ← 1 ) ;---内部クロック周波数(4MHz)を設定する MOVLW B'01100000' ;Wレジスタ ← 4MHz(IRCF2:1,IRCF1:1,IRCF0:0)を選択する MOVWF OSCCON ;OSCCONレジスタ ← Wレジスタ ;---ポートの初期化--- CLRF TRISA ;PORTAは全て出力モードに設定する CLRF TRISB ;PORTBは全て出力モードに設定する CLRF TRISC ;PORTCは全て出力モードに設定する CLRF TRISD ;PORTDは全て出力モードに設定する CLRF TRISE ;PORTEは全て出力モードに設定する ;------ BCF STATUS,RP0 ;■バンク0にする ( ステータスレジスタのRP0 ← 0 ) RETURN ;****************************************************************************************** ;* 主処理                                  * ;****************************************************************************************** MAIN_RTN CALL LED_B_OFF_RTN ;LED(PORTB)消灯処理 CALL LED_B_OUT_RTN ;LED(PORTB)出力処理 GOTO MAIN_RTN ;MAIN_RTNへ ジャンプする(永久ループ) ;****************************************************************************************** ;* LED(PORTB)消灯処理 * ;****************************************************************************************** LED_B_OFF_RTN MOVLW LEDOFF ;Wレジスタ    ← PORTB(RB0〜RB7)を消灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) RETURN ;****************************************************************************************** ;* LED(PORTB)出力処理 * ;****************************************************************************************** LED_B_OUT_RTN MOVLW LED0 ;Wレジスタ    ← PORTB(RB0)を点灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED1 ;Wレジスタ    ← PORTB(RB1)を点灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED2 ;Wレジスタ    ← PORTB(RB2)を点灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED3 ;Wレジスタ    ← PORTB(RB3)を点灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED4 ;Wレジスタ    ← PORTB(RB4)を点灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED5 ;Wレジスタ    ← PORTB(RB5)を点灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED6 ;Wレジスタ    ← PORTB(RB6)を点灯する MOVWF PORTB ;PORTBポート ← Wレジスタ CALL TIM_RTN ;サブルーチンを呼ぶ(タイマー処理) MOVLW LED7 ;Wレジスタ    ← PORTB(RB7)を点灯する MOVWF PORTB ;PORTBポート ← 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 ;プログラムの終了