PIC16F877的一个串口接收程序的疑问,RCIF可以不清零吗?

2020-02-10 08:50发布

这个程序是老大写的,给我学习,但是,就我这才学2周不到的水平,这种中断的写法有些看不明白啊?他的程序在中断初始化里设置了RCIE=1;GIE=1;PEIE=1;然后在中断程序里是这样写的:

while(RCIF)     //串行接收中断识别
    {
     
     Buf_usart[ Buf_usart[0]]=RCREG;
     RcvLength++;
      
     if(Buf_usart[0]>100)
         Buf_usart[0]=1;
     else   
         Buf_usart[0]++;     //指针+1 ,指针也是接收buf中的总数据数
     //RCIF=0;
     while(OERR)//OERR为1表示有溢出错误位,将CREN清零可以将其清零
     {
      CREN=0;
         CREN=1;
     }
     Flg_ChkCountUart=1;  

     Flg_ChkUart=0;
     CountUart=0;
    }

这个里面似乎把RCIF=0给注释起来了啊?不把RCIF清零能行吗?反正这个项目样品已经做出来了,测试也通过了,不知道这个RCIF不清零能行吗?我看了整篇代码,就这个地方有个被注释起来的RCIF=0;其他地方都没有了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
zzjjhh170
1楼-- · 2020-02-10 11:09
RCIF是一个只读位,当用户程序把RCREG寄存器中的数取走后,或者RCREG寄存器为空时,RCIF位被软件自动清0。
在PIC中还有一些位是不能用软件清0的,只有在特定的情况下被硬件自动清0,如TXIF,TRMT等。
zzjjhh170
2楼-- · 2020-02-10 15:42
另外,即便在编写软件是写入了:RCIF=0这样的语句,在软件运行中也不会起任何作用。
honami520
3楼-- · 2020-02-10 15:58
哦,原来是这样啊!那我再去看看这个寄存器的详细说明去!

一周热门 更多>