TOP > PIC > 漢字の表示

 ノリタケ伊勢電子のSCK25616L-Aに16F877Aアセンブラで「あ」の表示を試してみました。
 SCK25616L-Aはどちらが上なのか、説明書を見てもいまいちわからなかったが、背面のコネクタが下になるのが説明書どおりにデータを書き込めるので定位置みたいです。
 データ転送にあたっては文字データの右端、下バイトから転送しなければなりません。
 説明書によると転送されたデータは画面右下から書き込まれるような事が書かれているが、これは4,096ビットを書き込んだ時のものであって、漢字1文字分を書き込むと画面左端に表示された。また、4,096ビット以上を書き込むと最初に書き込んだデータが押し出されました。
 文字を表示するにあたっては、文末から転送するのは違和感がありますね。

;=========================================================
;       SCK25616L-Aのテストプログラム
;       漢字表示のテスト
;       2008/5/24
;=========================================================
        list            p=16F877A       ; list directive to define processor
        #include        <p16F877A.inc>  ; processor specific variable definitions

        __CONFIG    _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

EN              equ     4
LAT             equ     5
cnt             equ     0x21
;==============================================================================
        ORG     0x000             ; processor reset vector
        goto    main              ; go to beginning of program

main
;=============================================================
;       TRISレジスタの設定
;       RC2=EN,RC5=LATを出力に設定
;=============================================================
        bsf     STATUS, RP0     ;バンク1セレクト
        bcf     TRISC, EN
        bcf     TRISC, LAT
;=============================================================
;       USART初期化
;=============================================================
        movlw   0x04            ;同期モード500kbps
        movwf   SPBRG
        bsf     TXSTA, CSRC     ;マスターモード
        bsf     TXSTA, SYNC     ;同期モード
        bcf     STATUS, RP0     ;バンク0セレクト
        bsf     RCSTA, SPEN     ;シリアルポートイネーブル
        bsf     STATUS, RP0     ;バンク1セレクト
        bsf     TXSTA, TXEN
        bcf     STATUS, RP0     ;バンク0セレクト
;=============================================================
;       VFDへデータ転送
;       転送されたデータはVFDの右下からbit0〜7の順番で表示される
;=============================================================
        movlw   0x02
        movwf   cnt
kanji_loop
;       ひらがなの「あ」のデータ転送
        movlw   0x00            ;16l
        call    txreg_write
        movlw   0x00            ;16h
        call    txreg_write
        movlw   0x70            ;15l
        call    txreg_write
        movlw   0x00            ;15h
        call    txreg_write
        movlw   0x88            ;14l
        call    txreg_write
        movlw   0x00            ;14h
        call    txreg_write
        movlw   0x04            ;13l
        call    txreg_write
        movlw   0x01            ;13h
        call    txreg_write
        movlw   0x04            ;12l
        call    txreg_write
        movlw   0x02            ;12h
        call    txreg_write
        movlw   0x02            ;11l
        call    txreg_write
        movlw   0x22            ;11h
        call    txreg_write
        movlw   0x82            ;10l
        call    txreg_write
        movlw   0x27            ;10h
        call    txreg_write
        movlw   0x60            ;9l
        call    txreg_write
        movlw   0x12            ;9h
        call    txreg_write
        movlw   0x18            ;8l
        call    txreg_write
        movlw   0x12            ;8h
        call    txreg_write
        movlw   0x10            ;7l
        call    txreg_write
        movlw   0xfe            ;7h
        call    txreg_write
        movlw   0xe8            ;6l
        call    txreg_write
        movlw   0x11            ;6h
        call    txreg_write
        movlw   0x84            ;5l
        call    txreg_write
        movlw   0x10            ;5h
        call    txreg_write
        movlw   0x44            ;4l
        call    txreg_write
        movlw   0x10            ;4h
        call    txreg_write
        movlw   0x38            ;3l
        call    txreg_write
        movlw   0x00            ;3h
        call    txreg_write
        movlw   0x00            ;2l
        call    txreg_write
        movlw   0x00            ;2h
        call    txreg_write
        movlw   0x00            ;1l
        call    txreg_write
        movlw   0x00            ;1h
        call    txreg_write
        decfsz  cnt, f
        goto    kanji_loop
;       画面最下行に直線を引く
        movlw   D'256'-D'32'
        movwf   cnt
loop1
        movlw   B'00000001'     ;転送データ下半分
        call    txreg_write
        movlw   B'00000000'     ;転送データ上半分
        call    txreg_write
        decfsz  cnt, f
        goto    loop1
        btfss   PIR1, TXIF
        goto    $-1
        bsf     STATUS, RP0     ;バンク1セレクト
        btfss   TXSTA, TRMT     ;TRMTが空のチェックを行わないと
        goto    $-1             ;データが欠落する
        bcf     STATUS, RP0     ;バンク0セレクト
        bsf     PORTC, LAT      ;ラッチパルス送出
        nop
        bcf     PORTC, LAT
        bsf     PORTC, EN       ;表示イネーブル
        goto    $
;===================================================================
;       サブルーチン名 txreg_write
;       機能              wレジスタの値をTXIFがセットされるのを待ってTXREGに書き込む
;       2008.05.11
;       TXREGにデータ書き込み後、TXIFに反映されるまでには1サイクル必要
;===================================================================
txreg_write
        btfss   PIR1, TXIF
        goto    txreg_write
        movwf   TXREG
        return
        end

RC3に接続されているLEDは試験用に取り付けたものなので、意味はありません。