[求助] 新人求助

liujianyi   2016-5-15 15:58 楼主
//接收程序
#include  
#define uchar unsigned char
#define uint unsigned int
uchar buffer[9];
uchar a,num;
uint n;
sbit RS=P2^0;    //寄存器选择位,将RS位定义为P2.0引脚
sbit RW=P2^1;    //读写选择位,将RW位定义为P2.1引脚
sbit E=P2^2;     //使能信号位,将E位定义为P2.2引脚
sbit BF=P0^7;    //忙碌标志位,,将BF位定义为P0.7引脚

void delay(uint z)
  {
  uint i,j;
    for(i=z;i>0;i--)
          for(j=110;j>0;j--);
  }
void write_com(uchar com)
{
  RS=0;
  RW=0;
  P0=com;
  delay(20);
  E=1;
  delay(20);
  E=0;
}
void write_data(uchar date)
{
  RS=1;
  RW=0;
  P0=date;
  delay(20);                                                                                                 
  E=1;
  delay(20);
  E=0;
}
void init()
{
E=0;
write_com(0x38);
  write_com(0x0f);
   write_com(0x06);
   write_com(0x01);
   //write_com(0x80);

}
void InitUART  (void)
{        

        PCON=0x00;
    SCON  = 0x50;  //SM0=0  SM1=1  REN=1           
    TMOD = 0x20;   //T1定时器工作方式2
        TR1=1;               
    TH1 = 0xf3;
   TL1=0xf3;                 
        EA=1;
        ES=1;
}                           

void main (void)
{ init();
  InitUART();
  delay(20);
  for(num=0;num<9;num++)
  write_data(buffer[num]);
  delay(200);

while (1)
for( n=0;n<9;n++)
  {        while(RI!=1);
  RI=0;
  buffer[n]=a;

  }
}
void rxd() interrupt 4
{
     ES=0; //关串口中断  
         a=SBUF;//命令存到命令数组
         RI=0; //软件清除接收中断
     ES=1;//开串口中断

}  

//发送程序

#include                     
#define uchar unsigned char
   uchar table[9]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39} ;                 //  '1','2','3','4','5','6','7','8','9'
   int i;
    bit sent_over;
void DelayMs(uchar z)
{ uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);

}
void InitUART  (void)
{                                                                                                                                                  
        PCON=0x00;
    SCON  = 0x50;            
    TMOD = 0x20;
        TR1=1;               
    TH1 = 0xf3;
   TL1=0xf3;                 
        EA=1;
        ES=1;
}                             

void main (void)
{
InitUART();

sent_over=1;                                                                              
         while(1)        
  {   static uchar i=0;   
  if(sent_over==1)   
         {      
                 sent_over=0;               
             SBUF=table[i];   
                 if(i<9)      
                    i++;   
         RI=0;
}
}
}                                  

void txd() interrupt 4
{
  while(RI==0);
   RI=0;
   while(!TI);   
   TI=0;     
}
两个AT89s51单片机,想让甲机发送信号,乙机接收后在1602液晶上显示循环123456789。这个程序哪出错了???

回复评论 (2)

你得告诉咱到底是什么现象啊!你就说错了,我们哪知道是什么原因啊?
点赞  2016-5-16 10:52
到底是什么现象啊!你就说错了,我们哪知道是什么原因啊?没有人能有时间一条一条分析。
点赞  2016-5-29 07:18
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复