发送子程序: #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,就不行了... |