楽天市場
[無料でホームページを作成] [通報・削除依頼]

PIC10F322 二相発振器

PIC10F322を用いた2相(SIN,COS)発振器もどきを作ってみました。

CLCでリングオシレーター(約80MHz)を構成し、

NCOでパルス周波数(PF) モードを選択、

CWGはCWG1Bのみ使用しました。

発振出力はRA1(CWG1B)とRA2(NCO1)から得られます。

NCO1INCの取りえる値が離散的なので、全ての周波数できれいな波形が

得られるわけではありませんが、参考までに


img_20121210-235751.jpg







<ソースプログラム>

LIST P=PIC10F322
#INCLUDE <P10F322.inc>
__CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _LVP_OFF & _LPBOR_OFF & _BORV_HI & _WRT_OFF
;

#DEFINE W_TBL ;ブートローダー本体を一緒にコンパイルする
;注意)W_TBLを定義するとTinybldで正しく書き込めません。
;PICKITなどを用いてブートローダー本体を書き込むときに定義する。
;
#DEFINE TX 0 ;RS-232C データ出力用ポート、このテンプレートでは変更できません。
#DEFINE RX 3 ;RS-232C データ入力用ポート、このテンプレートでは変更できません。
#DEFINE Direct ;RS-232C直結方式、コメントアウトで反転方式

;***************************************************************************************
;*
;* 注意(重要)
;*
;* 本デモプログラムはパソコンと接続しなくても動作しますが、
;* パソコンからコマンドを送出することで、発振周波数を変更することができます。
;*
;* このソースで、(W_TBLを定義して)コンパイルすると作動するプログラムが作れます。
;*
;* 通信にTX=RA0,RX=RA3を使用します。発振出力はRA1(CWG1B)とRA2(NCO1)です。
;*
;* ご使用にはTREATERMやハイパーターミナルなどのターミナルソフトが必要です。
;* 通信条件: ボーレート9600、8ビット、1ストップビット、ノーパリティ
;*
;*
;* コマンドは1桁の英小文字とHEX数値で00からffが入力可能です。(a~fの文字は小文字)
;*
;* 大文字HEX数値やHEX数値以外の文字を入力しても無視されます。
;*
;* 発振中にpあるいはmコマンドを入力すると、発振器の周波数を変更し、再発振します。
;*
;* rまたはwコマンドの入力は発振に影響を及ぼしません。
;*
;* <コマンド入力例>
;*
;* (1) r30 アドレス$30のレジスタ値を参照します。(RAMは$40以上を指定)
;*
;* 応答は r30 XX (XXはアドレス$30のレジスタ値)
;*
;* (2) wff 直前にrコマンドで参照したアドレスのレジスタ値を変更します。
;* (1)(2)のコマンドを続けて実行するとアドレス$30のレジスタに
;* データ$ffが書き込まれます。
;*
;* 応答は wff OK
;*
;* (3)p(m)05 NCOの分周値をHEX数値分増(減)させ、再発振します。
;* 分周値のデフォルトは64($0040)です。
;*
;* 応答は p05 XXXX (XXXXは現在の分周回数)
;*
;***************************************************************************************

;
; ********************************************************************
; Define General Purpose Registers (64 bytes maximum ; 40h-7fh)
; Bank 0 Only
; ********************************************************************
;
;変数

cn EQU 0x40 ;ワークレジスタ
rs EQU 0x41 ;データ受信フラグ(LSB=0:受信 LSB=1:未受信)
rxd EQU 0x42 ;送受信データ wレジスタと同じ値が入る
ASCH EQU 0x43 ;ascii code(H)
ASCL EQU 0x44 ;ascii code(L)
TEMP EQU 0x45 ;ワークレジスタ
DIVH EQU 0x46 ;分周値(H)
DIVL EQU 0x47 ;分周値(L)
;割り算で使用
nratorH EQU 0x48 ;
nratorM EQU 0x49 ;
nratorL EQU 0x4A ;
denomH EQU 0x4B ;
denomM EQU 0x4C ;
denomL EQU 0x4D ;
remainH EQU 0x4E ;
remainM EQU 0x4F ;
remainL EQU 0x50 ;
shiftH EQU 0x51 ;
shiftM EQU 0x52 ;
shiftL EQU 0x53 ;
BCount EQU 0x54 ;

;ブートローダー中の予約変数、サブルーチン領域

;bwait equ 0x01ED ;100usのウエイト(CALL文込み)
;bwait2 equ 0x01EE ; 50usのウエイト(CALL文込み)
;rs1tx equ 0x01DE ;1文字送信サブルーチン
;rs1rx equ 0x01C8 ;1文字受信サブルーチン
;rs1rxc equ 0x01DA ;1文字受信サブルーチン(データ到着を待たない )
;r1rx11 equ rs1rx+2 ;1文字受信サブルーチン(スタートビット検出済み)

;cn equ NCO1ACCU ;ワークレジスタ
;rs equ NCO1ACCH ;データ受信フラグ(LSB=0:受信 LSB=1:未受信)
;rxd equ NCO1ACCL ;送受信データ wレジスタと同じ値が入る

;btime equ 53h ;9600bps 10MHz 時のウエイトタイム
btime equ 42h ;9600bps 8MHz 時のウエイトタイム
;btime equ 1fh ;9600bps 4MHz 時のウエイトタイム
;btime equ 28h ;19200bps 10MHz 時のウエイトタイム
;btime equ 0eh ;19200bps 4MHz 時のウエイトタイム

;
;********************************************************************************
;* *
;* 注意(重要) *
;* *
;* Tinybldwinで書き込むとき、コンパイルしたHEXファイルの内容と *
;* 異なるコードで書き込まれます。 *
;* *
;* 異なるコードで書き込まれる領域 *
;* *
;* Ox0000~Ox0002の3ワード *
;* *
;* この領域はブートローダーへのジャンプコードに置換されます。 *
;* 元のコードはブートローダーの出口Ox017c~Ox17eの3ワードに移動します。 *
;* *
;* Ox017c~Ox17fの4ワード *
;* *
;* Ox17fにはOx0003と同じコードが書き込まれます *
;* 正常な動作を行うためには、の領域にユーザープログラムへのジャンプを *
;* 記述する必要があり、すなわちOx0000~Ox0003の4ワードのどこかに *
;* ユーザープログラムへのジャンプを記述する必要があります。 *
;* *
;********************************************************************************
;
;/////////////////////////////////////////////////////////////////
;
; プログラムコード
;
;/////////////////////////////////////////////////////////////////
;
ORG 0x0000

#ifdef W_TBL
movlw 0x01 ;TeraTermでも書き込むため
movwf PCLATH ;この4行は変更不可
goto TINYBLD ;
goto INIT ;ブートローダーの出口処理
#else
nop ;0x0000以下4行は初期化用のレジスタ処理や
nop ;ビット操作などに使用することができます。
nop ;(このテンプレートではnopで埋めています。)
goto INIT ;4行中のどこかに。ユーザープログラムへの
;ジャンプを記述する必要があります。
#endif

; 以下にユーザープログラムを記述する。(0x0004~0x017B)
;
ORG 0x0004 ;(割り込みベクター)
INIT ;初期化
; CLRF PORTA ;
; CLRF LATA ;
; CLRF ANSELA ;全てデジタルポートに設定(ブートローダーで設定済み)
MOVLW B'11111000' ;RA0~RA2を出力に設定
MOVWF TRISA ;PA0:TX RA1:CWG1B RA2:NCO1 PA3:RX
CALL bwait ;WAIT 100us
;
SET_DIV0 ;分周値セット
movlw 0x00 ;DIVH・DIVL=64 初期値
movwf DIVH ;
movlw 0x40 ;
movwf DIVL ;

START
MOVLW 0x10 ;nratorH:nratorM:nratorL=0x100000
MOVWF nratorH ;
CLRF nratorM ;
CLRF nratorL ;

CLRF denomH ;denomH:denomM:denomL=DIVH:DIVL
MOVF DIVH,W ;
MOVWF denomM ;
MOVF DIVL,W ;
MOVWF denomL ;

CALL divizn ;nratorH:nratorM:nratorL=nratorH:nratorM:nratorL/denomH:denomM:denomL

;CLC設定
CLRF CLC1GLS0 ;リングオシレーターを構成
movlw H'08'
movwf CLC1GLS1
CLRF CLC1GLS2
CLRF CLC1GLS3
CLRF CLC1SEL0
CLRF CLC1SEL1
movlw H'81'
movwf CLC1POL
movlw H'80'
movwf CLC1CON

;分周設定 ;パルス周波数(PF) モード
clrf NCO1ACCL ;Highレベルがλ/4となるよう
clrf NCO1ACCH ;NCO1INCを算出
clrf NCO1ACCU ;
movf nratorM,W
movwf NCO1INCH
movf nratorL,W
movwf NCO1INCL

;N1EN=1,N1OE=1,N1POL=0,N1PFM=1
movlw b'11000001'
movwf NCO1CON

;NCO1INC設定
MOVF DIVH,F
BTFSC STATUS,Z ;DIVH=/0?
GOTO LMT08 ;DIVH=0

MOVLW d'128'
SUBWF DIVL,W ;W=DIVL-W
BTFSS STATUS,C ;W>=128?
GOTO SET40 ;NCO1CLK=64
MOVLW b'11100011' ;NCO1CLK=128,N1CKS=11
GOTO SET00

LMT08
MOVLW d'24'
SUBWF DIVL,W ;W=DIVL-W
BTFSS STATUS,C ;W>=24?
GOTO SET04 ;NCO1CLK=4

LMT16
MOVLW d'48'
SUBWF DIVL,W ;W=DIVL-W
BTFSS STATUS,C ;W>=48?
GOTO SET08 ;NCO1CLK=16

LMT32
MOVLW d'96'
SUBWF DIVL,W ;W=DIVL-W
BTFSS STATUS,C ;W>=96?
GOTO SET10 ;NCO1CLK=32

LMT64
MOVLW d'192'
SUBWF DIVL,W ;W=DIVL-W
BTFSS STATUS,C ;W>=192?
GOTO SET20 ;NCO1CLK=64

;N1CKS=11

SET40
MOVLW b'11000011'
GOTO SET00
SET20
MOVLW b'10100011'
GOTO SET00
SET10
MOVLW b'10000011'
GOTO SET00
SET08
MOVLW b'01100011'
GOTO SET00
SET04
MOVLW b'01000011'
SET00
MOVWF NCO1CLK

;相補波形設定 ;CWG1Bのみ使用
;TRIS=input ;CWG1Bの位相遅れがλ/2となるよう
bsf TRISA,1 ;CWG1DBFを算出

;clr G1EN
bcf CWG1CON0,G1EN

;Set CWG1DBF
MOVF DIVH,F
BTFSS STATUS,Z ;DIVH=0?
GOTO SET_X ;DIVH>0

MOVLW d'25'
SUBWF DIVL,W ;W=DIVL-W
BTFSC STATUS,C ;W<25?
GOTO SET_X ;W>=25
MOVLW 0x02 ;W<25
GOTO SET_00 ;CWG1DBF=2
SET_X
MOVF DIVL,W ;BARGB=DIV
MOVWF denomL ;
MOVF DIVH,W ;
MOVWF denomM ;

MOVLW 0x04 ;BARGB=DIV-4
SUBWF denomL,F ;
BTFSS STATUS,C ;
DECF denomM,F ;

CLRF nratorH ;AARGB=DIV-4
MOVF denomM,W ;
MOVWF nratorM ;
MOVF denomL,W ;
MOVWF nratorL ;

CLRF denomH ;BARGB=10
CLRF denomM ;
MOVLW 0x0A ;
MOVWF denomL ;

CALL divizn ;nratorH:nratorM:nratorL=nratorH:nratorM:nratorL/denomM:denomL

MOVF nratorL,W ;
SET_00
MOVWF CWG1DBF ;

;G1ASDCLC1=0,GxASDFLT=0

bcf CWG1CON2,1
bcf CWG1CON2,0
clrf CWG1CON1

;set G1ASE=1,clr G1ARSEN
bsf CWG1CON2,G1ASE
bcf CWG1CON2,G1ARSEN

;G1IS=10
bsf CWG1CON1,1

;G1CS0=1,G1POLB=1,G1POLB=0,G1OEB=1,G1OEA=0,set G1EN
bsf CWG1CON0,G1CS0
bcf CWG1CON0,G1POLB
bcf CWG1CON0,G1POLA
bsf CWG1CON0,G1OEB
bcf CWG1CON0,G1OEA
bsf CWG1CON0,G1EN

;TRIS=output
bcf TRISA,1

;clr G1ASE
bcf CWG1CON2,G1ASE

CALL PUTMSG ;開始メッセージ出力

LPLP ;コマンド検出ループ
CALL CRLF ;改行
CALL rs1rx ;1文字目受信
LPLPC
MOVLW 'r' ;
SUBWF rxd,W ;W=rxd-W
BTFSC STATUS,Z ;W=/"r"?
GOTO RDREG ;W="r"

MOVLW 'w' ;
SUBWF rxd,W ;W=rxd-W
BTFSC STATUS,Z ;W=/"w"?
GOTO WRREG ;W="w"

MOVLW 'p' ;
SUBWF rxd,W ;W=rxd-W
BTFSC STATUS,Z ;W=/"p"?
GOTO PREG ;W="p"

MOVLW 'm' ;
SUBWF rxd,W ;W=rxd-W
BTFSS STATUS,Z ;W="m"?
GOTO LPLP ;W=/"m"なら再受信

MREG ;分周値を減らして再起動、DIVの値を表示 mXX( YYYY)
MOVF rxd,W ;エコーバック
CALL rs1tx ;
CALL GET2 ;2文字受信、エコーバック
MOVF TEMP,W ;DIV再計算
SUBWF DIVL,F ;
BTFSS STATUS,C ;
SUBWF DIVL,F ;
GOTO CWG_OUT ;

PREG ;分周値を増やして再起動、DIVの値を表示 pXX( YYYY)
MOVF rxd,W ;エコーバック
CALL rs1tx ;
CALL GET2 ;2文字受信、エコーバック
MOVF TEMP,W ;DIV再計算
ADDWF DIVL,F ;
BTFSC STATUS,C ;
INCF DIVH,F ;
CWG_OUT ;
CALL SPC ;空白
MOVF DIVH,W ;
CALL B_ASCI ;ASCII変換,データのHEX値を出力
MOVF DIVL,W ;
CALL B_ASCI ;ASCII変換,データのHEX値を出力
GOTO START ;

WRREG ;rコマンドで指定されたレジスタに値を書き込む wXX( OK)
MOVF rxd,W ;エコーバック
CALL rs1tx ;
CALL GET2 ;2文字受信、エコーバック
MOVF TEMP,W ;HEX値を書き込む
MOVWF INDF ;
CALL SPC ;空白
MOVLW 'O' ;O
CALL rs1tx ;
MOVLW 'K' ;K
CALL rs1tx ;
GOTO LPLP ;

RDREG ;指定したレジスタの値を読み出す rXX( YY)
MOVF rxd,W ;エコーバック
CALL rs1tx ;
CALL GET2 ;2文字受信、エコーバック
MOVF TEMP,W ;HEX値を書き込む
MOVWF FSR ;FSRセット
CALL SPC ;空白
MOVF INDF,W ;データ読み込み
CALL B_ASCI ;ASCII変換,データのHEX値を出力
GOTO LPLP ;

;///////////////////////////////////////////////////////////////////////////////
; サブルーチン
;///////////////////////////////////////////////////////////////////////////////
; ********************************************************************
;
; RS-232C 1文字受信
;
; 受信文字は w に返る
;
; rs1rx :1文字受信するまで戻らない
; rs1rxc :受信成功のとき、rsのLSB=0 w有効
; :受信失敗のとき、rsのLSB=1 w無効

; ********************************************************************
rs1rx
#ifdef Direct
btfss PORTA,RX
#else
btfsc PORTA,RX
#endif
goto rs1rx ;STARTビットを検出するまで待つ
r1rx11
call bwait2 ;1/2ビット分待つ
movlw 8 ;受信ビット数
movwf cn
; nop
r1rx12
call bwait ;1ビット分待つ
; nop

#ifdef Direct
btfsc PORTA,RX
#else
btfss PORTA,RX
#endif

bcf STATUS,C ;

#ifdef Direct
btfss PORTA,RX
#else
btfsc PORTA,RX
#endif

bsf STATUS,C ;
rrf rxd,f
decfsz cn,f ;8ビット受信したか?
goto r1rx12 ;cn=0になるまでループ
call bwait2 ;1/2ビット分待つ
r1rx15
#ifdef Direct
btfsc PORTA,RX
#else
btfss PORTA,RX
#endif
goto r1rx15 ;ストップビットを待つ
movf rxd,w ;return in w
return

rs1rxc
bsf rs,0 ;rsのLSBをセット
;スタートビットをチェック
#ifdef Direct
btfss PORTA,RX
#else
btfsc PORTA,RX
#endif

return ;スタートビット未検出
goto r1rx11 ;スタートビット検出 飛び先でrsはクリアされる

; ********************************************************************
;
; RS-232C 1文字送信
;
; 送信文字を w にセットして呼ぶ
;
; ********************************************************************
rs1tx
movwf rxd ;rxd=W

#ifdef Direct
bsf PORTA,TX
#else
bcf PORTA,TX
#endif
call bwait ;スタートビット 1ビット分待つ
movlw 8 ;送信ビット数
movwf cn
; nop
r1tx11
rrf rxd,f
; nop

#ifdef Direct
btfsc STATUS,C
#else
btfss STATUS,C
#endif

bcf PORTA,TX ;

#ifdef Direct
btfss STATUS,C
#else
btfsc STATUS,C
#endif

bsf PORTA,TX
call bwait ;1ビットのウエイト
decfsz cn,f ;8ビット送信したか?
goto r1tx11 ;
call ret00 ;6サイクルウエイト (call+goto+return)

#ifdef Direct
BCF PORTA,TX
#else
BSF PORTA,TX
#endif

bwait ;1ビットのウエイトを作る
call bwait2 ;1 us total:1+49+49=99 us

bwait2 ;1/2ビットのウエイトを作る
movlw btime/2-2 ;0.5 us
movwf rs ;0.5 us
decfsz rs,f ;0.5 us
goto $-1 ;1 us
ret00
goto $+1 ;1 us
return ;1 us total:0.5+0.5+(0.5+1)*(33-2)-0.5+1+1=49 us

; ********************************************************************
; 24bit/24bit
; ********************************************************************
; ------------------------------------------
; SUBROUTINE - 24 BIT DIVISION
; numerator: nratorH nratorM nratorL
; denominator: denomH denomM denomL
;
; result: nratorH nratorM nratorL
; remainder: remainH remainM remainL
;
divizn
movlw .24
movwf BCount
movf nratorH,w
movwf shiftH
movf nratorM,w
movwf shiftM
movf nratorL,w
movwf shiftL
clrf nratorH
clrf nratorM
clrf nratorL
;
clrf remainH
clrf remainM
clrf remainL
dloop
bcf STATUS,C
rlf shiftL,f
rlf shiftM,f
rlf shiftH,f
rlf remainL,f
rlf remainM,f
rlf remainH,f
movf denomH,w
subwf remainH,w
btfss STATUS,Z
goto nochk
;
movf denomM,w
subwf remainM,w
btfss STATUS,Z
goto nochk
;
movf denomL,w
subwf remainL,w
nochk btfss STATUS,C
goto nogo
;
movf denomL,w
subwf remainL,f
btfss STATUS,C
decf remainM,f
movf remainM,w
xorlw 0xff
btfsc STATUS,Z
decf remainH,f
movf denomM,w
subwf remainM,f
btfss STATUS,C
decf remainH,f
movf denomH,w
subwf remainH,f
bsf STATUS,C
nogo:
rlf nratorL,f
rlf nratorM,f
rlf nratorH,f
decfsz BCount,f
goto dloop
Return
;
; ********************************************************************
PUTMSG ;コマンド入力メッセージ
CALL CRLF ;改行
MOVLW 0x93 ;入
CALL rs1tx ;
MOVLW 0xFC ;
CALL rs1tx ;
MOVLW 0x97 ;力
CALL rs1tx ;
MOVLW 0xCD ;
CALL rs1tx ;
MOVLW " " ;
CALL rs1tx ;
MOVLW "(" ;(
CALL rs1tx ;
MOVLW "r" ;r
CALL rs1tx ;
MOVLW "/" ;/
CALL rs1tx ;
MOVLW "w" ;w
CALL rs1tx ;
MOVLW "/" ;/
CALL rs1tx ;
MOVLW "p" ;p
CALL rs1tx ;
MOVLW "/" ;/
CALL rs1tx ;
MOVLW "m" ;m
CALL rs1tx ;
MOVLW "h" ;h
CALL rs1tx ;
MOVLW "h" ;h
CALL rs1tx ;
MOVLW ")" ;)
GOTO rs1tx ;

CRLF ;改行
MOVLW 0x0D ;
CALL rs1tx ;
MOVLW 0x0A ;
GOTO rs1tx ;

CHKHEX ;受信データがHEX値か否かをチェック
;HEX値のときWレジスタに数値をセットして帰る
;HEX値でないときrxdのビット7をセットして帰る
MOVLW "f"+1 ;W="g"
SUBWF rxd,W ;W=rxd-W
BTFSC STATUS,C ;W<"g"?
GOTO NOTHEX ;W>="g"
;
MOVLW "a" ;W=
SUBWF rxd,W ;W=rxd-W [0x41_0x46] -> [0_6]
BTFSC STATUS,C ;W<0?
GOTO A_F ;W>=0
;
MOVLW "9"+1 ;W=":"
SUBWF rxd,W ;W=rxd-W
BTFSC STATUS,C ;W<":"?
GOTO NOTHEX ;W>=":"
;
MOVLW "0" ;W=0x30
SUBWF rxd,W ;W=rxd-W [0x30_0x39] -> [0_9]
BTFSS STATUS,C ;W>=0?
GOTO NOTHEX ;W<0
RETURN ;Wレジスタに値をセットして帰る
A_F ADDLW 0x0A ;W=[0_6] -> [10_15]
RETURN ;Wレジスタに値をセットして帰る
NOTHEX BSF rxd,7 ;HEX値でないとき
RETURN ;rxdのビット7をセットして帰る

BIN_HEX ;Wレジスタの値を2桁のASCIIコードに変換
;結果をASCH,ASCLに書き込む
MOVWF TEMP ;TEMP=W
ANDLW 0x0f ;
ADDLW 0x30 ;
MOVWF ASCL ;
MOVLW "9"+1 ;W=":"
SUBWF ASCL,W ;W=ASCL-W
MOVLW 0x07 ;
BTFSC STATUS,C ;W<":"?
ADDWF ASCL,F ;ASCL=ASCL+7

SWAPF TEMP,W ;
ANDLW 0x0f ;
ADDLW 0x30 ;
MOVWF ASCH ;
MOVLW "9"+1 ;W=":"
SUBWF ASCH,W ;W=ASCH-W
MOVLW 0x07 ;
BTFSC STATUS,C ;W<":"?
ADDWF ASCH,F ;ASCH=ASCH+7
RETURN ;

GET2 ;2文字受信してHEX数値ならエコーバック
CALL rs1rx ;1文字目を受信
CALL CHKHEX ;受信データがHEX値か否かをチェック
BTFSC rxd,7 ;HEX値か?
GOTO $-3 ;受信データを破棄して1文字目を再受信
MOVWF TEMP ;TEMP=W
CALL PUTHEX ;エコーバック
CALL rs1rx ;2文字目を受信
CALL CHKHEX ;受信データがHEX値か否かをチェック
BTFSC rxd,7 ;HEX値か?
GOTO $-3 ;受信データを破棄して2文字目を再受信
SWAPF TEMP,F ;TEMP=16*TEMP
ADDWF TEMP,F ;TEMP=TEMP+W
PUTHEX
MOVF rxd,W ;エコーバック
GOTO rs1tx ;

SPC MOVLW ' ' ;空白
GOTO rs1tx ;

B_ASCI CALL BIN_HEX ;ASCII変換
MOVF ASCH,W ;データのHEX値を出力
CALL rs1tx ;
MOVF ASCL,W ;データのHEX値を出力
GOTO rs1tx ;

;
;///////////////////////////////////////////////////////////////////////////////
;
; Ox017Cはブートローダーの出口、
; ここにコードを記述しても、ブートローダーで書き込むときに上書きされます。
;
ORG 0x017C

#ifdef W_TBL
nop ;Tinybldwinを用いた書き込みを
nop ;行わない場合、
nop ;ユーザープログラムが記述されていない
goto INIT ;場合を考慮し、再びブートローダーにジャンプ
;ユーザープログラムが記述されているときは
;ジャンプ先を変更してください。
#endif
;
;///////////////////////////////////////////////////////////////////////////////

;///////////////////////////////////////////////////////////////////////////////
;
; ブートローダー本体
; [クロック8MHz(内部)、ボーレート9600、8ビット、1ストップビット、ノーパリティ]
;
; 以下のブートローダーのデータは TX=PORTA,0 RX=PORTA,3 とした場合のものです。
; TXおよびRXのポート割り付けを変更した場合にはブートローダーをコンパイルしなおす
; 必要があります。
;
; 詳細は以下のページをごらんください。
;  PIC10F322用Tinybld   http://www3.hp-ez.com/hp/bequest333/page8
; 続PIC10F322用Tinybld http://www3.hp-ez.com/hp/bequest333/page10
;
;///////////////////////////////////////////////////////////////////////////////
;
ORG 0x0180
TINYBLD

#ifdef W_TBL
#ifdef Direct

DW 0x0185,0x0187,0x0188,0x1006,0x21B6,0x3CC1,0x1D03,0x29C5
DW 0x3039,0x21DE,0x304B,0x21DE,0x1324,0x12A4,0x0191,0x21B6
DW 0x00A1,0x21B6,0x00A0,0x21B6,0x0098,0x0095,0x3040,0x0084
DW 0x21B6,0x0080,0x0A84,0x0B95,0x2998,0x21B6,0x0891,0x1D03
DW 0x29B3,0x3040,0x0084,0x0800,0x0A84,0x00A2,0x0800,0x0A84
DW 0x00A3,0x0820,0x390F,0x1903,0x21F4,0x21F5,0x0AA0,0x0398
DW 0x0B98,0x29A3,0x298A,0x304E,0x21DE,0x298E,0x3005,0x00A9
DW 0x01A8,0x01A7,0x1D85,0x29BF,0x21CA,0x0791,0x0008,0x0BA7
DW 0x29BA,0x0BA8,0x29B9,0x0BA9,0x29B8,0x018A,0x01A7,0x2803
DW 0x1D85,0x29C8,0x21EE,0x3008,0x00A9,0x21ED,0x1985,0x1003
DW 0x1D85,0x1403,0x0CA7,0x0BA9,0x29CD,0x21EE,0x1985,0x29D6
DW 0x0827,0x0008,0x1428,0x1D85,0x0008,0x29CA,0x00A7,0x1405
DW 0x21ED,0x3008,0x00A9,0x0CA7,0x1803,0x1005,0x1C03,0x1405
DW 0x21ED,0x0BA9,0x29E3,0x21F2,0x1005,0x21EE,0x301F,0x00A8
DW 0x0BA8,0x29F0,0x29F3,0x0008,0x1624,0x1524,0x3055,0x00A5
DW 0x30AA,0x00A5,0x14A4,0x0000,0x0000,0x1224,0x1124,0x0008

#else

DW 0x0185,0x0187,0x0188,0x1006,0x21B6,0x3CC1,0x1D03,0x29C5
DW 0x3039,0x21DE,0x304B,0x21DE,0x1324,0x12A4,0x0191,0x21B6
DW 0x00A1,0x21B6,0x00A0,0x21B6,0x0098,0x0095,0x3040,0x0084
DW 0x21B6,0x0080,0x0A84,0x0B95,0x2998,0x21B6,0x0891,0x1D03
DW 0x29B3,0x3040,0x0084,0x0800,0x0A84,0x00A2,0x0800,0x0A84
DW 0x00A3,0x0820,0x390F,0x1903,0x21F4,0x21F5,0x0AA0,0x0398
DW 0x0B98,0x29A3,0x298A,0x304E,0x21DE,0x298E,0x3005,0x00A9
DW 0x01A8,0x01A7,0x1985,0x29BF,0x21CA,0x0791,0x0008,0x0BA7
DW 0x29BA,0x0BA8,0x29B9,0x0BA9,0x29B8,0x018A,0x01A7,0x2803
DW 0x1985,0x29C8,0x21EE,0x3008,0x00A9,0x21ED,0x1D85,0x1003
DW 0x1985,0x1403,0x0CA7,0x0BA9,0x29CD,0x21EE,0x1D85,0x29D6
DW 0x0827,0x0008,0x1428,0x1985,0x0008,0x29CA,0x00A7,0x1005
DW 0x21ED,0x3008,0x00A9,0x0CA7,0x1C03,0x1005,0x1803,0x1405
DW 0x21ED,0x0BA9,0x29E3,0x21F2,0x1405,0x21EE,0x301F,0x00A8
DW 0x0BA8,0x29F0,0x29F3,0x0008,0x1624,0x1524,0x3055,0x00A5
DW 0x30AA,0x00A5,0x14A4,0x0000,0x0000,0x1224,0x1124,0x0008

#endif
#endif
;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
END




<HEXファイル>



:020000040000FA
:1000000001308A0080290428F8308600DA20003088
:10001000C6004030C7001030C800C901CA01CB017A
:100020004608CC004708CD00E120B5010830B600F5
:10003000B701B801B201B3018130B4008030B10022
:10004000A701A801A9014908AB004A08AA00C130CC
:10005000AD00C6080319322880304702031C42282D
:10006000E3304B2818304702031C4A28303047023F
:10007000031C482860304702031C4628C030470252
:10008000031C4428C3304B28A3304B2883304B2813
:1000900063304B284330AE008614B913C608031DE5
:1000A0005728193047020318572802306A28470892
:1000B000CD004608CC000430CD02031CCC03C8019F
:1000C0004C08C9004D08CA00CB01CC010A30CD0054
:1000D000E1204A08BD00BB103B10BA01BB173B131F
:1000E000BA1439143912B9113917B912B91786105F
:1000F000BB1317213821B520723042020319AC28F6
:10010000773042020319A128703042020319942863
:100110006D304202031D7A284208CB206421450835
:10012000C702031CC7029B284208CB206421450854
:10013000C7070318C60A72214608742147087421AC
:100140000B284208CB2064214508800072214F30E3
:10015000CB204B30CB207A284208CB2064214508A5
:1001600084007221000874217A28851DB528DB20BF
:100170000830C000DA2085190310851D0314C20C55
:10018000C00BBA28DB208519C32842080800411497
:10019000851D0800B728C2000514DA200830C00009
:1001A000C20C03180510031C0514DA20C00BD0285C
:1001B000DF200510DB201F30C100C10BDD28E02847
:1001C00008001830D4004808D1004908D2004A0875
:1001D000D300C801C901CA01CE01CF01D00103106B
:1001E000D30DD20DD10DD00DCF0DCE0D4B084E023B
:1001F000031D00294C084F02031D00294D08500221
:10020000031C11294D08D002031CCF034F08FF3AED
:100210000319CE034C08CF02031CCE034B08CE02B9
:100220000314CA0DC90DC80DD40BEF2808003821DE
:100230009330CB20FC30CB209730CB20CD30CB205F
:100240002030CB202830CB207230CB202F30CB2059
:100250007730CB202F30CB207030CB202F30CB20ED
:100260006D30CB206830CB206830CB202930CB28B4
:100270000D30CB200A30CB286730420203184F29BB
:100280006130420203184D293A30420203184F29C7
:1002900030304202031C4F2908000A3E0800C217F2
:1002A0000800C5000F39303EC4003A304402073020
:1002B0000318C407450E0F39303EC3003A304302DD
:1002C00007300318C3070800B5203C21C21B64296E
:1002D000C5007021B5203C21C21B6A29C50EC50787
:1002E0004208CB282030CB2851214308CB2044089A
:0202F000CB2819
:0802F8000000000000000428D2
:100300008501870188010610B621C13C031DC5295E
:100310003930DE214B30DE212413A4129101B621A5
:10032000A100B621A000B6219800950040308400BD
:10033000B6218000840A950B9829B6219108031DE7
:10034000B329403084000008840AA2000008840A0F
:10035000A30020080F390319F421F521A00A9803FE
:10036000980BA3298A294E30DE218E290530A90059
:10037000A801A701851DBF29CA2191070800A70B65
:10038000BA29A80BB929A90BB8298A01A701032802
:10039000851DC829EE210830A900ED21851903101B
:1003A000851D0314A70CA90BCD29EE218519D6298B
:1003B000270808002814851D0800CA29A70005146D
:1003C000ED210830A900A70C03180510031C051423
:1003D000ED21A90BE329F2210510EE211F30A80021
:1003E000A80BF029F3290800241624155530A50080
:1003F000AA30A500A4140000000024122411080053
:02400E008038F8
:00000001FF

















































.