原创 请教一个串口收发程序!

2007-1-16 21:57 4893 7 7 分类: MCU/ 嵌入式

http://www.5i51arm.com/viewthread.php?tid=403&highlight





发表于 2007-1-16 10:24  资料 短消息 
请教一个串口收发程序!


实现每接受一个数据,就发送0x01出去的功能,调试出来的结果是:接受到底一个数据,发送出0x01,但是后面 不管接收了多少,没有数据发送出去了。请大家帮我看看,谢谢!源程序 如下:

#include
#include

bit flag;
int i;

InitiateUarts()
{
   //set the RCLK and TCLK to use the Baud Rate Generator for serial 0 and serial 1
   RCLK=1;
   TCLK=1;

   //set the PCON.6/SMOD=0 to make sure that
   //bit 7 of S0CON and S1CON will function as SM0 for UARTs 0 and 1 respectively.
   PCON=0x00;
   
   //disable the multiprocessor communication
   SM2_0=0;
   SM2_1=0;

   //set mode 3 for serial 0
   SM0_0=1;
   SM0_1=1;

   //set mode 3 for serial 1
   SM1_0=1;
   SM1_1=1;

   //enable serial 0 reception
   REN_0=1;
   REN_1=1;

   //set the baud rate to 9600, using Baud Rate Generator
   BRGCON=0x02;
   BRGR0=0xD2;
   BRGR1=0x04;
   BRGCON=0x03;

   //set the priority of serial 0 to the highest level "11"
   PS0=1;  // == IP0.4=1
   IP0H=0x10;  

   //set the priority of serial 1 to the highest level "11"
   PS1=1;
   IP1H=0x01;
  
}

Serial_0() interrupt 6 using 1
{
   if(RI_0)
   {
     flag=1;
     RI_0=0; //clear the flag of serial 0 interrupt
      
   }

}


function()
{
  if(flag)
    {
      S0BUF=0x01;
          flag=0;
           }
        //for(i=0;i<1000;i++);
}

main()
{
   //enable the Uarts 0 and 1 interrupts  
   

   //initiate the uarts 0 and 1
   InitiateUarts();
   EA=1;
   IEN0=0x90;
   IEN1=0x01;


   while(1)
     function();
}

这个问题很简单,虽然菜农没用过669,但道理是一样的~~~


在51系列和任意MCU/ARM/DSP中,串口一般都有发送和接收中断.
其中:
接收中断是在串口接收到一个字符后(这里不说带FIFO的串口).
RI=1将激活串口的接收中断.
进入中断服务程序ISR()后,应该立即取出数据!!!
同时也要求清除RI=0.
这样才能保证下次接收中断的来临,否则就再也进入不了下次的中断了.

同理,发送中断也是如此,但它可以不再发送字符.
因为TI=1引发中断只是告诉你刚发送出去的字符发送成功了.

本例中楼主应用了前后台的设计思路,这样中断处理的时间会很小的.
楼主的设计实际在接收中断里发送数据.
但从以上的论述,即使接收数据无用也应该读出(哪怕无用!!!),要养成这个好习惯.
这样用到其他的MCU或ARM/DSP时就会很快的掌握的.

这是菜农的首次回帖,本来应该由老树或其他斑竹回复的,这样论坛才有生气~~~
否则就倒塌了~~~





发表于 2007-1-17 18:12  资料 主页 文集 短消息 
今天在DSP上遇到同一类问题,估计是被优化了


将全局标志bit flag;
改为:volatile bit flag;

参见帖子:http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2414907
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条