21ic问答首页 - PIC18F46K22 串口1 不进入接收中断
PIC18F46K22 串口1 不进入接收中断
使用中断接收数据方式,串口助手提供数据,串口1接收完成标 RC1IF 不置1 ; 使用示波器观测到RC7端口波形正常;
PS:此芯片双串口中,串口2接收发送均正常,串口1发送正常;
以下为串口1初始化配置: MOVLW B'00000000' ; 设:RC 端口 为数字接口状态
MOVWF ANSELC ;
MOVLW B'11000000' ; 设:RC6,RC7=IN;其余OUT
MOVWF TRISC ; 装:TRISC 输入输出控制寄存器
; - - - - - - - 初始化:异步 通讯 寄存器 - - - - - - - - - - - - - - - - - - - - - - - -
MOVLW B'00001000' ; BRG16=1
MOVWF BAUDCON1
MOVLW B'00000100' ;
MOVWF TXSTA1
MOVLW B'10110000' ; 异步模式,8位,高速
MOVWF RCSTA1
CLRF SPBRGH1
MOVLW D'138'
MOVWF SPBRG1 ; 波特率设置为115200 D'138'
BSF PIE1,TX1IE ; 置:TX中断 使能
BCF IPR1,TX1IP ; 清:TX中断 低优先级
BSF PIE1,RC1IE ; 置:RC中断 使能
BSF IPR1,RC1IP ; 置:RC中断 高优先级
BSF RCON,IPEN ; 置:中断优先级 使能位
BSF INTCON,PEIE ; 置:外部中断 使能位
BSF INTCON,GIE ; 置:全部 中断 使能位
以下为中断代码:
INTSERVE_H
BCF INTCON,GIE ; 置:全部 中断 使能位
BCF INTCON,PEIE ; 置:外部中断 使能位
; - - - - - - - 中断现场保护- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MOVWF W_TEMP
MOVFF STATUS,STATUS_TEMP
MOVFF BSR,BSR_TEMP
MOVFF PCLATH,PCLATH_TEMP
BTFSC PIR3,RC2IF ; 查:异步 接收中断 标志位
GOTO COMM_LCD ; 转到 LCD接收
BTFSC PIR3,TX2IF ; 查:LCD异步通讯 TX 中断标志
GOTO SEND_DEAL ; 到:"SEND_DEAL" 继续 发送数据
BTFSC PIR1,RC1IF ; 查:异步 接收中断 标志位
GOTO COMM_RS ; 转到 硬件通讯接收
GOTO RE_HRE ;
; - - - - - - - 中断现场保护- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
COMM_RS
BSF PORTC,TEST ;
BCF PIE1,RC1IE ; 清: RX中断 使能
; - - - - - - - 装载 下一个地址 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
INCF RX_COUNT,F
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LFSR 1,H'0550' ; 设:间接数据寄存器 H'0550' 地址指针
MOVLW H'4F'
ADDWF RX_COUNT,W
MOVWF FSR1L
MOVFF RCREG1,POSTINC1 ; 装:寄存器 H'0520'起
GOTO COMM_RS_0B ; 中断返回
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
COMM_RS_0B
BCF RCSTA1,CREN ; 置:RC中断 连续接收 使能
BSF PIE1,RC1IE ; 置:RC中断 使能
BSF RCSTA1,CREN ; 置:RC中断 连续接收 使能
; - - - - - - - 中断现场恢复 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RE_HRE
MOVFF BSR_TEMP,BSR
MOVF W_TEMP,W
MOVFF STATUS_TEMP,STATUS
MOVFF PCLATH_TEMP,PCLATH
BSF INTCON,PEIE ; 置:外部中断 使能位
BSF INTCON,GIE ; 置:全部 中断 使能位
CLRWDT
RETFIE ; 中断返回
求大神指教!!!!
PS:此芯片双串口中,串口2接收发送均正常,串口1发送正常;
以下为串口1初始化配置: MOVLW B'00000000' ; 设:RC 端口 为数字接口状态
MOVWF ANSELC ;
MOVLW B'11000000' ; 设:RC6,RC7=IN;其余OUT
MOVWF TRISC ; 装:TRISC 输入输出控制寄存器
; - - - - - - - 初始化:异步 通讯 寄存器 - - - - - - - - - - - - - - - - - - - - - - - -
MOVLW B'00001000' ; BRG16=1
MOVWF BAUDCON1
MOVLW B'00000100' ;
MOVWF TXSTA1
MOVLW B'10110000' ; 异步模式,8位,高速
MOVWF RCSTA1
CLRF SPBRGH1
MOVLW D'138'
MOVWF SPBRG1 ; 波特率设置为115200 D'138'
BSF PIE1,TX1IE ; 置:TX中断 使能
BCF IPR1,TX1IP ; 清:TX中断 低优先级
BSF PIE1,RC1IE ; 置:RC中断 使能
BSF IPR1,RC1IP ; 置:RC中断 高优先级
BSF RCON,IPEN ; 置:中断优先级 使能位
BSF INTCON,PEIE ; 置:外部中断 使能位
BSF INTCON,GIE ; 置:全部 中断 使能位
以下为中断代码:
INTSERVE_H
BCF INTCON,GIE ; 置:全部 中断 使能位
BCF INTCON,PEIE ; 置:外部中断 使能位
; - - - - - - - 中断现场保护- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MOVWF W_TEMP
MOVFF STATUS,STATUS_TEMP
MOVFF BSR,BSR_TEMP
MOVFF PCLATH,PCLATH_TEMP
BTFSC PIR3,RC2IF ; 查:异步 接收中断 标志位
GOTO COMM_LCD ; 转到 LCD接收
BTFSC PIR3,TX2IF ; 查:LCD异步通讯 TX 中断标志
GOTO SEND_DEAL ; 到:"SEND_DEAL" 继续 发送数据
BTFSC PIR1,RC1IF ; 查:异步 接收中断 标志位
GOTO COMM_RS ; 转到 硬件通讯接收
GOTO RE_HRE ;
; - - - - - - - 中断现场保护- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
COMM_RS
BSF PORTC,TEST ;
BCF PIE1,RC1IE ; 清: RX中断 使能
; - - - - - - - 装载 下一个地址 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
INCF RX_COUNT,F
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LFSR 1,H'0550' ; 设:间接数据寄存器 H'0550' 地址指针
MOVLW H'4F'
ADDWF RX_COUNT,W
MOVWF FSR1L
MOVFF RCREG1,POSTINC1 ; 装:寄存器 H'0520'起
GOTO COMM_RS_0B ; 中断返回
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
COMM_RS_0B
BCF RCSTA1,CREN ; 置:RC中断 连续接收 使能
BSF PIE1,RC1IE ; 置:RC中断 使能
BSF RCSTA1,CREN ; 置:RC中断 连续接收 使能
; - - - - - - - 中断现场恢复 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RE_HRE
MOVFF BSR_TEMP,BSR
MOVF W_TEMP,W
MOVFF STATUS_TEMP,STATUS
MOVFF PCLATH_TEMP,PCLATH
BSF INTCON,PEIE ; 置:外部中断 使能位
BSF INTCON,GIE ; 置:全部 中断 使能位
CLRWDT
RETFIE ; 中断返回
求大神指教!!!!
赞0
那可能是程序配置的问题了
评论
2022-03-10
赞0
已经用示波器看过接收引脚RC7波形了,是没有问题的
评论
2022-03-10
赞0
示波器测一下波形是否正常,确认收发管脚没搞错
评论
2022-03-09
赞0
我也怀疑过硬件焊接问题,已经排除了
排除方法:1、我重新焊接过对应引脚;
2、我将RC7引脚作为普通输入I/O口,通过外部输入电平高低电路指示灯,是正常的;
但是,我切换RC7为串口使用时,无法触发中断,也没有接收完成标志;
评论
2022-03-09
@ZF1231666 :有几块板子?可以焊两块板子对比测试
@地瓜patch :按照您给的方法,我是用串口助手发送数据“AA 55 AA 55”,发送间隔1S,在程序中每1S + 10mS读取寄存器 RCREG1 并发送到显示屏观察,读出数值一直为 “00 00 ”
@ZF1231666 :1us太短,等10ms试试
@地瓜patch :按照您给的方法,我是用串口助手发送数据“AA 55 AA 55”,发送间隔1S,在程序中每1S + 1uS读取寄存器 RCREG1 并发送到显示屏观察,读出数值一直为 “00 00 ”
@ZF1231666 :可以用延时的方法,预计多长时间接收完成,延时这个时间后,去读接收寄存器
@地瓜patch :中断使能和优先级均已打开,我在程序中检测并将对应标志发送到显示屏上看过,是正常的
@地瓜patch :没有接收完成标志,应该怎么进行查询?
串口1发生正常的话,串口的初始化是没问题的,建议不用中断,先用查询的方法测试一下能否成功接收数据
串口1的接收使能,中断使能,优先级是否全部打开?
赞0
评论
2022-03-08
您需要登录后才可以回复 登录 | 注册