导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→p89c51rd2的串行通讯问题

* 96227: p89c51rd2的串行通讯问题

   fashin 
fashin发表的帖子 

 p89c51rd2的串行通讯问题
急,51问题:
   这我写的一个串行通讯的程序阿。发送数据没有问题啊,但是接受数据可以进入中断,但是 temp_address=SBUF句中,sbuf的数据就是付值不给temp_address.为什么?
#include  <reg51.h>  
sbit p1_7=P1^7;
sbit work_state=P1^0;
unsigned char code address=0x01;
unsigned char data temp_address;
unsigned char data temp_function;
unsigned char data flag_uant;
unsigned char data flag_txd;
unsigned char code on[]="OK!";
unsigned char code off[]="off!";
unsigned char code error[]="command error !";

void init()
{
  IE=0;
  temp_address=0x00;
  temp_function=0x00;
}

void init_uant()
{
  PCON&=0X3F;
  TMOD=0X20;
  TH1=0XFD;
  TL1=0XFD;
  SCON=0X50;
  TR1=1;
  flag_uant=0;
  flag_txd=1;
  ES=1;
  EA=1;
}
void uant(void) interrupt 4
{
  
   if(RI==1)
       {
                  RI=0;

      temp_address=SBUF;
        if(temp_address==address) flag_uant=2;
  else
          {      flag_uant=1;
     
     }
  
   }
   if(TI==1)
   {
     TI=0;
  flag_txd=1;
   }
}
void main()
{
 char i;
 init();
  init_uant();
  while(1)
  {
     if(flag_uant==2)
    {
        i=0;
      while(error[i]!='\0')
    {
    flag_txd=0;
    SBUF=error[i];
    while(flag_txd==0);
    i++;
    }
  }
 }
}

发表时间:2006年7月31日17:28:54

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  96268.[详细]huifu
摘要:我觉得你最好还是把RI=0那句放到else语句之后 等所有中断操作都完成之后在把中断位清0  如果总是传不过去 你可以尝试着用ACC做个中间传递.我能给你的也就这么多建议了......(168字)
- [wangxueyou][956次] 2006年8月1日

  96281.[详细]谢谢你了啊
摘要:我按你说的改成如下,发现还不是不行,你能不能在帮我看一下.急用啊!!!!!谢谢! #include<reg51.h> sbit p1_7=P1^7; sbit work_stat......(1160字)
- [fashin][768次] 2006年8月2日

  96287.[详细]huifu
摘要:你可以尝试 SCON=0x7c;   如果使用的波特率是9600的话 那就把PCON=0x00; 其他的我也看不出来什么毛病了......(97字)
- [wangxueyou][903次] 2006年8月2日

[上一篇帖子]:回副你要什么样的,你把你的邮箱发过来
[下一篇帖子]:ULN2803怎么用?把单片89C52P1口出来的信号放大一下,控制8路12V继电器,我看ULN28