RCIF标志未设置

问题描述 投票:0回答:1

我正在尝试在两个PIC16F690之间发送数据,并且遇到了麻烦。其中一个PIC的TX引脚连接到另一个PIC的RX引脚,该PIC的TX引脚连接到HC05蓝牙发送器。然后,还必须在一组公共阴极七段显示器上显示发送到接收PIC的数据。

目前,我的代码适用于发送PIC,并且我已经使用该PIC上的HC05进行了检查。问题在于,仅在接收PIC上一次“接收”了数据,而PIC(根据输出)说数据的值为0。

经过测试,连续将十进制值7从一个PIC发送到另一个PIC,因此使用了CREN,但是RCIF标志只被设置了一次。此后它仍然很清晰,在RCREG中找不到任何值7。

我已经在这个问题上待了3天了,这让我发疯,任何帮助将不胜感激。

关于接收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

关于中断:INTER_PORTS :;中断例程

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_DATA标题下,代码如下:

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上的发送功能与此相同,BAUD速率相同,为9600。

assembly pic usart
1个回答
0
投票

您发布的代码片段在读取或写入PIC16F690中的特殊功能寄存器时未正确使用存储区选择。

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

要知道特殊功能寄存器位于哪个存储区,请参见PIC16F690数据手册的本页:

PIC16F690 SFR banks

© www.soinside.com 2019 - 2024. All rights reserved.