OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6532|回复: 4

请教一下,为什么我在定时器中开总中断EA=1;串口接收数据就不正常了,EA=0;时反而是正常的?

[复制链接]

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-3-26
在线时间
286 小时
发表于 2021-3-30 11:10:13 | 显示全部楼层 |阅读模式
1金钱
请教一下,为什么我在定时器中开总中断EA=1;串口接收数据就不正常了,EA=0;时反而是正常的?
  1. void T2_INIT()
  2. {
  3.     TMR2CN=0X04;    //16 bits,TR2=1;CLK=SYSTEM CLK/12=4M
  4.     TMR2RLH=0XF0;   //10ms:65536-40000=25536=63c0;
  5.     TMR2RLL=0X60;   //1ms:65536-4000=61536=F060;
  6.     ET2=1;     //enable T2 interrupt
  7.     TR2=1;
  8.         EA=1;
  9. }
复制代码


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8207
金钱
8207
注册时间
2020-5-11
在线时间
3702 小时
发表于 2021-3-30 11:15:48 | 显示全部楼层
能不能给个完整的程序,这段代码是无辜的。
专治疑难杂症
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-3-26
在线时间
286 小时
 楼主| 发表于 2021-3-30 13:37:23 | 显示全部楼层
LcwSwust 发表于 2021-3-30 11:15
能不能给个完整的程序,这段代码是无辜的。

void Uart1RxOneByte(void) //interrupt 16
{   
      
              if(SCON1 & 0x01)        
                   {                   
          SCON1 &= (~0x01);
                  Buf_Reci[WriteReci]=SBUF1;
              if(WriteReci<BUFRECI)
                    {               
                        WriteReci++;
                    }
                        SCON1 &= (~0x01);
            
             if((0xEE==Buf_Reci[0])&&(0xB1==Buf_Reci[1])&&(0x04==Buf_Reci[6])&&(0x01==Buf_Reci[9])&&(0xFF==Buf_Reci[13]))
                      {
               SPEAKER_CTL(ON);
                             msDelay(1000);
              // SetTextInt32(0,2,1,1,1);
                   //SBUF1=0X01;
               WriteReci=0;
               //while((SCON1 & 0x02) ==0);
               //SCON1 &= (~0x02);
                           Buf_Reci[13]=0;
                       }
         else if((0xEE==Buf_Reci[0])&&(0xB1==Buf_Reci[1])&&(0x04==Buf_Reci[6])&&(0x00==Buf_Reci[9])&&(0xFF==Buf_Reci[13]))
                       {
               SPEAKER_CTL(OFF);
                msDelay(1000);
          //     SetTextInt32(0,2,1,1,1);
                       // SBUF1=0X02;
            //        while(!(SCON1 & 0x02));
                 //        SCON1 &= (~0x02);   
                WriteReci=0;
                            Buf_Reci[13]=0;
                       }
         else if((0xEE==Buf_Reci[0])&&(0xB1==Buf_Reci[1])&&(0x05==Buf_Reci[6])&&(0x01==Buf_Reci[9])&&(0xFF==Buf_Reci[13]))
                       {
                 SPEAKER_CTL(OFF);
                             msDelay(1000);
                        //SBUF1=0X03;
                    //while(!(SCON1 & 0x02));
                         //SCON1 &= (~0x02);   
                WriteReci=0;
                            Buf_Reci[13]=0;
                       }
        else if((0xEE==Buf_Reci[0])&&(0xB1==Buf_Reci[1])&&(0x05==Buf_Reci[6])&&(0x00==Buf_Reci[9])&&(0xFF==Buf_Reci[13]))
                       {
                  SPEAKER_CTL(ON);
                             msDelay(1000);
                        //SBUF1=0X04;
                    //while(!(SCON1 & 0x02));
                         //SCON1 &= (~0x02);   
                WriteReci=0;
                            Buf_Reci[13]=0;
                       }
      
         }
}

回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-3-26
在线时间
286 小时
 楼主| 发表于 2021-3-30 13:52:09 | 显示全部楼层
LcwSwust 发表于 2021-3-30 11:15
能不能给个完整的程序,这段代码是无辜的。

串口中断void Int_serial1() interrupt 16// using 1 //,若不指定R区,则保存用到的R,并可节省8个字节RAM
{
        // ES=0;/*关串行口中断*/
          //耗时 24us
        //低位在前高位在后
        if(SCON1 & 0x01) // RI1
        {
                SCON1 &= (~0x01);  //RI1=0
        //        ModbusTimer= 16;//9600:16  19200:8;
        
                if(WriteReciPoint<BUFRECI)
                {
                        Buf_Reci[WriteReciPoint]=SBUF1;
                        WriteReciPoint++;
                }
        }
}
回复

使用道具 举报

2

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2013-6-5
在线时间
141 小时
发表于 2021-4-24 17:53:34 | 显示全部楼层
你串口中断里消耗的时间太多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 06:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表