赤道儀のコントローラーをマイコンを使って自作回路で制御するようになったのは2013年3月のこと。
少しづつ改良を加えてきましたが基本は当時と変わっていません
ここでは極軸=赤経軸の駆動プログラムについて説明します
赤緯軸に関しては「バックラッシュを少なくするプログラム」で説明しています
主な仕様は
マイコンはPIC16F648A
12Vの電源でステッピングモータを駆動
回路の電源はレギュレーターで5Vに減圧して使う
マイコンは20MHzの水晶発振器を使って動作させる
ステッピングモーターは1-2相励磁駆動方式
オートガイドに対応
オートガイド時の駆動スピードを調整可能
回路についてはまた後日に
PICのプログラムはC言語でも書くことができるのですが
より単純なアセンブリ言語を使って書きました
モーターの回転といった単純な動作にはピッタリです
特に、プログラムなど勉強をしたことのない私にとって比較的ハードルは低かったです
ステッピングモーターを回すというのはマイコンのプログラムの基本でもあるので
いろいろな作例がネットで公開されているので参考にさせていただきました
まず「1-2相励磁駆動」について具体的に示しますと
1000
1100
0100
0110
0010
0011
0001
1001
(1がON,0がOFF)
という信号をマイコンから発信させて
MOSFETというトランジスターの仲間によってモーターの12Vの電源を制御します
例えば私の場合はモーターの駆動に合わせてLEDを発行させているので
2進法で8桁、16進法で2桁の数字をプログラムに書き込みます
「10001000」という信号を出力するには
MOVLW 88h
MOVWF PORTB
とします (16進法の「88h」は2進法「1000 1000」です)
PORTのRB7~0にそれぞれ
RB7=1 RB6=0 RB65=0 RB4=0
RB3=1 RB2=0 RB21=0 RB0=0
が出力されます
この1、0の出力を順序だてて出力させればモーターが回転することになります
STEP1 ;(ここでは私がモータの第一段階をSTEP1と名付けました)
MOVLW 88h ;(88=1000 1000、hは16進法を表しています)
MOVWF PORTB ;(ポートBから信号を発信)
STEP2
MOVLW 0Ch ;(0C=0000 1100)
MOVWF PORTB
STEP3
MOVLW 84h ;(84=1000 0100)
MOVWF PORTB
STEP4
MOVLW 06h ;(06=0000 0110)
MOVWF PORTB
STEP5
MOVLW 82h ;(82=1000 0010)
MOVWF PORTB
STEP6
MOVLW 03h
MOVWF PORTB
STEP7
MOVLW 81h
MOVWF PORTB
STEP8
MOVLW 09h
MOVWF PORTB
GOTO STEP1
これで8段階のモーターのステップが繰り返されてLEDは点滅を繰り返すことになります
でも、このままではモーターのスピードは極限になってしまいます
そこで待ち時間を作ります
私の場合各ステップごとに例えば CALL T318
のように時間を待つプログラムを呼び出す形にしてあります
MOVLW 88h ;(88=1000 1000、hは16進法を表しています)
MOVWF PORTB ;(ポートBから信号を発信)
CALL T318 ;(318サイクル待つサブルーチンなのでT318と名付けました)
MOVLW 0Ch ;(0C=0000 1100)
MOVWF PORTB
CALL T318 ;(T318を呼び出して実行します)
; 318サイクル待つサブルーチン
T318
MOVLW 069h ; (069hは16進法で105)
MOVWF GPR_3 ; (ループ回数として105をメモリのGPR_3セット)
T318LP DECFSZ GPR_3,F ; (ループ回数が105になったら次の命令をスキップ)
GOTO T318LP
RETURN ; (このサブルーチン呼出し元に戻る)
のようにです
この待ち時間を作るプログラムは
「PICで遊ぶ電子工作」さんを参考にさせていただきました
待ち時間は318のように短いサイクルから259,376サイクルという長いものまで様々作りました
「サイクル」というのはプログラム一言語を実行する時間のことで、
「1サイクル」は「4クロック」=0.2μ秒
20MHzで動作させる場合5MHzで命令が実行されることになります
つぎに、オートガイドの機能です
RA0,RA1,に接続されたオートガイダーからの信号をモーターの1ステップごとにごとに確認します
BTFSC PORTA,0 ;(RA0が0だったら次の命令をスキップ)
GOTO NFSTAR1 ;(RA0が1だったので NFSTARに飛ぶ)
BTFSC PORTA,1 ;(RA1が0だったら次の命令をスキップ)
GOTO NLSTAR2 ;(RA1が1だったので NLSTARに飛ぶ)
という具合です
NFSTARというのはモーターの回転速度を増すように待ち時間を調整したサブルーチンで
NLSTARは遅くするサブルーチンにしてあります
(NFSTAR、NLSTARも私が名付けたサブルーチンの名前です)
ところで、オートガイドのST-4という規格は駆動を修正する信号は「0(OFF)」
通常駆動は「1(ON)」となっていて
私のプログラムとは正反対になっています
これについては回路に関する記事で説明しますが
私のプログラムを参考になさる場合は注意なさってください
こうしてできたモーターのステップ一回はこのようになります
MOVLW 88h ;(88=1000 1000、hは16進法を表しています)
MOVWF PORTB ;(ポートBから信号を発信)
BTFSC PORTA,1 ;(RA1が0だったら次の命令をスキップ)
GOTO NFSTAR1 ;(RA0が1だったので NFSTARに飛ぶ)
BTFSC PORTA,0 ;(RA0が0だったら次の命令をスキップ)
GOTO NLSTAR2 ;(RA1が1だったので NFSTARに飛ぶ)
CALL T318
次にオートガイドの信号を受けた先のサブルーチンですが
モーター1ステップでこのようになっています
NFSTAR1 MOVLW 88h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO STEP2 ;(信号が無くなったら通常駆動に戻る)
このサブルーチンで工夫した点は
直接待ち時間をここで設定するのではなく
一度別のFSEL(私が名付けた)というサブルーチンを呼び出す点です
私のコントローラーには2進法で4桁のスイッチがついています
そのスイッチのオンオフをマイコンが判断して
待ち時間を選ぶということをしています
スイッチの設定で赤道儀の修正速度を変えることができます
下の桁から
0か1かを判断して
次に
00、10、01、11
次に
000、100、010、110、101、001、011、111
次に
0000、1000、0100、1100、0010、1010、0110、1110、
0101、1101、0001、1001、0011、1011、0111、1111
という具合に最終的に16種類の待ち時間を呼び出すようにしました
速度を遅くするサブルーチンも同じ仕組みで作りました
私のプログラムは命令を実行するサイクルと待ち時間を組み合わせることで
恒星日=86,164.09秒を正確に再現しました
オートガイドを使うので駆動の修正がなされるのでキングスレートではなく恒星日を採用しました
GP赤道儀のモーターを1-2相駆動させるとモーターの軸は通常の倍、96ステップで1回転します
ギア比1/120のギアがついていて、ワームホイールは144歯があります
なので 96×120×144=1,658,880ステップで極軸が1回転します
1秒間のステップ数は太陽日=24時間の場合
1,658,880 ÷ 86,400秒 =19.2 回
恒星日=86164.09秒では
19.25256798145… 回
となります
PICを20MHzで動作させたときの1つの命令にかかる時間(1サイクル)は0.2μ秒です。
そこから導き出されるモーターの1ステップは
1 ÷ 19.25256798145… ÷ 0.2μ秒=259,705.614586…サイクルになります
小数点以下のサイクルは再現できないので259,705+5/8としました(5/8は0.625)
具体的には
MOVLW 88h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,0
GOTO NFSTAR2
BTFSC PORTA,1
GOTO NLSTAR2
NOP
CALLは2サイクルの命令なので
このプログラムを実行すると11サイクル
そして259,376サイクルを待つサブルーチンと
318サイクル待つサブルーチンを加えると
合計259705サイクルとなります
これに、さらに「NOP(何もしないという命令)」を一つ加えると
259,706サイクルになります
1-2相の8ステップのうち259,705サイクルを3回、259706サイクルを5回とすれば
8ステップの平均が259,705+5/8となります。
1ステップあたりの誤差は0.0104サイクル 0.00208μ秒
計算上は1日に0.0035秒の誤差となります(1か月で約1秒の誤差)
以上が私が作り現在ビクセンのGP2、SP赤道儀で使用しているコントローラーの概要です
クオーツ時計の駆動精度とST-4互換のオートガイダーで正確なガイドが可能になっています
プログラムを掲載しておきます
; 赤道儀コントローラー赤緯軸1-2相励磁駆動PIC16F648A VR2020/08 BY STARRYZOBI
; CLOCK 20.000MHz
; このバージョンでは恒星追尾に対して1.1倍速から2.6倍速および0.91倍から0.38倍速を16段階で駆動を選択できる。
;オートガイダーの+RAは18番ピン(RA1)、-RAは17番ピン(RA0)に接続する
; 0 = 1.1 & 0.91
; 1 = 1.2 & 0.83
; 2 = 1.3 & 0.77
; 3 = 1.4 & 0.71
; 4 = 1.5 & 0.67
; 5 = 1.6 & 0.625
; 6 = 1.7 & 0.59
; 7 = 1.8 & 0.56
; 8 = 1.9 & 0.53
; 9 = 2.0 & 0.5
; 10 = 2.1 & 0.48
; 11 = 2.2 & 0.455
; 12 = 2.3 & 0.435
; 13 = 2.4 & 0.417
; 14 = 2.5 & 0.4
; 15 = 2.6 & 0.385
LIST P=PIC16F648A ;
INCLUDE P16F648A.INC ;
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BODEN_ON & _LVP_OFF & _MCLRE_OFF
GPR_1 EQU 020h ; GPRの1バイト目にGPR_1と言う名前を付ける
GPR_2 EQU 021h ; GPRの2バイト目にGPR_2と言う名前を付ける
GPR_3 EQU 021h
GPR_4 EQU 022h
GPR_5 EQU 022h
GPR_6 EQU 025h
GPR_7 EQU 026h
GPR_8 EQU 027h
GPR_9 EQU 028h
GPR_10 EQU 029h
GPR_11 EQU 02Ah
GPR_12 EQU 02Bh
GPR_13 EQU 02Ch
GPR_14 EQU 02Dh
GPR_15 EQU 02Eh
GPR_16 EQU 02Fh
GPR_17 EQU 030h
GPR_18 EQU 031h
GPR_19 EQU 032h
GPR_20 EQU 033h
GPR_21 EQU 034h
GPR_22 EQU 035h
GPR_23 EQU 036h
GPR_24 EQU 037h
GPR_25 EQU 038h
GPR_26 EQU 039h
GPR_27 EQU 03Ah
GPR_28 EQU 03Bh
ORG 0 ; リセットベクタを指定する。
INIT
; << PICの初期化 >>
CLRF PORTA
MOVLW 07h
MOVWF CMCON ; PORTAはI/Oデジタル
; < I/O方向定義>
BSF STATUS,RP0 ; バンク1へ切り替え
MOVLW 0FFh
MOVWF TRISA ; PORTAは全て入力
CLRF TRISB ; ファイルレジスタTRISBをクリア(0) → PORTBは全て出力
BCF STATUS,RP0 ; STATUSのRP0をクリア(0) → バンク0
; <<北天星追尾 >>
NSTAR1 MOVLW 88h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR2
BTFSC PORTA,0
GOTO NLSTAR2
NOP ; 1-2相の8ステップのうち259705サイクルを3回
NSTAR2 MOVLW 8Ch
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR3
BTFSC PORTA,0
GOTO NLSTAR3
NOP
NOP ; 1-2相の8ステップのうち259706サイクルを5回
NSTAR3 MOVLW 84h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR4
BTFSC PORTA,0
GOTO NLSTAR4
NOP
NOP ; 259706サイクルを5回
NSTAR4 MOVLW 86h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR5
BTFSC PORTA,0
GOTO NLSTAR5
NOP ; 259705サイクルを3回
NSTAR5 MOVLW 02h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR6
BTFSC PORTA,0
GOTO NLSTAR6
NOP
NOP ; 259706サイクルを5回
NSTAR6 MOVLW 03h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR7
BTFSC PORTA,0
GOTO NLSTAR7
NOP
NOP ; 259706サイクルを5回
NSTAR7 MOVLW 01h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR8
BTFSC PORTA,0
GOTO NLSTAR8
NOP ; 259705サイクルを3回
NSTAR8 MOVLW 09h
MOVWF PORTB
CALL T259376
CALL T318
BTFSC PORTA,1
GOTO NFSTAR1
BTFSC PORTA,0
GOTO NLSTAR1
GOTO NSTAR1 ; 259706サイクルを5回(GOTOは2サイクルの命令)
; <<北天星追尾速度アップ >>
NFSTAR1 MOVLW 88h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR2
NFSTAR2 MOVLW 8Ch
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR3
NFSTAR3 MOVLW 44h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR4
NFSTAR4 MOVLW 46h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR5
NFSTAR5 MOVLW 22h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR6
NFSTAR6 MOVLW 23h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR7
NFSTAR7 MOVLW 11h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR8
NFSTAR8 MOVLW 19h
MOVWF PORTB
CALL FSEL
BTFSS PORTA,1
GOTO NSTAR1
GOTO NFSTAR1
; <<北天星追尾速度ダウン >>
NLSTAR1 MOVLW 88h
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR2
NLSTAR2 MOVLW 8Ch
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR3
NLSTAR3 MOVLW 44h
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR4
NLSTAR4 MOVLW 46h
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR5
NLSTAR5 MOVLW 22h
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR6
NLSTAR6 MOVLW 23h
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR7
NLSTAR7 MOVLW 11h
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR8
NLSTAR8 MOVLW 19h
MOVWF PORTB
CALL LSEL
BTFSS PORTA,0
GOTO NSTAR1
GOTO NLSTAR1
; <<北天星追尾速度アップ速度選択 >>
FSEL BTFSC PORTA,2
CALL SELxxx1 ; xxx1
BTFSC PORTA,2
RETURN
CALL SELxxx0 ; xxx0
RETURN
SELxxx1 BTFSC PORTA,3 ; xxx1
CALL SELxx11 ; xx11
BTFSC PORTA,3
RETURN
CALL SELxx01 ; xx01
RETURN
SELxxx0 BTFSC PORTA,3 ; xxx0
CALL SELxx10 ; xx10
BTFSC PORTA,3
RETURN
CALL SELxx00 ; xx 00
RETURN
SELxx01 BTFSC PORTA,4 ; xx01
CALL SELx101 ; x101
BTFSC PORTA,4
RETURN
CALL SELx001 ; x001
RETURN
SELxx00 BTFSC PORTA,4 ; xx00
CALL SELx100 ; x100
BTFSC PORTA,4
RETURN
CALL SELx000 ; x000
RETURN
SELxx11 BTFSC PORTA,4 ; xx11
CALL SELx111 ; x111
BTFSC PORTA,4
RETURN
CALL SELx011 ; x011
RETURN
SELxx10 BTFSC PORTA,4 ; xx10
CALL SELx110 ; x110
BTFSC PORTA,4
RETURN
CALL SELx010 ; x010
RETURN
SELx010 BTFSC PORTA,5 ; x010
CALL T21 ; 1010=10
BTFSC PORTA,5
RETURN
CALL T13 ; 0010=2
RETURN
SELx110 BTFSC PORTA,5 ; x110
CALL T25 ; 1110=14
BTFSC PORTA,5
RETURN
CALL T17 ; 0110=6
RETURN
SELx000 BTFSC PORTA,5 ; x000
CALL T19 ; 1000=8
BTFSC PORTA,5
RETURN
CALL T11 ; 0000=0
RETURN
SELx011 BTFSC PORTA,5 ; x011
CALL T22 ; 1011=11
BTFSC PORTA,5
RETURN
CALL T14 ; 0011=3
RETURN
SELx100 BTFSC PORTA,5 ; x100
CALL T23 ; 1100=12
BTFSC PORTA,5
RETURN
CALL T15 ; 0100=4
RETURN
SELx111 BTFSC PORTA,5 ; x111
CALL T26 ; 1111=15
BTFSC PORTA,5
RETURN
CALL T18 ; 0111=7
RETURN
SELx001 BTFSC PORTA,5 ; x001
CALL T20 ; 1001=9
BTFSC PORTA,5
RETURN
CALL T12 ; 0001=1
RETURN
SELx101 BTFSC PORTA,5 ; x101
CALL T24 ; 1101=13
BTFSC PORTA,5
RETURN
CALL T16 ; 0101=5
RETURN
; <<北天星追尾速度ダウン速度選択 >>
LSEL BTFSC PORTA,2
CALL LSELxxx1 ; xxx1
BTFSC PORTA,2
RETURN
CALL LSELxxx0 ; xxx0
RETURN
LSELxxx1 BTFSC PORTA,3 ; xxx1
CALL LSELxx11 ; xx11
BTFSC PORTA,3
RETURN
CALL LSELxx01 ; xx01
RETURN
LSELxxx0 BTFSC PORTA,3 ; xxx0
CALL LSELxx10 ; xx10
BTFSC PORTA,3
RETURN
CALL LSELxx00 ; xx00
RETURN
LSELxx01 BTFSC PORTA,4 ; xx01
CALL LSELx101 ; x101
BTFSC PORTA,4
RETURN
CALL LSELx001 ; x001
RETURN
LSELxx00 BTFSC PORTA,4 ; xx00
CALL LSELx100 ; x100
BTFSC PORTA,4
RETURN
CALL LSELx000 ; x000
RETURN
LSELxx11 BTFSC PORTA,4 ; xx11
CALL LSELx111 ; x111
BTFSC PORTA,4
RETURN
CALL LSELx011 ; x011
RETURN
LSELxx10 BTFSC PORTA,4 ; xx10
CALL LSELx110 ; x110
BTFSC PORTA,4
RETURN
CALL LSELx010 ; x010
RETURN
LSELx010 BTFSC PORTA,5 ; x010
CALL LT21 ; 1010=10
BTFSC PORTA,5
RETURN
CALL LT13 ; 0010=2
RETURN
LSELx110 BTFSC PORTA,5 ; x110
CALL LT25 ; 1110=14
BTFSC PORTA,5
RETURN
CALL LT17 ; 0110=6
RETURN
LSELx000 BTFSC PORTA,5 ; x000
CALL LT19 ; 1000=8
BTFSC PORTA,5
RETURN
CALL LT11 ; 0000=0
RETURN
LSELx011 BTFSC PORTA,5 ; x011
CALL LT22 ; 1011=11
BTFSC PORTA,5
RETURN
CALL LT14 ; 0011=3
RETURN
LSELx100 BTFSC PORTA,5 ; x100
CALL LT23 ; 1100=12
BTFSC PORTA,5
RETURN
CALL LT15 ; 0100=4
RETURN
LSELx111 BTFSC PORTA,5 ; x111
CALL LT26 ; 1111=15
BTFSC PORTA,5
RETURN
CALL LT18 ; 0111=7
RETURN
LSELx001 BTFSC PORTA,5 ; x001
CALL LT20 ; 1001=9
BTFSC PORTA,5
RETURN
CALL LT12 ; 0001=1
RETURN
LSELx101 BTFSC PORTA,5 ; x101
CALL LT24 ; 1101=13
BTFSC PORTA,5
RETURN
CALL LT16 ; 0101=5
RETURN
; << 259376サイクル待つルーチン >>
T259376 MOVLW 0CFh ; CFh=207
MOVWF GPR_1 ; (ループ回数として207をセット)
T5296LP CALL T1248S ;
DECFSZ GPR_1,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T5296LP
NOP
NOP ;
RETURN ; このサブルーチン呼出し元に戻る
; <<1248サイクル待つサブルーチン >>
T1248S MOVLW 0F9h ; F9h=249
MOVWF GPR_2 ; (ループ回数として249をセット)
T1248LP NOP
NOP ; 何もせず1サイクル消費
DECFSZ GPR_2,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T1248LP
RETURN ; このサブルーチン呼出し元に戻る
; <<318サイクル待つサブルーチン >>
T318 MOVLW 069h ; 69h=105
MOVWF GPR_3 ; (ループ回数として105をセット)
T318LP DECFSZ GPR_3,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T318LP
RETURN ; このサブルーチン呼出し元に戻る
; << 236820サイクル待つルーチン=1.1 >>
T11 MOVLW 0BDh ; BD=189
MOVWF GPR_4 ; (ループ回数として189をセット)
T11LP CALL T1248S ;
DECFSZ GPR_4,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T11LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 216772サイクル待つルーチン=1.2 >>
T12 MOVLW 0ADh ; AD=173
MOVWF GPR_5 ; (ループ回数として173をセット)
T12LP CALL T1248S ;
DECFSZ GPR_5,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T12LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 200483サイクル待つルーチン=1.3 >>
T13 MOVLW 0A0h ; 0A0=160
MOVWF GPR_6 ; (ループ回数として160をセット)
T13LP CALL T1248S ;
DECFSZ GPR_6,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T13LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 185447サイクル待つルーチン=1.4 >>
T14 MOVLW 94h ; 94=148
MOVWF GPR_7 ; (ループ回数として148をセット)
T14LP CALL T1248S ;
DECFSZ GPR_7,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T14LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 172917サイクル待つルーチン=1.5 >>
T15 MOVLW 8Ah ; 8A=138
MOVWF GPR_8 ; (ループ回数として139をセット)
T15LP CALL T1248S ;
DECFSZ GPR_8,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T15LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 161960サイクル待つルーチン=1.6 >>
T16 MOVLW 82h ; 82=130
MOVWF GPR_9 ; (ループ回数として130をセット)
T16LP CALL T1248S ;
DECFSZ GPR_9,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T16LP ;
CALL T318
RETURN ; このサブルーチン呼出し元に戻る
; << 152869サイクル待つルーチン=1.7 >>
T17 MOVLW 7Ah ; 7A=122
MOVWF GPR_10 ; (ループ回数として122をセット)
T17LP CALL T1248S ;
DECFSZ GPR_10,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T17LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 144098サイクル待つルーチン=1.8 >>
T18 MOVLW 73h ; 73=115
MOVWF GPR_11 ; (ループ回数として115をセット)
T18LP CALL T1248S ;
DECFSZ GPR_11,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T18LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 135327サイクル待つルーチン=1.9 >>
T19 MOVLW 6Ch ; 6C=107
MOVWF GPR_12 ; (ループ回数として107をセット)
T19LP CALL T1248S ;
DECFSZ GPR_12,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T19LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 130315サイクル待つルーチン=2.0 >>
T20 MOVLW 68h ; 68=104
MOVWF GPR_13 ; (ループ回数として104をセット)
T20LP CALL T1248S ;
DECFSZ GPR_13,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T20LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 124050サイクル待つルーチン=2.1 >>
T21 MOVLW 63h ; 63=99
MOVWF GPR_14 ; (ループ回数として99をセット)
T21LP CALL T1248S ;
DECFSZ GPR_14,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T21LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 117785サイクル待つルーチン=2.2 >>
T22 MOVLW 5Eh ; 5E=94
MOVWF GPR_15 ; (ループ回数として94をセット)
T22LP CALL T1248S ;
DECFSZ GPR_15,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T22LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 112773サイクル待つルーチン=2.3 >>
T23 MOVLW 5Ah ; 5A=90
MOVWF GPR_16 ; (ループ回数として90をセット)
T23LP CALL T1248S ;
DECFSZ GPR_16,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T23LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 107761サイクル待つルーチン=2.4 >>
T24 MOVLW 56h ; 56=86
MOVWF GPR_17 ; (ループ回数として86をセット)
T24LP CALL T1248S ;
DECFSZ GPR_17,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T24LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 104002サイクル待つルーチン=2.5 >>
T25 MOVLW 53h ; 53=83
MOVWF GPR_18 ; (ループ回数として83をセット)
T25LP CALL T1248S ;
DECFSZ GPR_18,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T25LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 100243サイクル待つルーチン=2.6 >>
T26 MOVLW 50h ; 50=80
MOVWF GPR_19 ; (ループ回数として80をセット)
T26LP CALL T1248S ;
DECFSZ GPR_19,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO T26LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 285694サイクル待つルーチン >>
LT11 MOVLW 15h ; =21
MOVWF GPR_20 ; (ループ回数として21をセット)
LT11LP CALL T1248S ;
DECFSZ GPR_20,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT11LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << 312007サイクル待つルーチン >>
LT12 MOVLW 2Ah ; =42
MOVWF GPR_21 ; (ループ回数として42をセット)
LT12LP CALL T1248S ;
DECFSZ GPR_21,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT12LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << 337067サイクル待つルーチン >>
LT13 MOVLW 3Eh ; =62
MOVWF GPR_22 ; (ループ回数として62をセット)
LT13LP CALL T1248S ;
DECFSZ GPR_22,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT13LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << +104002サイクル待つルーチン >>
LT14 MOVLW 53h ; =83
MOVWF GPR_23 ; (ループ回数として83をセット)
LT14LP CALL T1248S ;
DECFSZ GPR_23,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT14LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << +129062サイクル待つルーチン >>
LT15 MOVLW 67h ; =103
MOVWF GPR_24 ; (ループ回数として103をセット)
LT15LP CALL T1248S ;
DECFSZ GPR_24,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT15LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << +155375サイクル待つルーチン >>
LT16 MOVLW 07Ch ; =124
MOVWF GPR_25 ; (ループ回数として124をセット)
LT16LP CALL T1248S ;
DECFSZ GPR_25,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT16LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << +181688サイクル待つルーチン >>
LT17 MOVLW 91h ; =145
MOVWF GPR_26 ; (ループ回数として145をセット)
LT17LP CALL T1248S ;
DECFSZ GPR_26,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT17LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << +208001サイクル待つルーチン >>
LT18 MOVLW 0A6h ; =166
MOVWF GPR_27 ; (ループ回数として166をセット)
LT18LP CALL T1248S ;
DECFSZ GPR_27,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT18LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << +233061サイクル待つルーチン >>
LT19 MOVLW 0BAh ; =186
MOVWF GPR_28 ; (ループ回数として186をセット)
LT19LP CALL T1248S ;
DECFSZ GPR_28,F ; ループ回数?1して0になったら次の命令をスキップ
GOTO LT19LP ;
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << +259376サイクル待つルーチン >>
LT20 CALL T259376
CALL T259376
RETURN ; このサブルーチン呼出し元に戻る
; << 545076サイクル待つルーチン >>
LT21 CALL T259376
CALL LT11
RETURN ; このサブルーチン呼出し元に戻る
; << 571389サイクル待つルーチン >>
LT22 CALL T259376
CALL LT12
RETURN ; このサブルーチン呼出し元に戻る
; << +337065サイクル待つルーチン >>
LT23 CALL T259376
CALL LT13
RETURN ; このサブルーチン呼出し元に戻る
; << +363378サイクル待つルーチン >>
LT24 CALL T259376
CALL LT14
RETURN ; このサブルーチン呼出し元に戻る
; << +388438サイクル待つルーチン >>
LT25 CALL T259376
CALL LT15
RETURN ; このサブルーチン呼出し元に戻る
; << +414751サイクル待つルーチン >>
LT26 CALL T259376
CALL LT16
RETURN ; このサブルーチン呼出し元に戻る
END
0コメント