前の記事では、PIC16F1827のEUSARTの送信をテストしました。
今回は、文字の受信テストとその文字でLEDを点灯、消灯してみます。
回路図です。今回もICSPでテストしますが、5Vは、FT-234から供給します。この理由は後でトラブルシューティングで説明します。
入出力設定、EUSARTの設定は、前の記事(PIC6F1827 EUSARTテストその1)と同じです。
プログラムです。
TeraTermから1文字受信し、文字が"1"なら"LED ON"と送信し、LEDを点灯します。文字が"0"なら"LED OFF"と送信し、LEDを消灯します。
---------------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PIC16F1827 EUSART TEST
; 2024.11.17
; JH7UBC Keiji Hata
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIST P=PIC16F1827
INCLUDE P16F1827.INC
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
ERRORLEVEL -302
CBLOCK 020h
TEMP
ENDC
SETUP
;クロック設定
BANKSEL OSCCON
MOVLW b'01101000' ;PLLなし、4MHz,Fosc
MOVWF OSCCON
;入出力設定
BANKSEL ANSELA
CLRF ANSELA ;AN0-AN4使用しない
CLRF ANSELB ;AN5-AN11使用しない
BANKSEL TRISA
CLRF TRISA ;PORTAは全て出力(RA5は入力)
MOVLW b'000000010' ;RB1は入力、他は出力
MOVWF TRISB
;USART設定
;RX,TX PIN 設定
BANKSEL APFCON0
BCF APFCON0,7 ;RXDSEL=0 RX=RB1
BCF APFCON1,0 ;RXCKSEL=0 TX=RB2
BANKSEL TXSTA
MOVLW b'00100100'
MOVWF TXSTA ;非同期モード、高速通信モードBRGH=1
; BANKSEL RCSTA
MOVLW 090h
MOVWF RCSTA ;受信可、非同期モード
; BANKSEL BAUDCON
BCF BAUDCON,3 ;BRG16=0 BRG 8bit
MOVLW 019h ;019h=25
MOVWF SPBRGL ;Fosc=4MHz,Baud Rate=9600bps
;PORTA,PORTBクリア
BANKSEL LATA
CLRF LATA
CLRF LATB
MAIN
CALL GETCHR
MOVWF TEMP ;受信した文字をTEMPに格納
XORLW 031h
BTFSS STATUS,Z ;受信した文字が"1"ならスキップ
GOTO NEXT
CALL MSG1
CALL LED_ON
GOTO MAIN
NEXT
MOVFW TEMP
XORLW 030h
BTFSS STATUS,Z ;受信した文字が"0"ならスキップ
GOTO MAIN
CALL MSG2
CALL LED_OFF
GOTO MAIN
LED_ON
BANKSEL LATA
BSF LATA,1
RETURN
LED_OFF
BANKSEL LATA
BCF LATA,1
RETURN
;1文字送信
SENDCHR
BANKSEL TXSTA
BTFSS TXSTA,TRMT ;送信可能かチェック(1:可 0:禁止)
GOTO $-1
MOVWF TXREG
RETURN
;1文字受信
GETCHR
BANKSEL PIR1
BTFSS PIR1,RCIF ;RCIF=1ならスキップ
GOTO $-1
BANKSEL RCREG
MOVFW RCREG
RETURN
MSG1
MOVLW "L"
CALL SENDCHR
MOVLW "E"
CALL SENDCHR
MOVLW "D"
CALL SENDCHR
MOVLW " "
CALL SENDCHR
MOVLW "O"
CALL SENDCHR
MOVLW "N"
CALL SENDCHR
MOVLW 0Dh
CALL SENDCHR
MOVLW 0Ah
CALL SENDCHR
RETURN
MSG2
MOVLW "L"
CALL SENDCHR
MOVLW "E"
CALL SENDCHR
MOVLW "D"
CALL SENDCHR
MOVLW " "
CALL SENDCHR
MOVLW "O"
CALL SENDCHR
MOVLW "F"
CALL SENDCHR
MOVLW "F"
CALL SENDCHR
MOVLW 0Dh
CALL SENDCHR
MOVLW 0Ah
CALL SENDCHR
RETURN
END
---------------------------------------------------
ブレッドボードです。
TeraTermの画面です。
トラブルシューティング
最初、Vdd(5V)をPICKit3から供給していたのですが、TeraTermがFT-234のあるCOMポートを認識しなくなるトラブルがありました。そこで、PICKit3からの電源供給をやめ、VddをFT-234モジュールから供給するようにしたら問題が解決しました。
※コメント投稿者のブログIDはブログ作成者のみに通知されます