ノリタケ伊勢電子の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は試験用に取り付けたものなので、意味はありません。