Chinaunix首页 | 论坛 | 博客
  • 博客访问: 288909
  • 博文数量: 23
  • 博客积分: 3011
  • 博客等级: 中校
  • 技术积分: 662
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-26 13:43
文章分类

全部博文(23)

文章存档

2009年(19)

2008年(4)

我的朋友

分类: 嵌入式

2009-08-19 00:50:54

实际上很简单,非常简单。
51单片机的SCON寄存器有个SM2位,如果该位置1,并且串行通信方式置为11位,则该单片机工作在多机通信方式下(即从机),在SM2=1的情况下,只有收到的TB8=1单片机才会产生中断,此时判断该地址是否是本机来判断是否接收接下来的数据。
 
如下代码段,其判断地址范围“tmp>=0xF0 && tmp<=0xF7”,这个范围都是该从机的地址:
 

void serial0_interrupt() interrupt 4
{
    UINT8 tmp;

    if(_testbit_(RI)){
        RI = 0;

        if(RB8==1){
            tmp = SBUF;
            if(tmp>=0xF0 && tmp<=0xF7){
                g_addrByte = tmp;
                f_recv_vmc_msg = TRUE;    //置收到数据标记

                SM2 = 0;        //收到自己的地址,开始接收其它数据
           } else {
                f_recv_vmc_msg = FALSE;
            }
        }
    }
}

阅读(1716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~