[請益] 請教各位前輩,關於pic16f687的USART
不好意思我有一個問題測試不出來
就是利用PIC16F687的USART來傳送資料
123,97,45,48,125是我要傳送的值, 雖然用試波器測試,有波型出現
可是用終端機接到電腦上值測試是否是我想要的
發現跟我所傳輸的值不太一樣
那也跟改了 BAUDCTL 的設定值試看看,結果還是跟傳送的不符
那我想再請教各位前輩一下,為什麼會不一樣
因為這是我的第一份程式,我想把他給弄懂
希望前輩們能幫助我一下, 謝謝
程式如下:
list p=16f687
#include <P16F687.inc>
; Macros
SelBank0 macro
BCF STATUS,RP1
BCF STATUS,RP0
endm
SelBank1 macro
BCF STATUS,RP1
BSF STATUS,RP0
endm
SelBank2 macro
BSF STATUS,RP1
BCF STATUS,RP0
endm
SelBank3 macro
BSF STATUS,RP1
BSF STATUS,RP0
endm
ORG 0X00
GOTO MAIN
MAIN
CALL INITIAL
USART_TX
MOVLW .123
SelBank0
MOVWF TXREG
USART_TX_0
CLRWDT
BTFSS PIR1,TXIF ;判斷TRANSMIT BUFFER是否滿了
GOTO USART_TX_0
SelBank0
CLRF TXREG
;MOVF TXDATA1,W
MOVLW .97
MOVWF TXREG
USART_TX_1
CLRWDT
BTFSS PIR1,TXIF ;判斷TRANSMIT BUFFER是否滿了
GOTO USART_TX_1
SelBank0
CLRF TXREG
;MOVLW B'00101100'
;SelBank0
;MOVWF TXREG
USART_TX_1_0
CLRWDT
BTFSS PIR1,TXIF ;判斷TRANSMIT BUFFER是否滿了
GOTO USART_TX_1_0
SelBank0
CLRF TXREG
;MOVF TXDATA2,W
MOVLW .45
SelBank0
MOVWF TXREG
USART_TX_2
CLRWDT
BTFSS PIR1,TXIF ;判斷TRANSMIT BUFFER是否滿了
GOTO USART_TX_2
SelBank0
CLRF TXREG
MOVLW .48
;MOVF TXDATA3,W
MOVWF TXREG
USART_TX_3
CLRWDT
BTFSS PIR1,TXIF ;判斷TRANSMIT BUFFER是否滿了
GOTO USART_TX_3
SelBank0
CLRF TXREG
MOVLW .125
;MOVF TXDATA4,W
SelBank0
MOVWF TXREG
GOTO USART_TX
INITIAL
SelBank1
MOVLW B'00001111' ;#B'00001111'
MOVWF OPTION_REG ;ENABLE PORTA/B PULL-UP,INT-FALLING,WDT,WDT RATE 1:128
BANKSEL WDTCON
MOVLW B'00001001' ;#B'00001001'
MOVWF WDTCON ;WDT 1:512,WDT IS ON BIT0=1;SLEEP SET BIT0=0
BANKSEL OSCCON
MOVLW B'01100101' ;#B'01100101'
MOVWF OSCCON ;INTERNAL OSC 4MHz
;;;;;PORTA
SelBank0
BANKSEL PORTA
MOVLW B'00000100' ;#B'00000100'
MOVWF PORTA
BANKSEL TRISA
MOVLW B'00000100' ;#B'00000100'
MOVWF TRISA
BANKSEL WPUA
MOVLW B'00000100' ;#B'00000100'
MOVWF WPUA
BANKSEL IOCA
MOVLW B'00000000' ;#B'00000000'
MOVWF IOCA
;;;;;PORTB
BANKSEL PORTB
MOVLW B'00000000' ;#B'00000000'
MOVWF PORTB
BANKSEL TRISB
MOVLW B'00100000' ;#B'00100000'
MOVWF TRISB
BANKSEL WPUB
MOVLW B'00000000' ;#B'00000000'
MOVWF WPUB
BANKSEL IOCB
MOVLW B'00000000' ;#B'00000000'
MOVWF IOCB
;;;;;PORTC
BANKSEL PORTC
MOVLW B'00000000' ;#B'00000000'
MOVWF PORTC
BANKSEL TRISC
MOVLW B'00001111' ;#B'00001111'
MOVWF TRISC
;;;;;INTERRUPT
SelBank0
MOVLW B'00000000' ;DISABLE GIE,INTE,RABIE
MOVWF INTCON
;;;;;USART
SelBank1
MOVLW B'00100100' ;8-BIT TRANSMISSION,TRANSMIT ENABLED,ASYNCHRONOUS MODE,HIGH SPEED,TSR EMPTY
MOVWF TXSTA
SelBank0
MOVLW B'10010000' ;SERIAL PORT ENABLED,8-BIT RECEPTION,ENABLES CONTINUOUS RECEIVE,DISABLES ADDRESS DETECTION,NO FRAMING ERROR,NO OVERRUN ERROR
MOVWF RCSTA
SelBank1
MOVLW .25 ;SET BAUD RATES AT 9600K WITH HIGH SPEED MODE(4MHZ=25,20MHZ=129)
MOVWF SPBRG
SelBank1
BSF PIE1,TXIE ;ENABLES THE USART TRANSMIT INTERRUPT ;開啟USART
BSF PIE1,RCIE ;ENABLES THE USART RECEIVE INTERRUPT ;開啟USART
SelBank0
BCF PIR1,TXIF ;THE USART TRANSMIT BUFFER IS FULL
BCF PIR1,RCIF ;THE USART RECEIVE BUFFER IS EMPTY
SelBank1
MOVLW B'01001001'
MOVWF BAUDCTL
RETURN
END
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.68.223.81