;************************************************** ;*** ラージフォント  00/12/20 *** ;************************************************** include f:\PICPROG\MPASM\p16f84.inc ; zdvee equ h'0c' ;わり算用E 結果L zdvdd equ zdvee+1 ; 〃  D 結果H zdvcc equ zdvee+2 ; 〃  C zdvbb equ zdvee+3 ; 〃  B 最上位 ; loop equ zdvee+4 ;loop回数用RAM ; countl equ zdvee+5 ;カウンタL counth equ zdvee+6 ;カウンタH ; hikul equ zdvee+7 ;2バイト引く数L hikuh equ zdvee+8 ;       H ; keipopl equ zdvee+9 ;計算退避用 keipoph equ zdvee+d'10' ; ; keta1 equ zdvee+d'11' ;最下位桁 keta2 equ zdvee+d'12' ; keta3 equ zdvee+d'13' ; keta4 equ zdvee+d'14' ;最上位桁 ; rpml equ zdvee+d'15' ;回転数バイナリL rpmh equ zdvee+d'16' ;       H ; rpmb equ zdvee+d'17' ;回転数バー数値 ; intc equ zdvee+d'18' ;割り込み処理カウンタ pushw equ zdvee+d'19' ;Wレジスタ用PUSH-RAM pushs equ zdvee+d'20' ;STATUS用PUSH-RAM ; eon equ zdvee+d'21' ;eon記憶用RAM loopc equ zdvee+d'22' ;パルス数設定RAM ; rpmb_h equ zdvee+d'23' ; rpmb_l equ zdvee+d'24' ; ; ;***************************************************** ; [ 初期設定 ] ; ; CALL SYOKI ;I/O初期設定 GOTO syoki2 ;メインPGへ ; ORG 04H ; ; 割り込み処理 ; movwf pushw ;w_reg 退避 movf status,w ; movwf pushs ;status_reg 退避 ; bcf intcon,t0if ;割り込みフラグclr incf intc,f ;intcを+1 ; movf pushs,w ; movwf status ; movf pushw,w ; retfie ; ;********************************************************** ;********************************************************** syoki2 ; movlw d'100' ; subwf intc ; btfss status,z ; goto syoki2 ; call lcdset ;LCD初期設定 call lcdclr ; call welcom ;welcom 表示 bcf porta,2 ;LED緑 消灯 bsf porta,3 ;LED赤 点灯 clrf intc ;割り込み処理用カウンタclr syoki3 movlw d'250' ;タイムアウト用数値 subwf intc,w ;約2秒間welcom表示 btfss status,z ; goto syoki3 ; ;-------------------------------; bsf porta,2 ; bcf porta,3 ; clrf intc ; ; syoki4 movlw d'250' ;約2秒弱welcom表示 subwf intc,w ; btfss status,z ; goto syoki4 ; call lcdclr ;表示をクリア bcf porta,2 ;LED緑 消灯 bcf porta,3 ;LED赤 消灯 goto main ; ;-------------------------------; ; エンジン停止状態の表示 ; restart bcf porta,2 ;LED緑 消灯 bcf porta,3 ;LED赤 消灯 call lcdclr ; ; movlw b'11111110' ;" " call lcdout ; movlw b'11111110' ;" " call lcdout ; movlw h'50' ;P call lcdout ; movlw h'69' ;i call lcdout ; movlw h'73' ;s call lcdout ; movlw h'74' ;t call lcdout ; movlw h'6f' ;o call lcdout ; movlw h'6e' ;n call lcdout ; movlw b'11111110' ;" " call lcdout ; movlw h'73' ;s call lcdout ; movlw h'74' ;t call lcdout ; movlw h'6f' ;o call lcdout ; movlw h'70' ;p call lcdout ; movlw h'73' ;s call lcdout ; movlw b'11111110' ;" " call lcdout ; movlw b'11111110' ;" " call lcdout ; ; goto main ; ;///////////////////////////////////////////////////////////// ;  LOOPプログラムの開始 ;///////////////////////////////////////////////////////////// main ; bsf intcon,t0ie ;割り込み開始 movlw h'ff' ;インジェクション判定初期データ movwf eon ;eonにstor clrf tmr0 ;タイマーRAMクリア clrf intc ;カウンタクリア ;-------------------------------; sss ; call toutc ;タイムアウトチェック btfsc status,z ; goto restart ;タイムアウトならlcdクリアsubへ call ein ;インジェクションチェック ; btfss portb,1 ;タコ信号チェック goto sss ;信号Lならsssへ戻る ;--------------- ; ssss call toutc ; btfsc status,z ; goto restart ; call ein ; ; btfsc portb,1 ; goto ssss ; ;-------------------------------; ; 測定開始 ; movlw d'4' ;4パルス2回転をセット movwf loopc ; clrf tmr0 ;RAMクリア clrf intc ; ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< pls movlw d'31' ;1mSec wait << call wait32u ;チャタリング防止Wait << ; << mm0 call toutc ;タイムアウトチェック << btfsc status,z ; << goto restart ;信号なければrestartへ << call ein ;インジェクションチェック << ; << btfss portb,1 ; << goto mm0 ;タコ信号Lならmm0へ戻る << ;-------------------------------; << movlw d'31' ; << call wait32u ; << ; << mm1 call toutc ; << btfsc status,z ; << goto restart ;タイムアウトならrestartへ << call ein ; << ; << btfsc portb,1 ; << goto mm1 ;タコ信号Hならmm1へ戻る << ; << decfsz loopc,f ;loopcを-1 << goto pls ;loopcが0でなければplsへもどる << ; << ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; パルス測定終了 ; ; bcf INTCON,T0IE ;タイマー割り込み停止 ; movf tmr0,w ;カウント数stor movwf countl ; movf intc,w ; movwf counth ; ; call zdv ;わり算処理 call bcd ;BCD処理 call sisya ;2桁目四捨五入処理 call grapf ;グラフ処理 ; bsf intcon,t0ie ; ; call home ;lcdホームポジション call engin ;インジェクション判定・表示 call bar_ue ; call rpm_ue ; call kaigyo ;LCD改行 call bar_si ; call rpm_si ; ; goto main ; ; ;  LOOP END ; ;################################################################### ;>>>>>>>>>>> 回転数上段表示 >>>>>>>>>>>>>>>>>>>>>>>>>>>> rpm_ue ; >> movlw d'0' ; >> subwf keta4,w ; >> btfss status,z ; >> goto r_ue_1 ; >> movlw d'10' ; >> movwf keta4 ; >> ;-------------------------------; >> movlw d'0' ; >> subwf keta3,w ; >> btfss status,z ; >> goto r_ue_1 ; >> movlw d'10' ; >> movwf keta3 ; >> ;===============================; >> r_ue_1 movf keta4,w ; >> call ue1 ;上段1番目データ取込 >> call lcdout ; >> movf keta4,w ; >> call ue2 ;上段2番目データ取込 >> call lcdout ; >> ; >> movf keta3,w ; >> call ue1 ; >> call lcdout ; >> movf keta3,w ; >> call ue2 ; >> call lcdout ; >> ; >> movf keta2,w ; >> call ue1 ; >> call lcdout ; >> movf keta2,w ; >> call ue2 ; >> call lcdout ; >> ; >> movf keta1,w ; >> call ue1 ; >> call lcdout ; >> movf keta1,w ; >> call ue2 ; >> call lcdout ; >> ; >> return ; >> ;>>>>>>>>>>>> 上段左側文字データ >>>>>>>>>>>>>>>>>>>>>>> ue1 ; >> andlw h'0f' ;上位4bitマスク >> addwf pcl,f ; >> ; >> retlw h'00' ;0 >> retlw h'fe' ;1 " " >> retlw h'01' ;2 >> retlw h'01' ;3 >> retlw h'00' ;4 >> retlw h'00' ;5 >> retlw h'00' ;6 >> retlw h'00' ;7 >> retlw h'00' ;8 >> retlw h'00' ;9 >> retlw h'fe' ;" " >> ;>>>>>>>>>>>>> 上段右側文字データ >>>>>>>>>>>>>>>>>>>>>> ue2 ; >> andlw h'0f' ;上位4bitマスク >> addwf pcl,f ; >> ; >> retlw h'05' ;0 >> retlw h'00' ;1 >> retlw h'04' ;2 >> retlw h'04' ;3 >> retlw h'06' ;4 >> retlw h'03' ;5 >> retlw h'03' ;6 >> retlw h'05' ;7 >> retlw h'04' ;8 >> retlw h'04' ;9 >> retlw h'fe' ;" " >> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>>>>>>>>> 回転数下段表示 >>>>>>>>>>>>>>>>>>>>>>>>>> rpm_si ; >> movf keta4,w ; >> call si1 ;上段1番目データ取込 >> call lcdout ; >> movf keta4,w ; >> call si2 ;上段2番目データ取込 >> call lcdout ; >> ; >> movf keta3,w ; >> call si1 ; >> call lcdout ; >> movf keta3,w ; >> call si2 ; >> call lcdout ; >> ; >> movf keta2,w ; >> call si1 ; >> call lcdout ; >> movf keta2,w ; >> call si2 ; >> call lcdout ; >> ; >> movf keta1,w ; >> call si1 ; >> call lcdout ; >> movf keta1,w ; >> call si2 ; >> call lcdout ; >> ; >> return ; >> ;>>>>>>>>>>>> 下段左側文字データ >>>>>>>>>>>>>>>>>>>>>>> si1 ; >> andlw h'0f' ;上位4bitマスク >> addwf pcl,f ; >> ; >> retlw h'00' ;0 >> retlw h'fe' ;1 " " >> retlw h'00' ;2 >> retlw h'02' ;3 >> retlw h'fe' ;4 >> retlw h'02' ;5 >> retlw h'00' ;6 >> retlw h'fe' ;7 >> retlw h'00' ;8 >> retlw h'fe' ;9 >> retlw h'fe' ;" " >> ;>>>>>>>>>>>>> 下段右側文字データ >>>>>>>>>>>>>>>>>>>>>> si2 ; >> andlw h'0f' ;上位4bitマスク >> addwf pcl,f ; >> ; >> retlw h'06' ;0 >> retlw h'00' ;1 >> retlw h'07' ;2 >> retlw h'06' ;3 >> retlw h'00' ;4 >> retlw h'06' ;5 >> retlw h'06' ;6 >> retlw h'00' ;7 >> retlw h'06' ;8 >> retlw h'00' ;9 >> retlw h'fe' ;" " >> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;//////////// 棒グラフ上段表示 ///////////////////////////////// bar_ue ; // movlw d'8' ; // subwf rpmb,w ; // movwf rpmb_h ;上段用バー数格納 // btfsc status,c ; // goto b_ue0 ; // ;--------------- ; // movlw d'0' ; // movwf rpmb_h ;最小値規制 // ;-------------------------------; // b_ue0 ; // movlw d'8' ;8個分の表示処理 // movwf keipopl ;格納 // movf rpmb_h,w ; // subwf keipopl,f ; // ; // movlw d'0' ; // subwf rpmb_h,w ; // btfsc status,z ; // goto b_ue2 ; // ; // b_ue1 movlw b'11111111' ; // call lcdout ; // decfsz rpmb_h,f ; // goto b_ue1 ; // ; // movlw d'0' ; // subwf keipopl,w ; // btfsc status,z ; // goto b_ue3 ; // ; // b_ue2 movlw b'11111110' ; // call lcdout ; // decfsz keipopl,f ; // goto b_ue2 ; // ; // b_ue3 return ; // ;///////////////////////////////////////////////////////////////// ;////////// 棒グラフ下段表示 /////////////////////////////////// bar_si ; // movf rpmb,w ; // movwf rpmb_l ; // movlw d'8' ; // subwf rpmb,w ; // btfss status,c ; // goto b_si0 ; // ;--------------- ; // movlw d'8' ; // movwf rpmb_l ;最大値規制 // ;-------------------------------; // b_si0 ; // movlw d'8' ;8個分の表示処理 // movwf keipopl ;格納 // movf rpmb_l,w ; // subwf keipopl,f ; // ; // movlw d'0' ; // subwf rpmb_l,w ; // btfsc status,z ; // goto b_si2 ; // ; // b_si1 movlw b'11111111' ; // call lcdout ; // decfsz rpmb_l,f ; // goto b_si1 ; // ; // movlw d'0' ; // subwf keipopl,w ; // btfsc status,z ; // goto b_si3 ; // ; // b_si2 movlw b'11111110' ; // call lcdout ; // decfsz keipopl,f ; // goto b_si2 ; // ; // b_si3 return ; // ;///////////////////////////////////////////////////////////////// ;********************************************************* ;********************************************************* ; インジェクション判定 ; ** engin ; ** movlw h'00' ;burns data ** subwf eon,w ; ** btfsc status,z ; ** goto engon ; ** goto engoff ; ** ; ** engon ; ** bcf porta,2 ;LED緑 消灯 ** bsf porta,3 ;LED赤 点灯 ** goto engend ; ** ; ** engoff ; ** bcf porta,3 ;LED赤 消灯 ** bsf porta,2 ;LED緑 点灯 ** goto engend ; ** ; ** engend return ; ** ;********************************************************* ;********************************************************* ;+++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++ ; Burns表示 ; ++ burns ; ++ movlw b'11111110' ; ++ call lcdout ; ++ movlw b'11111110' ; ++ call lcdout ; ++ movlw b'01000010' ;B ++ call lcdout ; ++ movlw b'01110101' ;u ++ call lcdout ; ++ movlw b'01110010' ;r ++ call lcdout ; ++ movlw b'01101110' ;n ++ call lcdout ; ++ movlw b'01110011' ;s ++ call lcdout ; ++ movlw b'11111110' ; ++ call lcdout ; ++ movlw b'11111110' ; ++ call lcdout ; ++ return ; ++ ;+++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++ ;******************************************************** ; ブランク表示 ; * esleep ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * movlw b'11111110' ;" " * call lcdout ; * return ; * ;******************************************************** ;================================================= ;================================================= ; sleep表示 ; == eeee ; == movlw b'11111110' ; == call lcdout ; == movlw b'11111110' ; == call lcdout ; == movlw b'01010011' ;S == call lcdout ; == movlw b'01101100' ;l == call lcdout ; == movlw b'01100101' ;e == call lcdout ; == movlw b'01100101' ;e == call lcdout ; == movlw b'01110000' ;p == call lcdout ; == movlw b'11111110' ;" " == call lcdout ; == movlw b'11111110' ;" " == call lcdout ; == return ; == ;================================================= ;================================================= ;================================================ ; タイムアウト処理開始sub ; = touts ; = movlw d'60' ;約300mSec = addwf intc,w ; = movwf keipopl ; = return ; = ;================================================ ;******************************************************** ; タイムアウトチェックsub ; * toutc ; * movlw d'60' ; * subwf intc,w ; * return ; * ;******************************************************** ;================================================ ; インジェクション信号確認 ; = ein ; = btfss portb,0 ; = clrf eon ; = return ; = ;================================================ ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< wait32u ;遅延sub < addwf tmr0,w ;1=32uSec < movwf keipopl ; < ; < wait1 btfss portb,0 ; < clrf eon ; < ; < movf keipopl,w ; < subwf tmr0,w ; < btfss status,z ; < goto wait1 ; < ; < return ; < ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wait8m ;遅延sub > addwf intc,w ;1=8mSec > movwf keipopl ; > ; > wai1 movf keipopl,w ; > subwf intc,w ; > btfss status,z ; > goto wai1 ; > ; > return ; > ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;======================================================== ; 棒グラフ用セグメント数処理 ; = grapf ; = clrf rpmb ;ラムクリア = ; = movlw h'00' ;250rpm = movwf hikuh ; = movlw h'fa' ; = movwf hikul ; = ; = grapf1 movf hikuh,w ;2バイト比較 = subwf rpmh,w ; = btfss status,z ; = goto grapf2 ; = movf hikul,w ; = subwf rpml,w ; = ; = grapf2 btfss status,c ; = goto grapf3 ; = ;--------------- ; = movf hikul,w ; = subwf rpml,f ; = btfss status,c ; = decf rpmh,f ; = movf hikuh,w ; = subwf rpmh,f ; = ; = incf rpmb,f ; = goto grapf1 ; = ; = grapf3 nop ; = movlw d'16' ; = subwf rpmb,w ; = btfss status,c ; = goto grapf4 ; = ; = movlw d'16' ; = movwf rpmb ; = ; = grapf4 return ; = ;======================================================== ;**************************************************************** ; 2桁目を四捨五入 ; * sisya ; * movlw d'0' ;1000以下ならパス * subwf keta4,w ; * btfsc status,z ; * goto sisya2 ; * ; * movlw d'5' ;-5 * subwf keta2,w ; * btfss status,c ; * goto sisya1 ; * ; * movlw d'5' ; * movwf keta2 ;5をセット * goto sisya2 ; * ;--------------- ; * sisya1 movlw d'0' ; * movwf keta2 ;0をセット * ;--------------- ; * sisya2 ; * return ; * ;**************************************************************** ;######################################################### ;######################################################### ; BCD変換 ; ## bcd ; ## clrf keta1 ;ram clr ## clrf keta2 ; ## clrf keta3 ; ## clrf keta4 ; ## ; ## movlw h'03' ;1000 ## movwf hikuh ; ## movlw h'e8' ; ## movwf hikul ; ## ; ## bcd0 movf hikuh,w ;2バイト比較 ## subwf zdvdd,w ; ## btfss STATUS,Z ; ## goto bcd1 ; ## movf hikul,w ; ## subwf zdvee,w ; ## ; ## bcd1 btfss STATUS,C ; ## goto bcd2 ;3の桁へ ## ; ## ;--------------- ; ## movf hikul,w ;引き算 ## subwf zdvee,f ; ## btfss STATUS,C ; ## decf zdvdd,f ; ## movf hikuh,w ; ## subwf zdvdd,f ; ## ; ## incf keta4,f ;BCD4桁目を+1 ## goto bcd0 ; ## ;-------------------------------; ## bcd2 ;3の桁の処理 ## movlw h'00' ;100 ## movwf hikuh ; ## movlw h'64' ; ## movwf hikul ; ## ; ## bcd3 movf hikuh,w ;比較 ## subwf zdvdd,w ; ## btfss status,z ; ## goto bcd4 ; ## movf hikul,w ; ## subwf zdvee,w ; ## ; ## bcd4 btfss status,c ; ## goto bcd5 ;2の桁へ ## ; ## ;--------------- ; ## movf hikul,w ;引き算 ## subwf zdvee,f ; ## btfss status,c ; ## decf zdvdd,f ; ## movf hikuh,w ; ## subwf zdvdd,f ; ## ; ## incf keta3,f ; ## goto bcd3 ; ## ;-------------------------------; ## bcd5 ;2の桁の処理 ## movlw h'00' ;10 ## movwf hikuh ; ## movlw h'0a' ; ## movwf hikul ; ## ; ## bcd6 movf hikuh,w ; ## subwf zdvdd,w ; ## btfss status,z ; ## goto bcd7 ; ## movf hikul,w ; ## subwf zdvee,w ; ## ; ## bcd7 btfss status,c ; ## goto bcd8 ; ## ;--------------- ; ## movf hikul,w ; ## subwf zdvee,f ; ## btfss status,c ; ## decf zdvdd,f ; ## movf hikuh,w ; ## subwf zdvdd,f ; ## ; ## incf keta2,f ; ## goto bcd6 ; ## ;-------------------------------; ## bcd8 return ; ## ; ## ;######################################################### ;######################################################### ;***************************************************************** ;***************************************************************** ; わり算sub ** zdv bcf STATUS,C ; ** movlw d'112' ; ** movwf zdvee ;3750000をセット ** movlw d'56' ; ** movwf zdvdd ; ** movlw d'57' ; ** movwf zdvcc ; ** movlw d'0' ; ** movwf zdvbb ; ** ; ** movlw d'17' ;Loop回数 ** movwf loop ; ** ; ** zdv1 rlf zdvee,f ; ** rlf zdvdd,f ; ** rlf zdvcc,f ; ** rlf zdvbb,f ; ** ; ** movf countl,w ;カウンタL ** subwf zdvcc,f ;zdvcc-countl -> zdvcc ** ; ** btfss STATUS,C ;キャリーフラグチェック ** goto zdv2 ; ** goto zdv22 ; ** ; ** zdv2 movlw d'1' ;キャリーの処理 ** addwf counth,w ;カウンタH ** subwf zdvbb,f ; ** goto zdv222 ; ** ; ** zdv22 movf counth,w ; ** subwf zdvbb,f ; ** ; ** zdv222 btfsc STATUS,C ;キャリーチェック ** goto zdv6 ; ** ; ** ;-------------------------------; ** movf countl,w ;カウンタL ** addwf zdvcc,f ; ** btfsc STATUS,C ; ** goto zdv3 ; ** goto zdv33 ; ** ; ** zdv3 movlw d'1' ; ** addwf counth,w ;カウンタH ** addwf zdvbb,f ; ** goto zdv333 ; ** ; ** zdv33 movf counth,w ; ** addwf zdvbb,f ; ** ; ** zdv333 bcf STATUS,C ; ** ; ** ;-------------------------------; ** zdv6 nop ; ** decfsz loop,f ; ** goto zdv1 ; ** ; ** movf zdvee,w ; ** movwf rpml ;回転数バイナリLをストア ** movf zdvdd,w ; ** movwf rpmh ;回転数Hをストア ** ; ** return ; ** ; ** ;***************************************************************** ;***************************************************************** ;**************************************************************** ; 初期設定 ; * SYOKI BSF STATUS,RP0 ;セレクトページ1 * ; * MOVLW B'00000101' ;256分周(32uSec)+Bプルアップ * MOVWF OPTION_REG ;OPTION REG に書き込み * ; * MOVLW B'11100000' ;1=in 0=out * MOVWF TRISA ; * MOVLW B'00000011' ;1=IN 0=OUT * MOVWF TRISB ; * ; * BCF STATUS,RP0 ;セレクトページ0 * ;-------------------------------; * clrf porta ; * bcf porta,2 ;LED緑 消灯 * bcf porta,3 ;LED赤 消灯 * clrf portb ; * CLRF TMR0 ;タイマーCLR * ; * BCF INTCON,T0IF ;タイムアウトフラグCLR * BSF INTCON,T0IE ;タイマー割り込み許可 * BSF INTCON,GIE ;全割り込み許可 * ; * RETURN ; * ;**************************************************************** ;******************************************************** ; LCD初期設定 ; * lcdset ; * movlw d'200' ;約100mSec * call wait8m ; * movlw b'00110000' ; * call lcdcon ; * ; * movlw d'13' ; * call wait8m ; * movlw b'00110000' ; * call lcdcon ; * ; * movlw d'13' ; * call wait8m ; * movlw b'00110000' ; * call lcdcon ; * ; * movlw d'13' ; * call wait8m ; * movlw b'00100000' ;上位4Bit有効 * call lcdcon ;4Bit動作に設定 * ; * movlw d'13' ; * call wait8m ; * movlw b'00100000' ;1/16duty 5*7set * call lcdcon ;ファンクションset * movlw b'10000000' ; * call lcdcon ; * ; * movlw d'13' ; * call wait8m ; * movlw b'00000000' ;表示をONさせる * call lcdcon ; * movlw b'11000000' ; * call lcdcon ; * ; * movlw d'13' ; * call wait8m ; * movlw b'00000000' ;エントリーモードset * call lcdcon ; * movlw b'01100000' ; * call lcdcon ; * ; * movlw d'13' ; * call wait8m ; * call lcdclr ; * movlw d'13' ; * call wait8m ; * ; * call f_data ;ラージフォント転送 * ; * return ; * ;******************************************************** ;######################################################## welcom ; # movlw b'01010111' ;W # call lcdout ; # movlw b'01100101' ;e # call lcdout ; # movlw b'01101100' ;l # call lcdout ; # movlw b'01100011' ;c # call lcdout ; # movlw b'01101111' ;o # call lcdout ; # movlw b'01101101' ;m # call lcdout ; # movlw b'01100101' ;e # call lcdout ; # movlw b'11111110' ;" " # call lcdout ; # movlw b'01110100' ;t # call lcdout ; # movlw b'01101111' ;o # call lcdout ; # movlw b'11111110' ;" " # call lcdout ; # movlw b'01010000' ;P # call lcdout ; # movlw b'01110010' ;r # call lcdout ; # movlw b'01101001' ;i # call lcdout ; # movlw b'01110101' ;u # call lcdout ; # movlw b'01110011' ; # call lcdout ; # return ; # ;######################################################## ;******************************************************** ; 1文字表示 ; * lcdout ; * bcf portb,2 ; * movwf keipoph ;表示Dataを退避 * andlw b'11110000' ;下位マスクand data * movwf portb ;上位data出力 * call wait2u ; * bsf portb,3 ; * call wait2u ; * ; * bsf portb,2 ; * call wait2u ; * call wait2u ; * bcf portb,2 ; * call wait2u ; * call wait2u ; * call wait2u ; * ;--------------- ; * swapf keipoph,w ; * andlw b'11110000' ; * movwf portb ; * call wait2u ; * bsf portb,3 ; * call wait2u ; * ; * bsf portb,2 ; * call wait2u ; * call wait2u ; * bcf portb,2 ; * call wait2u ; * call wait2u ; * return ; * ;******************************************************** ;++++++++++++++++++++++++++++++++++++++++++++++++ ; LCDカーソルホームポジションへ + home movlw b'10000000' ; + call lcdcon ; + movlw b'00000000' ; + call lcdcon ; + movlw d'55' ; + call wait32u ; + return ; + ;++++++++++++++++++++++++++++++++++++++++++++++++ ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>> ; LCDクリア ; > lcdclr ; > movlw b'00000000' ; > call lcdcon ; > movlw b'00010000' ; > call lcdcon ; > movlw d'60' ; > call wait32u ; > return ; > ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;================================================ clrclr call lcdclr ; = goto main ; = ; = ;================================================ ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; 改行 ; + kaigyo movlw b'11000000' ; + call lcdcon ; + movlw b'00000000' ; + call lcdcon ; + movlw d'6' ; + call wait32u ; + return ; + ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;======================================================== ; LCDへコントロールワード出力 = lcdcon ; = movwf portb ;データをportbにout = call wait2u ; = ; = bcf portb,3 ;インストラクションreg = call wait2u ; = ; = bsf portb,2 ;イネーブル = call wait2u ; = call wait2u ; = ; = bcf portb,2 ; = call wait2u ; = bcf portb,3 ; = call wait2u ; = call wait2u ; = ; = return ; = ;======================================================== ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; LCDコマンド用wait ; < wait2u ; < nop ; < nop ; < nop ; < nop ; < nop ; < nop ; < nop ; < nop ; < nop ; < nop ; < return ; < ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;//-------  キャラクタデータ登録  ------------------// f_data ; // movlw h'40' ; // call lcdcon ; // movlw h'00' ; // call lcdcon ; // ; // movlw d'1' ; // call wait8m ; // ;-------------------------------; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // ; // movlw h'1f' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // ; // movlw h'1f' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // ; // movlw h'1f' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'03' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'00' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // movlw h'1f' ; // call lcdout ; // ; // return ; // ;///////////////////////////////////////////////////////// end