==ソース==
list p=16f628
#include<p16f628.inc>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF
w_temp EQU 0x70
status_temp EQU 0x71
CNT1 EQU 0x20
CNT2 EQU 0x21
O_DATA EQU 0x22
DIRECT EQU 0x22
;2行に分けて大丈夫か?*上は名前に数を与えただけ*下は本体*
ORG 0x000
goto main
ORG 0x004
movwf w_temp
movf STATUS,w
movwf status_temp
; ISR Codes
movf status_temp,w
movwf STATUS
swapf w_temp,f
swapf w_temp,w
retfie
main
bcf STATUS,RP0
bcf STATUS,RP1
clrf INTCON
clrf PORTA
movlw 0x07
movwf CMCON
bsf STATUS,RP0
bsf PCON,OSCF
clrf TRISA
clrf TRISB
bcf STATUS,RP0
clrf PORTA
clrf PORTB
main_loop
bcf STATUS,C
clrf DIRECT
movlw 0x01;
movwf O_DATA
loop_if;if
btfss DIRECT,0;set=1の時スキップ
goto sub_loop1;//bitの計算の時分かれ道は二つだけ
btfsc DIRECT,0;set=0の時スキップ//この行不要だが分かりやすさのために入れておく。
goto sub_loop2;//
sub_loop1;左から右へ//DIRECT,0=0
movf O_DATA,w;movf O_DATA,PORTBとしては駄目か?
;movf w,PORTB;下と入れ替え可能か
movwf PORTB
call DLY_100;関数呼び出し
rlf O_DATA,f
btfss STATUS,C;BiTFileregisterSkiptoSet ;**ココと真下の合わせて3行消しても平気か?
goto sub_loop1 ;**
;rlf O_DATA,f ;**
bsf DIRECT,0
bsf STATUS,DC
goto loop_if
sub_loop2;右から左へ//DIRECT,0=1
movf O_DATA,w;movf O_DATA,PORTBとしては駄目か?
;movf w,PORTB;下と入れ替え可能か
movwf PORTB
call DLY_100;関数呼び出し
rrf O_DATA,f
btfss STATUS,C;BiTFileregisterSkiptoSet ;**ココと真下の合わせて3行消しても平気か?
goto sub_loop2 ;**
;rrf O_DATA,f ;**
bcf DIRECT,0
bcf STATUS,DC
goto loop_if
;Delay Routine
DLY_100
movlw 0x64;ラベルと同じ行に書いて平気か?→平気
movwf CNT1
DLY_1
movlw 0xf0 ;0xfa ;0xf0=240 ;0xfa=250
movwf CNT2
DLY
nop
nop
decfsz CNT2,f
goto DLY
decfsz CNT1,f
goto DLY_1
return
END