打印

串口数据为何只能发送一次?

[复制链接]
4395|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ningling_21|  楼主 | 2009-7-12 17:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
为何接收时,只能收到一次?

#include <reg52.h> //51芯片管脚定义头文件
#include <intrins.h> 
#define uchar unsigned char 
#define uint unsigned int 
#define nop _nop_()

sbit ir     =P3^0;
sbit led =P3^1;
sbit led2=P3^3;
sbit led1=P1^0;
sbit bz  =P1^7;
sbit irled=P0^1;
sbit bz1 =P2^0;


/********************************************************** 
延时t毫秒 
11.0592MHz时钟,延时约1ms 
**********************************************************/ 
void delay(uint s) 

  uchar k; 
  while(--s) 
  { 
    for(k=0; k<125; k++) ;
   } 

/********************************************************** 
主函数 
**********************************************************/ 
void main() 

 uchar i=0x01,k=1;

 led1=0;
 led2=0;
 bz1 =0;
 TMOD=0x21;
 SCON=0x40; //方式1,不允许接收   
 TH1=0xFD;
 TL1=0xFD;    //9600 
 ET1=0;     
 PCON=0x00;
 SCON=0x50;
 EA=1;
 ET0=1;
 delay(10);
 TR1=1;

delay(100); 
led1=1;
led2=1;
///////////////////////////////////////////////////
///////////////////////////////////////////////////
while(1) 
{      
 
  delay(10);   
  k++;
  if(k==150) 
  {         
    led1=!led1;
    k=0;
   }     
    delay(40); 
    TI=0;
    SBUF=0XA5;
    while(!TI);
    TI=0;
    SBUF=0X5a;
    while(!TI);
    TI=0;
    led=0;
    led2=0;
    bz1=1;
    delay(10);
    bz1=0; 
    led2=1;
  

}

相关帖子

沙发
ningling_21|  楼主 | 2009-7-12 22:05 | 只看该作者

只有上电才会发送一次

使用特权

评论回复
板凳
lbx_00| | 2009-7-13 09:43 | 只看该作者

正常复位了吗

你的程序不应该只发一次,应该一直发,另外,我没有检查你的串口初始化,我认为是对的

使用特权

评论回复
地板
bjc125| | 2009-7-13 10:27 | 只看该作者

不是发一次 后面发送的都是00

你的程序中sbit led =P3^1;有问题.
P3.1本来就是串口测发送端口 用串口时最好不要用P3.1
而你在循环程序中有led=0 ;你不用p3.1就可以了。
深层次原因请高手解答吧.

使用特权

评论回复
5
九浩| | 2009-7-13 15:31 | 只看该作者

你的程序有点乱!

加个注释看看!

使用特权

评论回复
6
ningling_21|  楼主 | 2009-7-13 22:12 | 只看该作者

多谢楼上几位指点迷津

原来是:led=0;  惹得祸端...

只要去掉就OK了。

但不知道为何...

使用特权

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

本版积分规则

5013

主题

17735

帖子

51

粉丝