导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→AVRMEGA32L接收中断处理程序里的全局变量无法返回接收[guest]

 *第25610篇: AVRMEGA32L接收中断处理程序里的全局变量无法返回接收值

  
楼 主:guest 2004年9月11日09:17
 AVRMEGA32L接收中断处理程序里的全局变量无法返回接收值
我在做AVRMAGE32L与计算机串口通信时,发现接收中断处理程序里的全局变量无法返回接收值,请大虾指点。谢谢! 

unsigned char preceive,rec_len,send_ok,psend;  
unsigned char received_ok;
unsigned char receivebuf[20];
unsigned char sendbuf[20];
unsigned char send_max,i;
     .
     . 
     .

interrupt [USART_RXC] void usart_rx_isr(void)
{
         unsigned char data;     
    #asm("cli")    

    if (UCSRA&(1  <  <RXC))  
       {
        data=UDR; 
        receivebuf[preceive]=data;  
           if(receivebuf[0]==0x02)      //字头
                     {    
                         preceive++;
                       if(preceive==3)
                        rec_len=receivebuf[1];  
               }  
               if((preceive==rec_len) &&preceive>  3))                //接收完received_ok=1
            {
                   if(data==3)     //字结束
                    {                                             received_ok=1;
                            send_ok=0; 
                    }   
                         preceive=0;
                         rec_len=0;
                }
       }   
       #asm("sei")   
       
}


interrupt [USART_TXC] void usart_tx_isr(void)
{
    #asm("cli") 
    if(send_ok==0)
        {
           UDR=sendbuf[psend];    
                      psend++;
                      if(psend>  =send_max)
                  {
                     psend=0;
                     received_ok=0;
                      send_ok=1;
                  }
       }
       #asm("sei")

void main(void)
{
         .
         .
         .
         UCSRA=0x00;           
    UCSRB=0xD8;     
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=51;
         #asm("sei")
             received_ok=0;
    preceive = 0;
    send_ok=0xff; 
    while (1)
          {
                     
                      if(received_ok==1)
                   //接收中断退出后received_ok又是以前值,所以进不来
            {
                data1=1;    
                data2=2;           
                data3=0;           
                data4=0xcc; 
                   send_read(receivebuf[2],0x09);  
            } 
               delay(1000);
          };
}



>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:[推荐]

[下一篇主题]:请教