; Copyright 2005 Doi Shigeki ;list0805.asm PIC16F88テスト・プログラム ; シリアル通信のテスト 9600ボー@8MHz LIST P=16F88 #INCLUDE P16F88.inc ;コンフィグレーション・ワード 1 __CONFIG _CONFIG1, _BODEN_OFF & _WDT_OFF & _INTRC_IO ; _CP_OFF,_CCP1_RB0,_DEBUG_OFF,_WRT_PROTECT_OFF,_CPD_OFF,_LVP_ON,_MCLR_ON,_PWRTE_OFFはデフォルト ;コンフィグレーション・ワード 2 __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF RXD0 EQU H'20' RXD1 EQU H'21' CNT0 EQU H'22' CNT1 EQU H'23' ORG 0 ;0番地より展開 MAIN NOP ;割り込みの場合も再スタート NOP NOP NOP START BSF STATUS, RP0 ;バンク1へ切替え MOVLW B'01110000' ;内蔵OSCを8MHzに設定 MOVWF OSCCON MOVLW B'00000000' MOVWF TRISA MOVLW B'00000111' ;RB2(RX),RB1,RB0を読み込み MOVWF TRISB MOVLW B'00100100' ;TXEN=1,BRGH=1 MOVWF TXSTA MOVLW D'51' ;8/(16(51+1))=9600 MOVWF SPBRG BCF STATUS, RP0 ;バンク0へ切り替え MOVLW B'10010000' MOVWF RCSTA MOVLW 0 MOVWF RXD0 CHECK BTFSC PIR1,RCIF ;RCIF=0,受信なしならスキップ CALL GETCH CHECK2 MOVF PORTB,W ;スイッチ読み込み ANDLW B'00000011' ;データを数字に MOVWF RXD1 ;RXD1へ保存 SUBWF RXD0,W ;W=RXD0-W BTFSS STATUS,Z ;Z=0ならスキップ CALL PUTCH GOTO CHECK GETCH MOVF RCREG,W ;受信レジスタからデータ取り出し MOVWF PORTA ;LEDへ出力 RETURN PUTCH MOVF RXD1,W MOVWF RXD0 ;旧データを更新 ADDLW H'30' PUTCH2 BTFSS PIR1,TXIF GOTO PUTCH2 MOVWF TXREG ;PCへ送信 CALL WAIT10 RETURN ; ;時間待ち 10ミリ秒/8MHzクロック ; WAIT10 MOVLW D'20' ;20回 MOVWF CNT1 WAIT102 CALL WAIT05 ;0.5ミリ秒待ち DECFSZ CNT1,F GOTO WAIT102 RETURN ; ;時間待ち 0.5ミリ秒/8MHzクロック ; 全体で999サイクル WAIT05 MOVLW D'249' ;249回 MOVWF CNT0 ;2サイクル WAIT052 NOP DECFSZ CNT0,F GOTO WAIT052 ;4*248+3サイクル RETURN ;999サイクル(2+995+2) END