求关注,Uart中断处理层的问题

2020-01-25 15:38发布

本帖最后由 ajfan 于 2013-1-28 08:47 编辑

原来普通帖子发过,无奈关注的人不多,只好用悬赏看是否可以有大侠能帮忙解答下

请教各位关于UART接收到串口发出的字符后中断处理的问题:
第1个问题,
   每接收到一个字节后的中断是从语句1开始,然后关中断,只执行一次  if(RI0),然后再开中断,然后第2个字符,重新开始执行中断处理,直到接收完所有的字符?
   或是接收到一个字节后中断从语句1开始,然后关中断,然后执行N次 if(RI0),直到接收完所有字符后退出循环,再开中断,然后退出中断处理?
void UART0_ISR (void) interrupt 4
{
  语句1;
语句2;
  EA=0;  //关中断
  if(RI0)
    {
      RI0=0;
      UART0_Buffer[com_dat] = SBUF0;    //把从串口读出的字符存到数组
    com_dat++;
     }
   EA=1;           
}

第2个问题,如果用8051f的USB调试器硬件仿真uart程序,是不是调试时不能响应UART中断?
谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
flywater
1楼-- · 2020-01-25 21:04
 精彩回答 2  元偷偷看……
xk0028
2楼-- · 2020-01-26 01:13
定义一个数组,长度》=最大字符串长度,定义全局变量n,用于指向数组中的位置,
开串口,开中断,每次串口中断把收到的字符保存在数组第n位,然后n++;
接收完成后n=0;

必须区别不同符串,防止接收到的多个字符串连在一起:
可以接收一个字节后开定时器,等接收下一个字节时读出间隔时间然后清除定时重新计时,如果超时,处理当前自符串,准备接收下一个字符串;
或者字符串中加入启始标志和结束标志;
或使用固定长度字符串;

你看着写程序吧

mhw
3楼-- · 2020-01-26 02:39
void UART0_ISR (void) interrupt 4
{
  语句1;
语句2;
//  EA=0;  //关中断
  if(RI0)
    {
      RI0=0;
      if( com_dat>=sizeof(UART0_Buffer))
     {
            com_dat=0;//或者使用其他方式处理缓冲区溢出
     }
      UART0_Buffer[com_dat] = SBUF0;    //把从串口读出的字符存到数组
    com_dat++;
     }
//  EA=1;           
}
ajfan
4楼-- · 2020-01-26 05:07
谢谢楼上2位,估计我没有说明白
实际上我想了解,UART中断处理是怎么执行的?是每接收到一个字节就中断一次然后处理,还是中断一次,然后通过  if(RI0)
将所有字节收到后再退出中断?
as9901
5楼-- · 2020-01-26 10:36
一个字节中断一次
ajfan
6楼-- · 2020-01-26 14:47
 精彩回答 2  元偷偷看……

一周热门 更多>