基本概念

考え方

マイコンでの制御を行うにあたり、単純な単一機能を小さな回路で実現する。 そして、パラレルの単純なインターフェイスを使用して、各回路を接続する。

PIC は 12F629 を使用する。 インターフェイスとして、 GR0から GR2 までの 3bit あるいは、 GR0 から GR2 と GR5 の 4bit を用いる。 これらは数値の 0 から 7 あるいは 15 に対応している。

マクロ集


; sakamoto629 マクロ ver 1.0
; written by Naoshi SAKAMOTO sakamoto@c.dendai.ac.jp

;
;初期化
;

        list p=12f629
	#include p12f629.inc
	variable env
env = _CPD_OFF
env &= _CP_OFF
env &= _BOREN_OFF
env &= _MCLRE_OFF
env &= _PWRTE_OFF
env &= _WDT_OFF
env &= _LVP_OFF
env &= _INTOSC_OSC_NOCLKOUT
	__config env
	cblock  0x20
	endc
	nolist

;
; timer0 TIME0 割り込みの設定、取り扱い
;


timer0_init macro psmode
	cblock 
	 savew
	 savest
	endc
	clrwdt
	banksel OPTION_REG
	movlw   psmode
	movwf   OPTION_REG
	banksel INTCON
	bsf     INTCON,T0IE
	bcf	INTCON,T0IF
	bsf	INTCON,GIE
	endm

timer0_prg macro func
timer0 
        movwf   savew
	movf    STATUS,0
	movwf   savest
        btfss   INTCON,T0IF
	goto    nottimer0
	bcf     INTCON,T0IF
	call    func
nottimer0
        movf    savest,0
	movwf	STATUS
	movf    savew,0
        retfie
        endm

;
; postscaler 呼び出しを間引く
;


postscaler_init macro rate
        #define post_rate rate
	cblock
	 post_count
	endc
	movlw	post_rate
	movwf	post_count
	endm

postscaler_prg macro func
postscaler
	decfsz	post_count,1
	return
	movlw	post_rate
	movwf	post_count
	call    func
	return
	endm

;
; duty 呼び出されると二つのサブルーチンを特定の割合で交互に呼び出す
;

duty_init macro 
	 cblock
	 duty_ratio,duty_period,duty_counter
	 endc
	 endm

duty_prg macro func_off, func_on
duty
	movf    duty_counter,0
	subwf	duty_ratio,0
	btfsc	STATUS,C
	goto    duty_on
	call	func_off
	goto	duty_end
duty_on
	call    func_on
duty_end
	decfsz	duty_counter,1
	return 
	movf     duty_period,0
	movwf	duty_counter
	return
	endm

set_rate_by_counter_prg macro
set_rate_by_counter
        movf    counter,0
	call    getduty
	movwf	duty_ratio
	return
	endm
getduty_prg	macro
getduty
        addwf   PCL,1
startduty
;	retlw   d'128'
	retlw   d'64'
	retlw   d'32'
	retlw   d'16'
	retlw   d'8'
	retlw   d'4'
	retlw   d'2'
	retlw   d'1'
endduty
        endm
porta_init macro
	cblock
	patterna
	endc
	movlw	b'11111111'
	movwf	patterna
	endm
porta_prg macro
porta_on
        movf    patterna,0
	movwf	PORTA
	return

porta_off
	clrf	PORTA
	return
	endm

        list


坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科