打印

帮我看看这个串行接口通信有什么不对

[复制链接]
1529|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dqstar|  楼主 | 2007-8-21 12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送子程序:
#include<reg51.h>
void delay(unsigned int);
void main(void)
{
    TMOD=0x20;
//    PCON=0x80;    //设置SMOD=1
    TH1=0xf3;
    SCON=0xd0;  //置串行口工作于方式3,REN=1允许接收,SM2=0
    TR1=1;
    IE=0x90;    //开总中断和串行口中断

    delay(4000);

    TB8=1;        //准备发送地址
    ACC=0x01;    //发出01地址
    SBUF=ACC;

    while(1);

}
void uart(void) interrupt 4
{
    if(TI)
    {
    delay(2000);
    TI=0;
    TB8=0;        //准备发送数据
    ACC=0x0f;
    SBUF=ACC;
    }
    else
    {
    ACC=SBUF;
    RI=0;
    }
}

void delay(unsigned int t)
{
    unsigned int i,j;
    for(i=0;i<t;i++)
    for(j=0;j<100;j++);
}

接收程序:
#include<reg51.h>
void main(void)
{
    TMOD=0x20;
//    PCON=0x80;
    TH1=0xf3;
    SCON=0xd0;   //置串行口工作于方式3,REN=1
    TR1=1;
    SM2=1;         //只接收地址帧状态

    P1=0;
    while(!RI);
    RI=0;
    ACC=SBUF;
    P1=ACC;
    if(ACC==0x01)
    {
        SM2=0;     //准备接收数据
    }
    IE=0x90;
    while(1);    

}
void uart1(void) interrupt 4
{
    if(RI)
    {
        ACC=SBUF;
        P1=ACC;
        RI=0;
    }
    else
    TI=0;
}
我用PROTEUS仿真,一点问题都没有,放在硬件上就是不行!!
用方式1,我会,改成方式2/3,就不行了...

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

34

帖子

1

粉丝