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

2007-1-16 21:57 4372 3 3 分类: 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

文章评论0条评论)

登录后参与讨论
相关推荐阅读
雁塔菜农 2012-04-05 17:51
2012年度新唐Cortex-M0助学开发套件有约束条件赠送申报贴
2012年度新唐Cortex-M0助学套件从4月起每月有约束条件发放16套。 申报人必须是21ic或 EDNC 会员 并具备1月的会龄。 申报时必须注明“遵守约束条件,缴纳250元订金,上...
雁塔菜农 2012-04-05 17:04
2012年度Cortex-M0助学园地推广框图
...
雁塔菜农 2012-04-01 17:59
2012年度Cortex-M0助学园地奖励计划细则
抢楼请点击:菜地公告:即日起创建《菜农Cortex-M0助学园地》(盖楼入口) 每月10号和25号的下午2:50进行2次抢楼,规则同去年12月的疯狂抢楼活动。 奖品由21IC、北航、广州迪圣...
雁塔菜农 2012-02-03 08:19
菜农谋略:搞定牛人宋俊德,对女牛人孙昌旭说:“记住,俺是雁塔菜农~~~ ”
http://www.baidu.com/s?wd=%B2%CB%C5%A9%D0%A6%CC%B8%A1%B6%D0%C2%C0%CB%C3%FB%C8%CB%D0%A7%D3%A6%A1%B7...
广告
我要评论
0
3
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /3 下一条