pic16f877a系列单片机串口接收中断屏蔽后,若外部有串口数据不断的发入,单片机会溢出出错吗!

 我来答
johnwanz
2017-06-02 · TA获得超过781个赞
知道小有建树答主
回答量:716
采纳率:80%
帮助的人:231万
展开全部
各种通讯界面, 都会有溢出出错问题. 硬件设计上, 会提供Register状态判断, 以及错误处理控制bit, 如内部串口模块的reset. 实际如何处置, 需要详阅datasheet.
溢出出错是否要处理, 依据需求而定, 如果你根本不需要串口(屏蔽), 不去处理溢出出错也没关系. 如果还需要使用串口, 应该要注意如何将单片机的串口模块, 从恢复错误状态中恢复.
在基本的设计逻辑上, 会建议系统的规划, 应避免去屏蔽任何一个你需要的中断源. 当然, 如果你很清楚自己在做什麼, 有特殊考量, 也不是不可以的.
ps. 部分单片机的内部模块, 具备各自独立的电源控制, 如不需要, 也可以考虑关闭其电源. 在电池系统中, 这部分会比较注意. (模块没有电源, 有没有持续输入就无差别, 启动时同reset)
匿名用户
2017-06-02
展开全部
_CONFIG(HS&WDTDIS&LVPDIS);

bank1 unsigned char b[20]; //数据缓存区,用于存放手机号
unsigned char sflag;

void delay_sms(unsigned char n) //延时程序
{
unsigned int d=1000;
for(;n>0;n--)
{
d=1000;
do{;}while(--d);
}
}
void delay(unsigned int n)
{
unsigned int j;
char k;
for(j=0;j<n;j++)
for(k=2;k>0;k--) NOP();
}
void delay_int(unsigned int n)
{
unsigned int j;
char k;
for(j=0;j<n;j++)
for(k=246;k>0;k--)NOP();
}

void USART_RC_init() //接收SIM900A的手机号初始设置
{
SPBRG=25; //高速模式 波特率9600 4M晶振
TXSTA=0X24;
RCSTA=0X90;
RC6=0X0; //RC6为输出端口TX
RC7=0X1; //RC7为输入端口RX
RCIE=1; //串行接收中断使能
PEIE=1; //外设中断允许,TMR2属于外设中断范围

GIE=1; //开全局中断
}

void interrupt ISR(void) //PIC单片机的所有中断都是这一个入口
{
//***此处用户自行添加定时器中断处理程序***

if(RCIF&&RCIE)
{
unsigned char i=0;
while(i<20)
{
b[i++]=RCREG; //读接收数据,实际上会自动将RCIF清0
delay(51);
}

//RCIF=0;该语句起不到跳出中断的作用

//去掉a的判断条件后,RCIF才能自动清零,否则不断循环,中断出不去

RC1=1;
delay_int(500);
RC1=0;
sflag=1;
//RCIE=0;//跳出判断语句RCIF&&RCIE,注释掉该句话后,灯不再闪两下

}
RC2=1;
delay_int(500);
RC2=0;
}

void main(void) //主函数,单片机开机后就是从这个函数开始运行
{
TRISC=0B11111000; //初始化RC0的输出
RC0=0;
RC1=0;
RC2=0;
USART_RC_init(); //接收SIM900A的手机号初始设置

while(1) //死循环,单片机初始化后,将一直运行这个死循环
{

if(sflag==1)
{
RC0=1;
delay_int(500);
RC0=0;
sflag=0;
//RCIF=0;
//RCIE=1;
USART_RC_init();
}

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式