;(……ソースコードの続き……)
INTMAIN
| ▼▼ |
MOVWF |
WBUF |
|
|
; レジスタ類退避 |
| ▼▼ |
SWAPF |
STATUS,W |
| ▼▼ |
BCF |
|
STATUS,RP0 |
| MOVWFSBUF |
;
| ▼▼ |
MOVWF |
TMR1L |
| ▼▼ |
MOVLW |
0B1H |
| ▼▼ |
MOVWF |
TMR1H |
| BCFPIR1,TMR1IF |
;
RC1SET
| ▼▼ |
MOVF |
RC1POS,W |
|
; サーボ1のデータを送る |
| ▼▼ |
BTFSC |
STATUS,Z |
|
; データが0なら送らない |
| ▼▼ |
GOTO |
RC2SET |
|
|
; 中心値128 1-128-255 |
| ▼▼ |
BSF |
|
GPIO,GPIO5 |
| ▼▼ |
|
|
|
|
|
|
; サーボパルス調整値 |
| ▼▼ |
|
|
|
|
|
|
; 01での幅 80での幅 FFでの幅 W値 前/後NOP数 |
| ▼▼ ; |
MOVLW |
0F6H |
|
|
; 01:0991 80:1499 FF:2007 F6 N1 N1 |
| ▼▼ ; |
MOVLW |
0D6H |
|
|
; 01:0864 80:1499 FF:2134 D6 N1 N2 |
| ▼▼ |
MOVLW |
0B6H |
|
|
; 01:0737 80:1499 FF:2261 B6 N1 N3 |
| MOVWFCOUNT |
INTLP1
| ▼▼ |
NOP |
|
|
|
|
|
; 前NOP |
| ▼▼ |
DECFSZ |
COUNT,F |
| ▼▼ |
GOTO |
INTLP1 |
| ▼▼ |
MOVF |
RC1POS,W |
| MOVWFCOUNT |
INTLP2
| ▼▼ |
NOP |
|
|
|
|
|
; 後NOP |
| ▼▼ |
NOP |
| ▼▼ |
NOP |
| ▼▼ |
DECFSZ |
COUNT,F |
| ▼▼ |
GOTO |
INTLP2 |
| BCFGPIO,GPIO5 |
RC2SET
RCSETE
;
| ▼▼ |
SWAPF |
SBUF,W |
|
; レジスタ類復帰 |
| ▼▼ |
MOVWF |
STATUS |
| ▼▼ |
SWAPF |
WBUF,F |
| ▼▼ |
SWAPF |
WBUF,W |
| ▼▼ |
BSF |
|
INTCON,GIE |
; 割り込み再許可 |
| RETFIE |
;
;
;
MAIN
| ▼▼ |
CLRWDT |
|
|
|
; 割り込み関連初期化 |
| ▼▼ |
CALL |
3FFh |
|
; 内蔵オシレーター調整 |
| ▼▼ |
MOVWF |
OSCCAL |
| ▼▼ |
BANKSEL |
T1CON |
| ▼▼ |
MOVLW |
B'00000001' |
; TMR1 1:1 |
| ▼▼ |
MOVWF |
T1CON |
| ▼▼ |
MOVLW |
B'11000000' |
; GIE & PEIE |
| ▼▼ |
MOVWF |
INTCON |
| ▼▼ |
BANKSEL |
PIE1 |
| ▼▼ |
MOVLW |
B'10000001' |
; EEIE & TMR1IE |
| ▼▼ |
MOVWF |
PIE1 |
| ▼▼ |
BANKSEL |
TMR1L |
| ▼▼ |
MOVLW |
0F0H |
|
; タイマ初期化 20ms |
| ▼▼ |
MOVWF |
TMR1L |
| ▼▼ |
MOVLW |
0B1H |
| MOVWFTMR1H |
;
| ▼▼ |
CLRF |
GPIO |
| ▼▼ |
MOVLW |
07h |
| ▼▼ |
MOVWF |
CMCON |
| ▼▼ |
BANKSEL |
TRISIO |
| ▼▼ |
CLRF |
TRISIO |
| ▼▼ |
CLRF |
ANSEL |
| BANKSELGPIO |
;
| ▼▼ |
MOVLW |
080H |
|
; フェイルセーフ |
| MOVWFRC1POS |
MAIN01
;
;
MAIN02
; EEPOSから二バイト読み出し
; RC1POS(サーボ位置)
; RC1TOM(サーボ保持時間[20ms単位])
; を書き込む。RC1TIMが0ならデータエンドなのでループ
| ▼▼ |
BANKSEL |
EEADR |
| ▼▼ |
MOVF |
EERPOS,W |
| ▼▼ |
MOVWF |
EEADR |
|
;Address to read |
| ▼▼ |
BSF |
|
EECON1,RD |
;EE Read |
| ▼▼ |
MOVF |
EEDATA,W |
;Move data to W |
| ▼▼ |
MOVWF |
RC1POS |
| ▼▼ |
INCF |
EEADR , F |
| ▼▼ |
BSF |
|
EECON1,RD |
;EE Read |
| ▼▼ |
MOVF |
EEDATA,W |
;Move data to W |
| ▼▼ |
MOVWF |
RC1TIM |
| ▼▼ |
BCF |
|
STATUS,RP0 |
; Bank 0 |
| ▼▼ |
INCF |
EERPOS,F |
| ▼▼ |
INCF |
EERPOS,F |
| ▼▼ |
MOVF |
RC1TIM,F |
; RC1TIM = 0 なら |
| ▼▼ |
BTFSC |
STATUS,Z |
; データ終了なのでリピート |
| GOTOMAIN01 |
MAIN03
;
; RC1TIMが0になるまで待つ
; (減算は割り込みルーチンが行う)
;
| ▼▼ |
MOVF |
RC1TIM , F |
| ▼▼ |
BTFSC |
STATUS,Z |
| ▼▼ |
GOTO |
MAIN02 |
| GOTOMAIN03 |
;(ソースコードは“もうちょっと”続く……)
Copyright © ITmedia, Inc. All Rights Reserved.