PICでもっと遊ぶその3「EEROMを使ってサーボを“ガガガ”と動かす」夏でも楽しい工作教室(2/3 ページ)

» 2005年07月22日 15時43分 公開
[小林哲雄,ITmedia]
 ;(……ソースコードの続き……)
 INTMAIN
▼▼  MOVWF WBUF ; レジスタ類退避
▼▼  SWAPF STATUS,W
▼▼  BCF STATUS,RP0
 MOVWFSBUF
 ;
 MOVLW0EAH; タイマー再セット
 
▼▼  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
 DECFRC1TIM,F
 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
 CLRFEERPOS
 ;
 ;ここからループ開始
 ;
 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.

最新トピックスPR

過去記事カレンダー