16F84A+Servo Motor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; サーボモータ | |
; ha2zakura | |
list p=16F84A ; 使用するPICの種類の定義 | |
#include <p16F84A.inc> ; 設定ファイルの指定 | |
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC | |
; _CP_OFF プログラムコードプロテクト無効 | |
; _WDT_OFF ウォッチドドック・タイマ無効 | |
; _PWRTE_ON パワーアップタイム有効 | |
; _HS_OSC 外部クロック(4MHz-20MHz) | |
;***** 定数の定義 ** | |
w_temp EQU 0x0C ; Wレジスタ保存用 | |
status_temp EQU 0x0D ; STATUSレジスタ保存用 | |
CNT1 EQU 0x0E ; カウント用 | |
TIM1 EQU 0x0F ; DELAY用 | |
TIM2 EQU 0x10 ; DELAY用 | |
delay_ms EQU 0x11 ; DELAY用 | |
;********************************************************************** | |
ORG 0x000 ; リセット | |
goto MAIN ; MAINへ移動 | |
;********************************************************************** | |
ORG 0x004 ; 割り込み処理 | |
goto INTR | |
;********************************************************************** | |
; メイン | |
MAIN bsf STATUS, RP0 ; バンク1へ | |
movlw B'00000010' | |
movwf TRISA ; 0 : 出力, 1 : 入力 | |
clrf TRISB ; bit0 -> RA0(RB0) | |
movlw B'01010111' ; プリスケーラの設定 | |
movwf OPTION_REG | |
bcf STATUS, RP0 ; バンク0へ | |
clrf PORTA | |
clrf PORTB | |
movlw D'156' ; カウント値の設定 | |
movwf TMR0 | |
bsf INTCON, T0IE ; TMR0割り込みを許可 | |
bsf INTCON, GIE ; 割り込みを許可 | |
LOOP btfsc PORTA, 1 | |
goto S_OFF | |
S_ON movlw D'100' ; RA1がHIGHの時1ms | |
movwf delay_ms | |
goto LOOP | |
S_OFF movlw D'200' ; RA1がLOWの時1ms | |
movwf delay_ms | |
goto LOOP | |
DELAY movf delay_ms, w | |
movwf TIM2 | |
DLP10ns movlw D'2' ; 1 | |
movwf TIM1 ; 2 | |
DLP3ns decfsz TIM1, f ; 3,6,7 | |
goto DLP3ns ; 4,5 | |
decfsz TIM2, f ; 8 | |
goto DLP10ns ; 9,10 | |
return | |
;********************************************************************** | |
; 割り込み処理 | |
INTR movwf w_temp ; Wレジスタを保存しておく | |
movf STATUS, w ; STATUSレジスタも保存しておく | |
movwf status_temp | |
bcf INTCON, T0IF ; TMR0オーバーフローフラグのクリア | |
bsf INTCON, T0IE ; TMR0オーバーフローフラグのクリア | |
movlw D'156' ; カウント値の設定 | |
movwf TMR0 | |
bsf PORTB, 4 | |
call DELAY ; 一定時間だけHIGHに | |
bcf PORTB, 4 | |
ENDINTR movf status_temp, w ; STATUSを復帰 | |
movwf STATUS | |
swapf w_temp, f | |
swapf w_temp, w ; Wレジスタを復帰 | |
retfie ; 割り込みから復帰 | |
END | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment