DPICプログラムのソース (FIRST1V2.ASM)
;------------------------------------------------------------------------------------------
; ●プログラム : FIRST1V2 ●言語 : PA(秋月電子通商製作アセンブラ)
; ●タイトル : LED(09)点滅 LED(10)点灯 プログラム(VER.2)
; ___________________ ____________________
; | V |
; | |
; >--+ 1 RA2 PORTA(BIT2) | PORTA(BIT1) RA1 18 +--<
; >--+ 2 RA3 PORTA(BIT3) | PORTA(BIT0) RA0 17 +--<
; ミシヨウ --+ 3 RA4 PORTA(BIT4) | OSC1 16 +--< オシレータ端子/外部クロック入力
; >--+ 4 MCLR | OSC2 15 +--> オシレータ端子/クロック出力
; 0V --+ 5 Vss (-) | (+) Vdd 14 +-- 3〜5V+
; >--+ 6 RB0 PORTB(BIT0) | PORTB(BIT7) RB7 13 +--<
; >--+ 7 RB1 PORTB(BIT1) | PORTB(BIT6) RB6 12 +--<
; >--+ 8 RB2 PORTB(BIT2) | PORTB(BIT5) RB5 11 +--<
; LED(09) <--+ 9 RB3 PORTB(BIT3) | PORTB(BIT4) RB4 10 +--> LED(10)
; | |
; +----------------------------------------+
; 1ピン(20mA) PIC16F84-20/P Copyright (c) 2003.12.27 by T.EJIRI
;------------------------------------------------------------------------------------------
INCLUDE 16F84.H ;プロセッサの仕様の変数宣言
;------------------------------------------------------------------------------------------
; コンフィギュレーション・レジスタの設定
;------------------------------------------------------------------------------------------
.OSC HS ;オシレータ・タイプ(HS:高速クリスタル)の設定
.PWRT ON ;パワーアップ・タイマ(ON:有効)の設定
.WDT OFF ;ウォッチドッグ・タイマ(OFF:無効)の設定
.PROTECT OFF ;コード・プロテクト(OFF:無効)の設定
;------------------------------------------------------------------------------------------
; 汎用レジスタ エリア 68バイト (SRAM) 変数定義
;------------------------------------------------------------------------------------------
ORG 0CH ;汎用レジスタ開始アドレス(000C番地)
POI DS 1 ; エリア (1バイト)
WK DS 1 ;Wレジスタ・ワーク エリア (1バイト)
TM1 DS 1 ;タイマーカウント1 エリア (1バイト)
TM2 DS 1 ;タイマーカウント2 エリア (1バイト)
;------------------------------------------------------------------------------------------
; リセット処理
;------------------------------------------------------------------------------------------
ORG 0 ;リセット・ベクタ アドレス(0000番地)
GOTO START ;プログラムの開始点(START)へジャンプ
;------------------------------------------------------------------------------------------
; 外部割り込み処理
;------------------------------------------------------------------------------------------
ORG 4 ;外部割り込みベクタ アドレス(0004番地)
GOTO START ;プログラムの開始点(START)へジャンプ
;------------------------------------------------------------------------------------------
; ゲット パターン ルーチン LEDの点灯パターン
;------------------------------------------------------------------------------------------
GETPATTERN
JMP PC+W ;Wレジスタに?をセットして、RETURNする
RETW 0000b,00011000b ;PC+=W+1 テーブル参照
RETW 0000b,00010000b ;プログラム・カウンタ
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00011000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
RETW 0000b,00010000b ;
;------------------------------------------------------------------------------------------
; 開始プログラム
;------------------------------------------------------------------------------------------
START ;プログラムの始まり
CLR ra ;RA=0
CLR rb ;RB=0
MOV !ra,#0 ;Aポート出力設定
MOV !rb,#0 ;Bポート出力設定
MAIN0
CLR POI ;POI=0
MAIN
MOV WK,POI ;WK=POI
CLC ;CF=0
RL WK ;WKを左へシフト(1ビット)
MOV W,WK ;W=WK
CALL GETPATTERN ;ゲットパターンルーチン呼び出し
MOV ra,W ;RA=W
INC WK ;WK++
MOV W,WK ;W=WK
CALL GETPATTERN ;ゲットパターンルーチン呼び出し
MOV rb,W ;RB=W
CALL WAIT ;ループ・タイマールーチンの呼び出し
INC POI ;POI++
CJB POI,#24,MAIN ;IF POI <24 の時 mainへジャンプ
GOTO MAIN0 ;main0へジャンプ
;------------------------------------------------------------------------------------------
; ループ・タイマー ルーチン
;------------------------------------------------------------------------------------------
WAIT
CLR TM1 ;TM1=0
WAIT0
CLR TM2 ;TM2=0
WAIT1
NOP ;1クロック時間を消費する
DJNZ TM2,WAIT1 ;TM2=TM2-1 IF TM2 NOT= 0 の時 wait1へジャンプ
DJNZ TM1,WAIT0 ;TM1=TM1-1 IF TM1 NOT= 0 の時 wait0へジャンプ
RET ;ループ・タイマー ルーチンの出口
;------------------------------------------------------------------------------------------
;プログラムの終了
;------------------------------------------------------------------------------------------