So-net無料ブログ作成
検索選択

おもしろトランジスタ [色々なこと]

元は富士通にあった 、2SC2625 エミッタ側とコレクタ側の耐電圧がほぼ同じ

つまり両方向TRとして使えるらしい。

http://pdf1.alldatasheet.jp/datasheet-pdf/view/2543/MOSPEC/2SC2625.html

sIMG_0630.jpg

現代のものは少し違うようでした。

富士のデータを見つけました。

http://pdf1.alldatasheet.jp/datasheet-pdf/view/94883/FUJI/2SC2625.html

販売していた所で勘違いしていたみたいで双方向トランジスタではありませんでした。

なにか使い道はないかと何十年か仕舞ったままでした。

 

 

続きを読む


コメント(0) 

MPLABによるソース [PIC]

下記のプロジェクトはビルドできましたが

FIG1        EQU        20H    ;1桁目 LSB
FIG2        EQU        21H    ;2桁目 
FIG3        EQU        22H    ;3桁目
FIG4        EQU        23H    ;4桁目
FIG5        EQU        24H    ;5桁目
FIG6        EQU        25H    ;6桁目
FIG7        EQU        26H    ;7桁目
FIG8        EQU        27H    ;8桁目 MSB

を mXLCDSendMsg    macro   MsgPtr に連結できていません。

WS001368.JPG

;***********************************************************
; new4.asm

;      プログラムNO    CQFC-03
;      8桁周波数カウンタ  CQ誌投稿用
;      プリスケーラ残存数読出し
;      プリスケーラ  1/256
;      ゲートタイム  1.0Sec(1.000013seC)
;    ゲートを閉じた後、TMR0IF=1 ならば    桁上げ処理をして、
;    かつ、TMR0=FFH ならば  TMR0=00H    とする。
;    TMR0がFFHでないなら、そのまま  BYTE1にコピーする。
;    また、TMR0IF=0ならば、そのまま    BYTE1にコピーする。
;
;      測定周波数    100MHz(BCD 4Byte)
;      測定時間中に8LEDをスキャン
;      クロック周波数12.8MHz
;      周波数計測命令サイクル=13サイクル
;                    プログラム者  清水愛典 JA3DEW
;***********************************************************
;-- LCD pin
;-- 1    Vss     2 Vdd
;-- 3    VO      4 RS
;-- 5    R/W(G) 6 E
;-- 7    D0      8 D1
;-- 9    D2      10 D3
;-- 11 D4      12 D5
;-- 13 D6      14 D7
;-- 15 BLA     16 BLK

;-- 16F648A pin
;-- 1 RA2 Gate1_out            18 RA1 Zbl sel
;-- 2 RA3 OvPule_cunt            17 RA0 time sel
;-- 3 RA4 Freq_in            16 RA7 OSC1 XTal IN
;-- 4 RA5 Vpp          15 RA6 OSC2 XTal OUT
;-- 5 Vss ICSP       14 Vdd ICSP Vdd
;-- 6 RB0 A桁        13 RB7 4_seg
;-- 7 RB1 B桁        12 RB6 3_seg
;-- 8 RB2 C桁        11 RB5 2_seg
;-- 9 RB3 Dp          10 RB4 1_seg
;***********************************************************

    LIST        P=PIC16F648a
    INCLUDE        "P16F648a.INC"
    __CONFIG _CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
    include        XLCD.inc

;Shared Functions
;        XLCDInit ;It is used to initialize the LCD module according to the Application Maestro options.
;        XLCDCommand ;It sends clocking signal and instructions to the LCD.
;        XLCDPut ;It sends the clocking signal and data to be displayed to the LCD.
;        XLCDIsBusy ;Reads the Busy Flag status from the LCD module.
;        XLCDReadData ;It reads the data from the present address in the LCD.
;        XLCDL1home ;Points to the first address location of line one of the LCD.
;        XLCDL2home ;Points to the first address location of line two of the LCD
;        XLCDClear ;Clears the DDRAM content of the LCD and points to the 00 address location.
;        XLCDReturnHome ;Points to the 00 address location, the DDRAM content remains unchanged.
;Shared Macros
;        mXLCDSendMsg ;This is to write a string, the user needs to pass the starting address location of the string.

;*******************************************
;変数定義とレジスタ割付
;*******************************************
;         PIC16F627A/628A PIC16F648A
;Bank0 20-7Fh 20-7Fh
;Bank1 A0h-FF A0h-FF
;Bank2 120h-14Fh, 170h-17Fh 120h-17Fh
;Bank3 1F0h-1FFh 1F0h-1FFh

;reg 20-6f a0-ef 120-16f
;creg 70-7f fo-ff 170-17f 1fo-1ff

;9Ah EEDATA 256 x 8
;9Bh EEADR
;9Ch EECON1
;9Dh EECON2(1)
;6c EEIE
;0c EEIF
;EEADRH
;EEADR

;mXLCDSendMsg
;MsgPtr
;XLCDSendMsg
;TBLPTRU
;TBLPTRH
;TBLPTRL

;FSR
;INDF,W

;lcd data
;    20h
;0 30h
;1 31h
;2 32h
;3 33h
;4 34h
;5 35h
;6 36h
;7 37h
;8 38h
;9 39h

;FIG to LIG
;RRF f, d
;RRF f, d
;RRF f, d
;RRF f, d
;ANDLW 0fh
;IORLW 30h
;MOVWF data

;zerog

;G 47h
;M 4dh
;K 4bh
;H 48h
;m 6dh
;u 75h
;n 6eh
;, 2ch

;"G  K  H "
;"  K  H  "
;" K  H  m"
;"K  H  m "
;"  H  m  "
;" H  m  u"
;"H  m  u "
;"  m  u  "
;" m  u  n"

;gmsg equ "G  K  H "
;hkmsg equ "  K  H  "
;tkmsg equ " K  H  m"
;kmsg equ  "K  H  m "
;hmsg equ  "  H  m  "
;tmsg equ  " H  m  u"
;msg equ     "H  m  u "
;hmmsg equ "  m  u  "
;tmmsg equ " m  u  n"

FIG1        EQU        20H    ;1桁目 NUM 4,2,1,Dp, DIG 4,2,1 LSB
FIG2        EQU        21H    ;2桁目    Dp 負論理L data 正論理H
FIG3        EQU        22H    ;3桁目
FIG4        EQU        23H    ;4桁目
FIG5        EQU        24H    ;5桁目
FIG6        EQU        25H    ;6桁目
FIG7        EQU        26H    ;7桁目
FIG8        EQU        27H    ;8桁目 MSB
BYTE0        EQU        28H    ;16進カウンタ0
BYTE1        EQU        29H    ;16進カウンタ1
BYTE2        EQU        2AH    ;16進カウンタ2
BYTE3        EQU        2BH    ;16進カウンタ3
DCML12        EQU        2CH    ;10進1桁目と2桁目
DCML34        EQU        2DH    ;10進3桁目と4桁目
DCML56        EQU        2EH    ;10進5桁目と6桁目
DCML78        EQU        2FH    ;10進7桁目と8桁目
DCML9A        EQU        30H    ;10進9桁目と10桁目DAIMY
DCMLBC        EQU        31H    ;10進11桁目と12桁目DAMIY
SHIFT        EQU        32H    ;SHIFTカウンタHD変換に
WORK1        EQU        33H    ;HEX TO BCD で一時使用
WORK2        EQU        34H    ;HEX TO BCD で一時使用
WCNT1        EQU        35H    ;待ち時間DECカウンタ1
WCNT2        EQU        36H    ;待ち時間DECカウンタ2
WCNT3        EQU        37H    ;待ち時間DECカウンタ3
WCNT4        EQU        38H    ;微調整時間DCカウンタ
FIGCNT        EQU        39H    ;LED桁アドレスカウンタ
PCNT        EQU        3AH    ;プリスケーラ残存数
;

        ORG         0H
        GOTO    MAIN
;
        ORG        0030H
;*******************************************
;メインプログラム
;*******************************************
;***** 初期化 ******
MAIN
;STATUS REG
;BIT    7        6        5        4        3        2        1        0
;      IRP   RP1   RP0   TO/   PD/     Z      DC        C
;        0         0      1      1      1      0      0      0=038H
;IRP 間接アドレスであるがPIC16F84A では使用しない。しかし、0 にしておくこと。
;RP1 RP01の上位のバンク指定であるがPIC16F84A では 0 にしておくこと。
;RP0 PIC16F84A ではプログラムで切り替える。 1 はBANK 1 に切り替える。
;PD/ ウワッチ・ドック・タイマは使用しない=1  使用する=0
        BCF        STATUS,5    ;BANK0
        MOVLW        038H
        MOVWF        STATUS
;--OPTION_REG_NRBPU

;
;OPTION REG
; BIT   7      6      5      4      3      2      1      0
;      RBPU/ INTEDG TOCS    TOSE     PSA     PS2     PS1     PS0
;          0      0      1      1      0      1      1      1= 037H
;RBPU=プルアップ抵抗  繋がない=1    繋ぐ=0
;INTEDG=割込みエッジ  立上り=1     立下り=0      
;TOCS=クロック選択 RA4/T0CKI=1  内部命令サイクル CLKOUT=0
;TOSE=TMR0エッジ      H=>L は 1 ,L=>H は 0 立ち下がりエッジドトリガとする。
;PS2,PS1,PS0 プリスケーラの分周比  1/256を採用
        BSF        STATUS,5    ;BANK1
        MOVLW        037H
        MOVWF        OPTION_REG

        MOVLW 0x07 ;Init comparator mode
        MOVWF CMCON ;CM<2:0> = 0111
;CMCON EQU 0b111
;CMCON,CM EQU 0b111
;CM EQU 0b111

;    
;PORTA
;         BIT     7     6      5     4     3      2     1     0
;IN/OUT         X     X      X    IN   OUT  OUT     IN  IN
;BIT DATA     0     0      0     1     0      0     1     1 =13H
;BIT0:測定周期切り替え入力
;BIT1:ゼロブランキングの切り替え入力
;BIT2:第1ゲートの制御出力
;BIT3:PIC内臓プリスケーラ残存数読み出しパルス出力
;BIT4:周波数測定入力
        BSF        STATUS,5    ;BANK1
        MOVLW        013H
        MOVWF        TRISA        ;PORTA MODEreg
;
;PORTB    
;         BIT     7     6      5     4     3      2     1     0
;IN/OUT        OUT  OUT  OUT    OUT  OUT  OUT     OUT    OUT
;BIT DATA     0     0      0     0     0      0     0     0 = 000H=クリア
        BSF        STATUS,5    ;BANK1
        MOVLW        00H
        MOVWF        TRISB        ;PORTB MODEreg ALL OUT

;INTCON REG
;BIT    7        6        5        4        3        2        1        0
;      GIE  EEIE  TOIE   INTE  RBIE  TMR0IF  INTF  RBIF
;--GIE PEIE T0IE INTE RBIE TMR0IF INTF RBIF
;        0        0        0        0        0        0        0        0 =00H
        BCF        STATUS,5    ;BANK0
        MOVLW        00H
        MOVWF        INTCON
;***** lcdinit *****
;        XLCDInit ;It is used to initialize the LCD module according to the Application Maestro options.

;***** メインループ *****
MAINR
        CLRF        FIGCNT        ;LED桁アドレスカウンタ
        BTFSC        PORTA,0        ;NOR/PRE SW CHEACK
        GOTO        MAINR1
        GOTO        MAINR2
MAINR1
        CALL        FCNTRA        ;周波数測定A(1.00秒)
        CALL        HDCONV        ;16進10進変換
        CALL        ADEVFIG        ;桁分離(1.00秒)
        CALL        ZEROBR        ;ゼロブランキング
        GOTO        MAINR    ;TO MAIN1
MAINR2
        CALL        FCNTRB        ;周波数測定B(1.28秒)
        CALL        HDCONV        ;16進10進変換
        CALL        BDEVFIG        ;桁分離(1.28秒)
        CALL        ZEROBR        ;ゼロブランキング
        GOTO        MAINR    ;TO MAIN1

;********** サブルーチン群 **********
;** 周波数測定サブルーチン 1.00Sec **
;周波数測定の結果はTMR0,BYTE1,BYTE2 に16進数でカウントされている
;測定のためにゲート開放時間は1.000028秒に調整
;FCNTLP3のループとWCNT1,WCNT2,WCNT3で決める。
;FCNTLP2のルーチンLEDのダイナミックスキャンを行う


FCNTRA
        CALL        LEDSCAN            ;LEDSCAN
                                        ;;        XLCDClear
                                        ;;        XLCDL1home        
                                        ;        MOVF        FIGCNT,W
                                        ;        ANDLW        07H
                                        ;        IORLW        020H
                                        ;        MOVWF        FSR
                                        ;        MOVF        INDF,W
                                        ;;        mXLCDSendMsg
                                        ;        MOVWF        PORTB
                                        ;        INCF        FIGCNT,F
                                        ;        RETURN

        BSF            PORTA,4        ;第2ゲートは開いたままにする。
        BSF            PORTA,3        ;RA3=[H]
        BCF            PORTA,2        ;第1ゲートを閉じる

        CLRF        BYTE0        ;Fカウンタ    クリア
        CLRF        BYTE1        ;Fカウンタ    クリア
        CLRF        BYTE2        ;Fカウンタ    クリア
        CLRF        BYTE3        ;Fカウンタ    クリア ##
        CLRF        TMR0        ;Fカウンタ    クリア
        BCF            INTCON,TMR0IF    ;TMR0 のキャリーをクリア
        BSF            PORTA,2        ;第1ゲートを開ける
        NOP                        ;WAIT微々時間調整
        NOP
        MOVLW        0CAH        ;WAIT DATA=0CAH
        MOVWF        WCNT1        ;WAIT DATA IN
FCNTRA1
        CALL        AWAITB                            ;************** 微時間調整A ******************
                                                        ;AWAITB    MOVLW        10H
                                                        ;        MOVWF        WCNT4
                                                        ;        NOP                ;微々調整
                                                        ;        NOP
                                                        ;        NOP
                                                        ;        NOP
                                                        ;        NOP
                                                        ;AWAITB1    NOP
                                                        ;        NOP
                                                        ;        DECF        WCNT4,F
                                                        ;        BTFSS        STATUS,Z
                                                        ;        GOTO        AWAITB1
                                                        ;        RETURN

        MOVLW        026H        ;WAIT DATA=26H
        MOVWF        WCNT2        ;WAIT DATA IN
FCNTRA2
        MOVLW        01CH        ;WAIT DATA=1CH
        MOVWF        WCNT3        ;WAIT DATA IN
        CALL        AWAITA        ;粗時間調整A    ;*************** 粗時間調整A *****************
                                                        ;AWAITA    MOVLW        05H
                                                        ;        MOVWF        WCNT4
                                                        ;AWAITA1    NOP
                                                        ;        NOP
                                                        ;        DECF        WCNT4,F
                                                        ;        BTFSS        STATUS,Z
                                                        ;        GOTO        AWAITA1
                                                        ;        RETURN

        CALL        LEDSCAN        ;LED表示のスキャン

FCNTRA3        
        BTFSS        INTCON,TMR0IF    ;TMR0IFのフラグをチェック    
        GOTO        TAJDA1        ;ルーチン時間調整へ
        BCF            INTCON,TMR0IF    ;TMR0IFのフラグをクリア            
        MOVLW        1            ;カウントアップの準備
        GOTO        NEXTA1

TAJDA1
        NOP
        NOP
        MOVLW        0            ;ノーカウントの準備
NEXTA1
        ADDWF        BYTE2,F        ;TMR0IFが立てば1を加算
        RLF            BYTE2,W
        ANDLW        1
        ADDWF        BYTE3,F        ; ##
        DECFSZ        WCNT3,F        ;ウエイトのWCNT3=0か判定
        GOTO        FCNTRA3
        DECFSZ        WCNT2,F
        GOTO        FCNTRA2
        DECFSZ        WCNT1,F
        GOTO        FCNTRA1
        BCF            PORTA,2        ;第1ゲートを閉じる
        NOP                        ;プリスケーラの出力に2サイクル遅延があるため
        NOP                        ;;同        ; ##
        MOVF        TMR0,W
        MOVWF        BYTE1
        BTFSS        INTCON,TMR0IF
        GOTO        NEXTA2
        MOVLW        1
        ADDWF        BYTE2,F
        RLF            BYTE2,W
        ANDLW        01H
        ADDWF        BYTE3,F        ; ##

        MOVLW        0FFH
        SUBWF        BYTE1,W
        BTFSS        STATUS,Z
        GOTO        NEXTA2
        MOVLW        00H
        MOVWF        BYTE1
NEXTA2
        CALL        READPRE        ;プリセレクタ残存数読出し;READPRE
                                    ;        CLRF        PCNT        ;プリスケーラ残存数カウンタ
                                    ;READPRE1
                                    ;        call        LEDSCAN        ;LEDSCANを挿入
                                    ;        BCF            PORTA,3
                                    ;        BSF            PORTA,3
                                    ;        DECF        PCNT,F
                                    ;        BTFSC        STATUS,Z    ;PCNT THEN 00H DEC.OVER
                                    ;        GOTO        READPRE2
                                    ;        MOVF        BYTE1,W
                                    ;        SUBWF        TMR0,W        ;W=BYTE1-TMR0
                                    ;        BTFSC        STATUS,Z    ;FLAG CK
                                    ;        GOTO        READPRE1
                                    ;        MOVF        PCNT,W
                                    ;        MOVWF        BYTE0

                                    ;READPRE2
                                    ;        RETURN

        RETURN

;*************** 粗時間調整A *****************
AWAITA    MOVLW        05H
        MOVWF        WCNT4
AWAITA1    NOP
        NOP
        DECF        WCNT4,F
        BTFSS        STATUS,Z
        GOTO        AWAITA1
        RETURN

;************** 微時間調整A ******************
AWAITB    MOVLW        10H
        MOVWF        WCNT4
        NOP                ;微々調整
        NOP
        NOP
        NOP
        NOP
AWAITB1    NOP
        NOP
        DECF        WCNT4,F
        BTFSS        STATUS,Z
        GOTO        AWAITB1
        RETURN

;** 周波数測定サブルーチン 1.28Sec **
;周波数測定の結果はTMR0,BYTE1,BYTE2 に16進数でカウントされている
;測定のためにゲート開放時間は1.280002秒に調整
;FCNTLP3のループとWCNT1,WCNT2,WCNT3で決める。
;FCNTLP2のルーチンLEDのダイナミックスキャンを行う

FCNTRB
        CALL        LEDSCAN
        BSF            PORTA,4        ;第2ゲートは開いたままにする。
        BSF            PORTA,3        ;RA3=[H]
        BCF            PORTA,2        ;第1ゲートを閉じる
        CLRF        BYTE0        ;Fカウンタ    クリア
        CLRF        BYTE1        ;Fカウンタ    クリア
        CLRF        BYTE2        ;Fカウンタ    クリア
        CLRF        BYTE3        ;Fカウンタ    クリア        ; ##
        CLRF        TMR0        ;Fカウンタ    クリア
        BCF            INTCON,TMR0IF    ;TMR0 のキャリーをクリア
        BSF            PORTA,2        ;第1ゲートを開ける
        CALL        BWAITC        ;WAIT微々時間調整
        MOVLW        085H        ;WAIT DATA=0CAH
        MOVWF        WCNT1        ;WAIT DATA IN
FCNTRB1
        CALL        BWAITB        ;微時間調整B
        MOVLW        025H        ;WAIT DATA=26H
        MOVWF        WCNT2        ;WAIT DATA IN
FCNTRB2
        MOVLW        03CH        ;WAIT DATA=1CH
        MOVWF        WCNT3        ;WAIT DATA IN
        CALL        BWAITA        ;粗時間調整B
        CALL        LEDSCAN        ;LED表示のスキャン

FCNTRB3        
        BTFSS        INTCON,TMR0IF    ;TMR0IFのフラグをチェック    
        GOTO        TAJDB1        ;ルーチン時間調整へ
        BCF            INTCON,TMR0IF    ;TMR0IFのフラグをクリア            
        MOVLW        1            ;カウントアップの準備
        GOTO        NEXTB1

TAJDB1
        NOP
        NOP
        MOVLW        0            ;ノーカウントの準備
NEXTB1
        ADDWF        BYTE2,F        ;TMR0IFが立てば1を加算
        RLF            BYTE2,W
        ANDLW        1
        ADDWF        BYTE3,F        ; ##
        DECFSZ        WCNT3,F        ;ウエイトのWCNT3=0か判定
        GOTO        FCNTRB3
        DECFSZ        WCNT2,F
        GOTO        FCNTRB2
        DECFSZ        WCNT1,F
        GOTO        FCNTRB1
        BCF            PORTA,2        ;第1ゲートを閉じる
        NOP                        ;プリスケーラの出力に2サイクル遅延があるため
        NOP                        ;;同        ; ##
        MOVF        TMR0,W
        MOVWF        BYTE1
        BTFSS        INTCON,TMR0IF
        GOTO        NEXTB2
        MOVLW        1
        ADDWF        BYTE2,F
        RLF            BYTE2,W
        ANDLW        01H
        ADDWF        BYTE3,F        ; ##

        MOVLW        0FFH
        SUBWF        BYTE1,W
        BTFSS        STATUS,Z
        GOTO        NEXTB2
        MOVLW        00H
        MOVWF        BYTE1
NEXTB2
        CALL        READPRE        ;プリセレクタ残存数読出し
        RETURN

;*************** 粗時間調整B *****************
BWAITA    MOVLW        05H
        MOVWF        WCNT4
BWAITA1    NOP
        NOP
        DECF        WCNT4,F
        BTFSS        STATUS,Z
        GOTO        AWAITA1
        RETURN

;************** 微時間調整B ******************
BWAITB    MOVLW        0CH
        MOVWF        WCNT4
BWAITB1    NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        DECF        WCNT4,F
        BTFSS        STATUS,Z
        GOTO        AWAITB1
        RETURN

;************** 微々時間調整B ******************
BWAITC    MOVLW        1AH
        MOVWF        WCNT4
BWAITC1    
        DECF        WCNT4,F
        BTFSS        STATUS,Z
        GOTO        BWAITC1
        RETURN

;******************************************
;    プリスケーラ残存数の読出し
;******************************************

READPRE
        CLRF        PCNT        ;プリスケーラ残存数カウンタ
READPRE1
        call        LEDSCAN        ;LEDSCANを挿入
        BCF            PORTA,3
        BSF            PORTA,3
        DECF        PCNT,F
        BTFSC        STATUS,Z    ;PCNT THEN 00H DEC.OVER
        GOTO        READPRE2
        MOVF        BYTE1,W
        SUBWF        TMR0,W        ;W=BYTE1-TMR0
        BTFSC        STATUS,Z    ;FLAG CK
        GOTO        READPRE1
        MOVF        PCNT,W
        MOVWF        BYTE0

READPRE2
        RETURN

;********** 16進10進変換サブルーチン **********
;BYTE0,BYTE1,BYTE2,BYTE3から16進数を取り出し
;10進に変換DCML12~DCML78に格納する。
;このサブルーチンはマイクロチップ社のアプリケーションノートを使う。

HDCONV
        BCF        STATUS,C    ;キャリアフラグをクリア
        MOVLW        020H        ;4BYTE BDC=32回シフト
        MOVWF        SHIFT        ;SHIFTカウンタ
        CLRF        DCML12        ; ##
        CLRF        DCML34        ; ##
        CLRF        DCML56        ; ##
        CLRF        DCML78
        CLRF        DCML9A
        CLRF        DCMLBC
HDCONV1
        RLF        BYTE0,F
        RLF        BYTE1,F
        RLF        BYTE2,F
        RLF        BYTE3,F            ; ##
        RLF        DCML12,F        ; ##
        RLF        DCML34,F        ; ##
        RLF        DCML56,F        ; ##
        RLF        DCML78,F
        RLF        DCML9A,F
        RLF        DCMLBC,F
        DECFSZ        SHIFT,F
        GOTO        ADJST
        RETURN

ADJST
        MOVF        DCML12,W    ; ##          ;;10進1桁目と2桁目を
        CALL        ADJBCD                  ;ADJBCD
                                              ;        MOVWF        WORK1
                                              ;        CALL        LEDSCAN        ;LED    SCANを挿入
                                              ;        MOVLW        3
                                              ;        ADDWF        WORK1,W
                                              ;        MOVWF        WORK2
                                              ;        BTFSC        WORK2,3
                                              ;        MOVWF        WORK1
                                              ;        MOVLW        030H
                                              ;        ADDWF        WORK1,W
                                              ;        MOVWF        WORK2
                                              ;        BTFSC        WORK2,7
                                              ;        MOVWF        WORK1
                                              ;        MOVF        WORK1,W
                                              ;        RETURN

        MOVWF        DCML12        ; ##

        MOVF        DCML34,W    ; ##
        CALL        ADJBCD
        MOVWF        DCML34        ; ##

        MOVF        DCML56,W    ; ##
        CALL        ADJBCD
        MOVWF        DCML56        ; ##

        MOVF        DCML78,W
        CALL        ADJBCD
        MOVWF        DCML78

        MOVF        DCML9A,W
        CALL        ADJBCD
        MOVWF        DCML9A

        MOVF        DCMLBC,W
        CALL        ADJBCD
        MOVWF        DCMLBC        
        GOTO        HDCONV1

ADJBCD
        MOVWF        WORK1
        CALL        LEDSCAN        ;LED    SCANを挿入
        MOVLW        3
        ADDWF        WORK1,W
        MOVWF        WORK2
        BTFSC        WORK2,3
        MOVWF        WORK1
        MOVLW        030H
        ADDWF        WORK1,W
        MOVWF        WORK2
        BTFSC        WORK2,7
        MOVWF        WORK1
        MOVF        WORK1,W
        RETURN

;**********  桁分離サブルーチン    1.00秒    ************
; FIGレジスタの上位に数値、下位にLEDのアドレスを作る。
; DPの位置が違うため1.28秒と別のルーチンにする。
;    RB3ポートをDP(小数点)に割り当てる。
;*********************************************

ADEVFIG
        CALL        LEDSCAN        ;LED    SCANを挿入
        MOVF        DCML12,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG1

        SWAPF        DCML12,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG2

        MOVF        DCML34,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG3
        
        SWAPF        DCML34,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG4
        
        MOVF        DCML56,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG5
        
        SWAPF        DCML56,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG7

        MOVF        DCML78,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG5
        
        SWAPF        DCML78,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG8
        
        RETURN

;**********  桁分離サブルーチン    1.28秒    ************
; FIGレジスタの上位に数値、下位にLEDのアドレスを作る。
; DPの位置が違うため1.00秒と別のルーチンにする。
;    RB3ポートをDP(小数点)に割り当てる。
;*********************************************

BDEVFIG
        CALL        LEDSCAN        ;LED    SCANを挿入
        MOVF        DCML12,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG1
        
        SWAPF        DCML12,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG2

        MOVF        DCML34,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG3
        
        SWAPF        DCML34,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG4

        MOVF        DCML56,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG5
        
        SWAPF        DCML56,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG6

        MOVF        DCML78,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG7
        
        SWAPF        DCML78,W
        ANDLW        0FH
        IORLW        30H
        MOVWF        FIG8

        RETURN

;        XLCDCommand ;It sends clocking signal and instructions to the LCD.
;        XLCDPut ;It sends the clocking signal and data to be displayed to the LCD.
;        XLCDIsBusy ;Reads the Busy Flag status from the LCD module.
;        XLCDReadData ;It reads the data from the present address in the LCD.
;        XLCDL1home ;Points to the first address location of line one of the LCD.
;        XLCDL2home ;Points to the first address location of line two of the LCD
;        XLCDClear ;Clears the DDRAM content of the LCD and points to the 00 address location.
;        XLCDReturnHome ;Points to the 00 address location, the DDRAM content remains unchanged.
;        mXLCDSendMsg ;This is to write a string, the user needs to pass the starting address location of the string.

;***************    表示サブルーチン    ****************
;    間接アドレス手法を使う。
; FIG1~FIG8のLEDに表示する数値とLEDの桁アドレスを含む。
; データをPORTBに転送する。
;*********************************************

;FIG1        EQU        20H    ;1桁目
;FIG2        EQU        21H    ;2桁目
;FIG3        EQU        22H    ;3桁目
;FIG4        EQU        23H    ;4桁目
;FIG5        EQU        24H    ;5桁目
;FIG6        EQU        25H    ;6桁目
;FIG7        EQU        26H    ;7桁目
;FIG8        EQU        27H    ;8桁目

LEDSCAN
;        XLCDClear
;        XLCDL1home        
        MOVF        FIGCNT,W
        ANDLW        07H
        IORLW        020H
        MOVWF        FSR
        MOVF        INDF,W

;       MsgPtr equ 20H
;       mXLCDSendMsg    macro   MsgPtr
        MOVWF        PORTB ;この部分が置き換わるはずです。
        INCF        FIGCNT,F
        RETURN

;*********** ゼロブランキング  サブルーチン ************
;    表示数値の1~9に表示が現れるまでの上の桁の0を表示しない。
;*********************************************
ZEROBR
        MOVF    FIG8,W
        ANDLW    0FH
        BTFSS    STATUS,Z
        GOTO    ZEROBR1
        MOVF    FIG8,W
        MOVLW    020H        ;ゼロブランキング
        MOVWF    FIG8        ;FIG8 OFF

        MOVF    FIG7,W
        ANDLW    0FH
        BTFSS    STATUS,Z
        GOTO    ZEROBR1
        MOVF    FIG7,W
        MOVLW    020H        ;ゼロブランキング
        MOVWF    FIG7        ;FIG7 OFF

        MOVF    FIG6,W
        ANDLW    0FH
        BTFSS    STATUS,Z
        GOTO    ZEROBR1
        MOVF    FIG6,W
        MOVLW    020H        ;ゼロブランキング
        MOVWF    FIG6        ;FIG6 OFF

        MOVF    FIG5,W        ; ##
        ANDLW    0FH
        BTFSS    STATUS,Z
        GOTO    ZEROBR1
        MOVF    FIG5,W        ; ##
        MOVLW    020H        ;ゼロブランキング
        MOVWF    FIG5        ;FIG5 OFF        ; ##

        MOVF    FIG4,W        ; ##
        ANDLW    0FH
        BTFSS    STATUS,Z
        GOTO    ZEROBR1
        MOVF    FIG4,W        ; ##
        MOVLW    020H        ;ゼロブランキング
        MOVWF    FIG4        ;FIG4 OFF        ; ##

        MOVF    FIG3,W
        ANDLW    0FH
        BTFSS    STATUS,Z
        GOTO    ZEROBR1
        MOVF    FIG3,W
        MOVLW    020H        ;ゼロブランキング
        MOVWF    FIG3        ;FIG3 OFF

        MOVF    FIG2,W
        ANDLW    0FH
        BTFSS    STATUS,Z
        GOTO    ZEROBR1
        MOVF    FIG2,W
        MOVLW    020H        ;ゼロブランキング
        MOVWF    FIG2        ;FOG2 OFF

ZEROBR1
        RETURN

        END

;*********************

;16XLCD.asm

;        bsf     EECON1,EEPGD
         bsf     EECON1,EEDATA


;        incf    EEADRH
        incf    EEADR


;***********

;16f648a_g.lkr

プリンタが突然かすれたのでインキを交換しました。

sIMG_0623.jpg

ついでに内部を見てみると残量検出プリズムのある空間は元から空っぽで、その横のICチップで代理検出をしているようです。

この空間と実際にインキの入っている部分とは通じていません、実際のインキは横の部屋の薄いシートを重ねた、ウイックに染み込ませてあるのが全量のようです、いわば上げ底ですね。

 

 


コメント(0) 

JALV2による表示試験 [jalv2_PIC]

mikroCのよる表示を JALV2で置き換えてみました。

位取りの変換ルーチンが動かず、数字は上の桁から下りてきまして、書き換えない所は残ってしまうので

毎回1行クリアを使っています。

位変更のため1/10,1/100をするにはmathルーチンが使えると思っていたら、

16bitしかサポートされていなかったのは、痛かった。

sIMG_0594.jpg

ジタバタしているうちに、レンジ表示とdword割り算の解決法が見つかりました。

上流はまだ解決していません。(変更点は次です)

          var dword divs;
          const byte msg1[] = " M  K  H";
          const byte msg2[] = "  M  K  ";
          const byte msg3[] = "G  M  K ";
         
       if (freq <   99999999) then
          temp = freq;
          lcd_cursor_position(1,0)
          print_string(lcd, msg1)
       elsif (freq <  999999999) then
          divs = 10;
          temp = freq / divs;
          lcd_cursor_position(1,0)
          print_string(lcd, msg2)
       elsif (freq < 4290000000) then
           divs = 100;
           temp = freq / divs;
          lcd_cursor_position(1,0)
          print_string(lcd, msg3)
       end if                ;"12345678"
        lcd_cursor_position(0,0)
        lcd_clear_line(0)
        print_dword_dec(lcd, temp)
 

format.jal


コメント(0) 
メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。