アットウィキロゴ

ソフトウェア

WAITルーチン

DELAY ;CPU time = 3 * delay_CNT + 1
movlw	0x14		;delay_CNT = 20
movwf	delay_CNT
LOOP
decfsz	delay_CNT,f
goto 	LOOP		;delay = 61



;************************************************************
;* PIC10F200によるLED制御器
;*
;************************************************************
;

LIST
"P10F200.INC"
__CONFIG  0x08

;データ定義
R_set equ 0x10
G_set equ 0x11
B_set equ 0x12
CNT equ 0x13
R_CNT equ 0x14
Receive equ 0x15
delay_CNT equ 0x16
delay_CNT2 equ 0x17

R_LED equ 0x0
G_LED equ 0x1
B_LED equ 0x2
RXD equ 0x3
;プログラム開始
org	0
;初期設定
movwf	OSCCAL
movlw	b'11010000'	;T0CS = 0, PSA = 0
option	
movlw	b'00001000'	;GP0,1,2 OUTPUT, GP3 INPUT
tris	GPIO
clrf	CNT		;clear	counter
clrf	GPIO
clrf	R_CNT
clrf	Receive
movlw	0xaf	;init RGB
movwf	R_set
movlw	0x7f	;init RGB
movwf	G_set
movlw	0x2f	;init RGB
movwf	B_set

MAIN
movf	R_set,w
subwf	CNT,w		;CNT - R_set < 0  carry = 0 (CNT < R_set)
btfsc	STATUS,C	;if C = 1 ,skip next command
bsf		GPIO,R_LED

movf	G_set,w
subwf	CNT,w
btfsc	STATUS,C
bsf		GPIO,G_LED

movf	B_set,w
subwf	CNT,w
btfsc	STATUS,C
bsf		GPIO,B_LED		;12 clock

Command_receive
;goto	COUNT_OVF

btfss	Receive,0	;Command Receive = true ?
goto	RXD_HI		;if Receive = 0 Check RXD

movlw	0x07		;R_CNT > 7 ?
subwf	R_CNT,w
btfss	STATUS,C
goto	R_set_Receive

movlw	0x0e		;R_CNT > 15 ?
subwf	R_CNT,w
btfss	STATUS,C
goto	G_set_Receive

movlw	0x17		;R_CNT > 23 ?
subwf	R_CNT,w
btfss	STATUS,C
goto	B_set_Receive

clrf	R_CNT		;other
bcf		Receive,0
nop
nop
nop
nop
nop
nop					;nop * 6

COUNT_OVF
incfsz	CNT,f		;CNT +=1, if CNT = 0 (overflow) then R,G,B = OFF
goto	DELAY

RGB_OFF
clrf	GPIO

DELAY ;CPU time = 3 * delay_CNT + 1
movlw	0x14		;delay_CNT = 20
movwf	delay_CNT
LOOP
decfsz	delay_CNT,f
goto 	LOOP		;delay = 61

goto	MAIN		;total CPU time = 100 clock

R_set_Receive
bcf		STATUS,C	;Carry = 0
btfsc	GPIO,RXD	;if RXD = 1 then Carry = 1
bsf		STATUS,C

rrf		R_set,f		;bit0 = Carry
;nop

incf	R_CNT,f
nop
nop
nop
nop
nop
nop
nop
nop					;nop * 8
goto	COUNT_OVF

G_set_Receive
bcf		STATUS,C
btfsc	GPIO,RXD
bsf		STATUS,C

rrf		G_set,1
;nop

incf	R_CNT,1
nop
nop
nop
nop					;nop * 4
goto	COUNT_OVF

B_set_Receive
bcf		STATUS,C
btfsc	GPIO,RXD
bsf		STATUS,C

rrf		B_set,1
;nop

incf	R_CNT,1
goto	COUNT_OVF

RXD_HI
btfsc	GPIO,RXD		;RXD = High?
bsf		Receive,0		;if RXD = 1, Receive = 1 
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop					;nop * 15
goto	COUNT_OVF

org	0xff
movlw	0x32

END
最終更新:2009年07月25日 21:05
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。