Assembly RCIF标志未设置

Assembly RCIF标志未设置,assembly,pic,usart,Assembly,Pic,Usart,我试图在两个PIC16F690之间发送数据,但遇到问题。其中一个PIC的TX引脚连接到另一个PIC的RX引脚,该PIC的TX引脚连接到HC05蓝牙发射机。发送到接收PIC的数据也必须显示在一组公共阴极七段显示器上 目前,我的代码适用于传输PIC,我已使用该PIC上的HC05对此进行了检查。问题是数据在接收PIC上仅“接收”一次,PIC(根据输出)表示数据值为0 这是通过将十进制值7从一个PIC连续发送到另一个PIC进行测试的,因此使用了CREN,但RCIF标志只设置了一次。之后,它保持清晰,在R

我试图在两个PIC16F690之间发送数据,但遇到问题。其中一个PIC的TX引脚连接到另一个PIC的RX引脚,该PIC的TX引脚连接到HC05蓝牙发射机。发送到接收PIC的数据也必须显示在一组公共阴极七段显示器上

目前,我的代码适用于传输PIC,我已使用该PIC上的HC05对此进行了检查。问题是数据在接收PIC上仅“接收”一次,PIC(根据输出)表示数据值为0

这是通过将十进制值7从一个PIC连续发送到另一个PIC进行测试的,因此使用了CREN,但RCIF标志只设置了一次。之后,它保持清晰,在RCREG中找不到值7

我已经在这个问题上讨论了三天了,它让我发疯,任何帮助都将不胜感激

关于接收PIC的设置代码:

MOVLW B'00100000' 
MOVWF TRISB ;Setup PORTB with inputs for the RCIF

BSF OPTION_REG,PS0 ;Allow for Timer0 and Pull up resistors
BCF OPTION_REG,PSA
BCF OPTION_REG,7    ;Enable Pullups


;For data sending
CLRF PIE1    
BCF    TXSTA,TX9    ;Sends 8 bits when transmitting
BSF    TXSTA,TXEN    ;Enable the transmit function
BCF    TXSTA,SYNC    ;Working in Asynchronous Mode
BSF    TXSTA,BRGH    ;Enable the high baud rate generator

MOVLW   B'11001'    ;Calculated using (FOSC/BAUD*16)-1 (Assumed FOSC was 4M)  
MOVWF   SPBRG

BCF   STATUS,RP0

BSF    RCSTA,SPEN ;Enable serial pins at RB7 and RB5
BCF    RCSTA,RX9
BCF    RCSTA,SREN  ;In UART mode, doesnt care
BSF    RCSTA,CREN ;Constant Reception

BCF    RCSTA,FERR ;Framing error bit
BCF    RCSTA,RX9D ;Disable checking for 9th bit

MOVFW   RCREG ;Clears receiving register to clear RCIF

CLRF    TXREG

BCF PIE1,TMR2IE             ;Disable Timer2
BSF PIE1,RCIE               ;Permanently enabled

BSF INTCON, T0IE ;Enable Timer Interrupt
BSF INTCON, PEIE ;Enable the peripheral interrupt  variable
BSF INTCON, GIE ;Enable the Global Interrupt variable
然后在发送数据方面:

BANKSEL PORTB
MOVLW   B'00110000' ;30 in HEX equals 0 in ASCII
ADDWF   UNITS,W
CALL    SEND_DATA
RETURN

SEND_DATA:
TX_WAIT: 
BTFSS   PIR1,TXIF
GOTO   TX_WAIT 
MOVWF   TXREG        ;load data to be sent...

RETURN
在接收数据方面:

GET_DATA:
MOVFW   RCREG
MOVWF   UNITS
CALL    TRANSMIT
RETURN
在中断方面: 国际港口:;中断程序

BTFSC INTCON,T0IF ;If timer overflow bit set, go to timer interrupt
CALL INTER_TOVF

BTFSC   PIR1,RCIF
CALL    GET_DATA

RETFIE
定时器用于更新七段显示

我试图添加代码来清除OERR和FERR错误,但这没有帮助,我最初将它们放在GET_数据标题下,代码如下:

OVF_ERROR:
BCF     RCSTA,CREN   
MOVFW    RCREG 
MOVFW    RCREG
BSF     RCSTA,CREN
RETURN

FERR_ERROR:
MOVFW    RCREG
BTFSC    RCSTA,FERR
GOTO        FERR_ERROR 
RETURN

谢谢你的指导,这一直是一个头痛的问题,如果我能提供任何关于所用代码的清晰信息,我会的。另一个PIC上的发送功能与此相同,波特率为9600。

在读取或写入PIC16F690中的特殊功能寄存器时,您发布的代码片段未显示正确使用了银行选择

错误的银行选择似乎是代码的问题,但如果不查看整个项目,就无法确定。(请不要发布完整的代码并要求审阅)

要了解特殊功能寄存器所在的银行,请参阅PIC16F690数据表中的本页:


在读取或写入PIC16F690中的特殊功能寄存器时,您发布的代码片段未显示正确使用银行选择

错误的银行选择似乎是代码的问题,但如果不查看整个项目,就无法确定。(请不要发布完整的代码并要求审阅)

要了解特殊功能寄存器所在的银行,请参阅PIC16F690数据表中的本页:


那太尴尬了。我本以为我已经检查了所有的东西,但我在很多地方都漏掉了班克塞尔的命令。谢谢:)那太尴尬了。我本以为我已经检查了所有的东西,但我在很多地方都漏掉了班克塞尔的命令。谢谢:)