求大神帮看下51单片机的串口程序?
时间:10-02
整理:3721RD
点击:
本意是外部中断收到一个字节,中断,开启定时器0,disp_tc代表定时器中断三次,后将得到的值r发回串口,等待下次的外部中断触发,现在出现的问题是,隔一秒就发一个字节,一直发,我是想中断一次发回一个,求大神帮忙看下哪里出错了?感激不尽
void ser() interrupt 4
{
RI=0;
P0=SBUF;
flag=1;
}
/*******************************************
* 函数名称: main()
/********************************************/
void main()
{
oe=0; //
s0=1; s1=1; //
s2=0;s3=0; //
disp_tc=0;
init_serial_T1(); //初始化串口
while(1)
{
if(flag==1)
{ flag=0;
t0_init(); //初始化定时器0 计数器1
}
if(disp_tc==3)
{ disp_tc=0;
init_serial_T1();
play();
SBUF=r;
while(!TI);
TI=0;
delay_1ms(1000);
}
}
}
void c10ms_out() interrupt 1
{
TR0=0; //关闭定时
TR1=0; //关闭计数
if(disp_tc<2)
{
TH0=0x3C;
TL0=0xB0;
TL1=0x00;
TH1=0x00;
TR0=1;
TR1=1;
}
disp_tc+=1;
}
void ser() interrupt 4
{
RI=0;
P0=SBUF;
flag=1;
}
/*******************************************
* 函数名称: main()
/********************************************/
void main()
{
oe=0; //
s0=1; s1=1; //
s2=0;s3=0; //
disp_tc=0;
init_serial_T1(); //初始化串口
while(1)
{
if(flag==1)
{ flag=0;
t0_init(); //初始化定时器0 计数器1
}
if(disp_tc==3)
{ disp_tc=0;
init_serial_T1();
play();
SBUF=r;
while(!TI);
TI=0;
delay_1ms(1000);
}
}
}
void c10ms_out() interrupt 1
{
TR0=0; //关闭定时
TR1=0; //关闭计数
if(disp_tc<2)
{
TH0=0x3C;
TL0=0xB0;
TL1=0x00;
TH1=0x00;
TR0=1;
TR1=1;
}
disp_tc+=1;
}
不会看
自己搞定了。
少了个ES=0;所以串口一直发
这个作何解释 是不是串口通信结束的设置语句
没关串口中断?收发都进中断
