PIC、USART USART送信ができません
下記のプログラムでUSART接続してPICマイコンからPCに送信しようとしています。
PICマイコンはP16F877
アプリにはTera Term
というアプリケーションを使用しています。
このプログラムはUSARTの送信とステッピングモータを交互に動作させるプログラムです。
このプログラムを実行したところ、ステッピングモータが微小に動作したままとまってしまいました。
Tera Termにも文字は出力されませんでした。
そのため、1周目だけTXREGレジスタにデータを格納するところまでは出来ていると思います。
しかし、データ送信が行われないため、2週目以降はTSRレジスタがBUSY状態となりプログラムが進行しないのだと考えています。
以下のサイトを参考に模索しましたが、原因が分かりませんでした。
http://www.kimurass.co.jp/pic/0625p.htm
http://www.picfun.com/pic19.html
どのように対処したらよろしいでしょうか?
原因やアドバイスなど教えていただけたら幸いです。
~~プログラム~~
list p=16F877
#include <p16F877.inc>
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF& _LVP_OFF
w_temp EQU 0x0C
status_temp EQU 0x0D
;変数
cblock 020h
CNT15mS ;15mSカウンタ
CNT5mS ;5mSカウンタ
CNT1mS ;1mSカウンタ
CNT50uS ;50μSカウンタ
USART_TEMP ;USARTのワークレジスタ
POINT ;point of table
BUFFER ;buffer
endc
;*************************割り込み退避**************************
ORG 0x000
goto MAIN
ORG 0x004
movwf w_temp
movf STATUS,w
movwf status_temp
movf status_temp,w
movwf STATUS
swapf w_temp,f
swapf w_temp,w
retfie
;*************************************************************
MAIN
;-----------------------------設定----------------------------
;BANK1 Setting
bsf STATUS,RP0
clrf TRISA
movlw B'11110000'
clrf TRISB
movlw B'01000000'
movwf TRISC ;RXピンを入力に設定
movlw B'00100000'
movwf TXSTA ;SET TX MODE
movlw 0FH ;Set Baud Rate 19Kbps
movwf SPBRG ;Set BRG
;BANK0 Setting
bcf STATUS,RP0
clrf INTCON
movlw 07H
movwf ADCON1
;------------------------------------------------------------
;----------------------------初期化---------------------------
clrf PORTA
clrf PORTB
bcf STATUS,C
bcf STATUS,Z
;------------------------------------------------------------
;===========================MAIN_LOOP========================
MAIN_LOOP
bsf STATUS,RP0
READY_CHECK
btfss TXSTA,TRMT
goto READY_CHECK
bcf STATUS,RP0
movlw 'A'
movwf TXREG
call STEPPING_MOTTER
goto MAIN_LOOP
;============================================================
;================= STEPPING MOTORE ==========================
STEPPING_MOTTER
call wait1ms
call wait1ms
movlw B'00000001'
movwf PORTB
call wait1ms
call wait1ms
movlw B'00000010'
movwf PORTB
call wait1ms
call wait1ms
movlw B'00000100'
movwf PORTB
call wait1ms
call wait1ms
movlw B'00001000'
movwf PORTB
RETURN
;================= 15mS WAIT ================================
wait15ms
MOVLW d'3'
MOVWF CNT15mS
wait15ms_loop
CALL wait5ms
DECFSZ CNT15mS,F
GOTO wait15ms_loop
RETURN
;================= 5mS WAIT =================================
wait5ms
MOVLW d'100'
MOVWF CNT5mS
wait5ms_loop
CALL wait50us
DECFSZ CNT5mS,F
GOTO wait5ms_loop
RETURN
;================= 1mS WAIT =================================
wait1ms
MOVLW d'20'
MOVWF CNT1mS
wait1ms_loop
CALL wait50us
DECFSZ CNT1mS,F
GOTO wait1ms_loop
RETURN
;================= 50μS WAIT ================================
wait50us
; 1サイクル(4クロック):0.2μS
; 50μS=0.2μS×250サイクル
MOVLW d'82' ;1
MOVWF CNT50uS ;1
wait50us_loop
DECFSZ CNT50uS,F ;1
GOTO wait50us_loop ;2
RETURN ;2+1
;============================================================
;------------------------------------------------------------
END