;JJ1GRK PIC音デジ受信　program　v1.00　完成品
;＜＜＜無防備タイプ＞＞＞ 
;出力まで１６サイクル、次読み３２サイクルとしてある
;ＲＢ０－７が出力　７がＭＳＢ
;ＲＡ２が入力   元が負論理なので、ここでは１，０正論理！
;ＲＡ４がＰＴＴ入力　０で送信


         include 16f84.h

         .osc   hs
         .pwrt  off
         .wdt   off
         .protect off

        org   0ch

start   mov !rb,#00000000b ;Ｒｂは出力
	mov !ra,#00011111b ;Ｒａは入力


;17がカウンタ １８が回数チェック
;１９が出力（ＲB）保持、２０が入力（Ｒa）保持
;２１～２８がＤＡＴＡ保持　３１～３８が出力準備

;setup
        clrw
main
        mov 06,#10000000b     ;パワーｏｎ初期出力
        mov 31,#10000000b
        mov 32,#10000000b
        mov 33,#10000000b
        mov 34,#10000000b
        mov 35,#10000000b
        mov 36,#10000000b
        mov 37,#10000000b
        mov 38,#10000000b

;送信チェック  

wait1			;ここはフィラーの頭

	btfss 05h,4
	goto main


;10ビット待ち
        mov 17,#00101000b  ;全部で520（計524）ステップ待ち 
　　　　　　　　　　　　　　;１周１３，セットは４０
                           ;最小で474（520），最大で786（832）まち
;１待ち
one_wait
	btfss 05,2
	goto wait1   ;0なら待ちをやりなおし
	cse 17,#00011000b
	goto nwait
	mov 06,38
nwait	decf 17,1    ;待ちを一つ減らす
	csbe 17,#00  ;１７＜＝０なら次スキップ
        goto one_wait

;0待ち

waitx1   btfsc 05,2   ;0を待つ
	goto waitx1        
        btfsc 05,2   ;0を待つ
	goto waitx1        
        btfsc 05,2   ;0を待つ
	goto waitx1        
        btfsc 05,2   ;0を待つ
	goto waitx1        
	mov 06,31  ;出力１

	call wait20
	call wait24
	call wait20
	mov 38,39
	mov 19,#00101000b

;１－１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait26

;１－２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;１－３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait26

;１－４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力	
	call wait24
	call wait26

;１－５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait26

;１－６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;１－７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait26

;１－８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	

	mov 21,19  ;ＤＡ出力

;まだデータが来ます

	call wait24
	call wait24

;0待ち
waitx2
        btfsc 05,2   ;0を待つ
	goto waitx2        
       btfsc 05,2   ;0を待つ
	goto waitx2        
       btfsc 05,2   ;0を待つ
	goto waitx2        
       btfsc 05,2   ;0を待つ
	goto waitx2        
;
	call wait22
	call wait22
	call wait24
	mov 19,#00101000b
	
;2 －１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait10
        nop
	mov 06,32
        nop
	call wait12

;2 －２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;2 －３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait26

;2 －４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力	
	call wait24
	call wait26

;2 －５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait26

;2 －６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;2 －７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait26

;2 －８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	

	mov 22,19  ;ＤＡ出力

;まだデータが来ます

	call wait24
	call wait24

;0待ち

waitx3   btfsc 05,2   ;0を待つ
	goto waitx3        
       btfsc 05,2   ;0を待つ
	goto waitx3        
       btfsc 05,2   ;0を待つ
	goto waitx3        
       btfsc 05,2   ;0を待つ
	goto waitx3        
;
	call wait22
	call wait22
	call wait24
	mov 19,#00101000b
	
;3 －１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait26

;3 －２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;3 －３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait14
	mov 06,33
        call wait10
;3 －４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力
	call wait24
	call wait26

;3 －５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait26

;3 －６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;3 －７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait26

;3 －８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	

	mov 23,19  ;ＤＡ出力

;まだデータが来ます

	call wait24
	call wait24

;0待ち

waitx4   btfsc 05,2   ;0を待つ
	goto waitx4        
       btfsc 05,2   ;0を待つ
	goto waitx4        
       btfsc 05,2   ;0を待つ
	goto waitx4        
       btfsc 05,2   ;0を待つ
	goto waitx4        
;
	call wait22
	call wait22
	call wait24
	mov 19,#00101000b
	
;4 －１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait26

;4 －２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;4 －３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait26

;4 －４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力
	call wait24
	call wait26

;4 －５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait12
	nop
	mov 06,34
	nop
	call wait10

;4 －６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;4 －７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait26

;4 －８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	

	mov 24,19  ;ＤＡ出力

;まだデータが来ます

	call wait24
	call wait24

;0待ち

waitx5   btfsc 05,2   ;0を待つ
	goto waitx5        
       btfsc 05,2   ;0を待つ
	goto waitx5        
       btfsc 05,2   ;0を待つ
	goto waitx5        
       btfsc 05,2   ;0を待つ
	goto waitx5        
;
	call wait24
	call wait22
	call wait24
	mov 19,#00101000b
	
;5 －１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait26

;5 －２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;5 －３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait26

;5 －４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力
	call wait24
	call wait26

;5 －５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait26

;5 －６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;5 －７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait10
	nop
	mov 06,35
	nop
        call wait12

;5 －８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	

	mov 25,19  ;ＤＡ出力

;まだデータが来ます

	call wait24
	call wait24

;0待ち

waitx6   btfsc 05,2   ;0を待つ
	goto waitx6        
       btfsc 05,2   ;0を待つ
	goto waitx6        
       btfsc 05,2   ;0を待つ
	goto waitx6        
       btfsc 05,2   ;0を待つ
	goto waitx6        
;
	call wait22
	call wait22
	call wait24
	mov 19,#00101000b
	
;6 －１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait26

;6 －２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;6 －３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait26

;6 －４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力
	call wait24
	call wait26

;6 －５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait26

;6 －６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;6 －７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait26

;6 －８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	

	mov 26,19  ;ＤＡ出力

;まだデータが来ます

	call wait24
	call wait24

;0待ち

waitx7   btfsc 05,2   ;0を待つ
	goto waitx7        
       btfsc 05,2   ;0を待つ
	goto waitx7        
       btfsc 05,2   ;0を待つ
	goto waitx7        
       btfsc 05,2   ;0を待つ
	goto waitx7        
;
	call wait22
	call wait22
	call wait12
	mov 06,36
	call wait10
	mov 19,#00101000b
	
;7 －１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait26

;7 －２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;7 －３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait26

;7 －４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力
	call wait24
	call wait26

;7 －５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait26

;7 －６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;7 －７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait26

;7 －８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	
	mov 27,19  ;ＤＡ出力

;まだデータが来ます

	call wait24
	call wait24

;0待ち

waitx8   btfsc 05,2   ;0を待つ
	goto waitx8        
       btfsc 05,2   ;0を待つ
	goto waitx8        
       btfsc 05,2   ;0を待つ
	goto waitx8        
       btfsc 05,2   ;0を待つ
	goto waitx8        
;
	call wait22
	call wait22
	call wait24
	mov 19,#00101000b
	
;8 －１番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,0   ;０ビットに１を入力	
	call wait24
	call wait12
	mov 06,37
	call wait12

;8 －２番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,1   ;1ビットに１を入力	
	call wait24
	call wait26

;8 －３番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,2   ;２ビットに１を入力	
	call wait24
	call wait26

;8 －４番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,3   ;3ビットに0を入力
	call wait24
	call wait26

;8 －５番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,4   ;4ビットに１を入力	
	call wait24
	call wait26

;8 －６番目反転データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bcf 19,5   ;5ビットに0を入力
	call wait24
	call wait26

;8 －７番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,6   ;6ビットに１を入力	
	call wait24
	call wait26

;8 －８番目データin

	btfsc 05,2 ;入力をチェック0なら飛ばし
	bsf 19,7   ;7ビットに１を入力	

	mov 28,19  ;ＤＡ出力


;これで８バイト終わりました

	mov 31,21
	mov 32,22
	mov 33,23
	mov 34,24
	mov 35,25
	mov 36,26
	mov 37,27
	mov 39,28

shori	call wait20
        call wait12	;32サイクル待ち(stop中央）
	call wait24       ;stopを超える
	goto wait1	;ギャップフィラー待ち


;タイミング処理


wait26  nop
	nop
wait24	nop
	nop
wait22	nop
        nop
wait20  nop
	nop
wait18	nop
	nop
wait16	nop
	nop
wait14   nop
wait13	nop
wait12  nop
	nop
wait10	nop	;gotoとriturnで４つ
wait9	nop	;のこりがnop
wait8	nop
	nop
wait6	nop
	nop
	return
