ノリタケ伊勢電子のSCK25616L-Aに16F877AアセンブラでUSART同期通信でデータ転送について試してみました。
16F877Aの同期通信についてサイトを探し回ったが見つけることができなかったのとPICアセンブラも初めてなのでけっこうはまってしまいました。
;========================================================= ; SCK25616L-Aのテストプログラム ; 同期通信モードでデータ転送のテスト ; 2008/5/11 ;========================================================= 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 cnt EQU 0x20 EN equ 4 LAT equ 5 ;********************************************************************** ORG 0x000 ; processor reset vector goto main ; go to beginning of program main ;========================================================= ; 初期化部 ;========================================================= ; 変数の初期化 clrf cnt ;cntクリア bsf STATUS, RP0 ;バンク1にする ;============================================================= ; TRISレジスタの設定 ; RC3,RC4,RC5を出力に設定 ;============================================================= bcf TRISC, 3 bcf TRISC, 4 bcf TRISC, 5 ;============================================================= ; 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にする bsf PORTC, 3 ;LED ON ;============================================================= ; VFDへデータ転送 ; 転送されたデータはVFDの下からbit7〜0の順番で表示される ;============================================================= loop1 movlw B'00001111' ;転送データ下半分 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 ;データが欠落する bsf PORTC, LAT ;ラッチパルス送出 bcf PORTC, LAT bsf PORTC, EN ;表示イネーブル bcf PORTC, 3 ;LED OFF 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は試験用に取り付けたものなので、意味はありません。