51单片机的串口中断过问题
#include<stdio.h>#include<reg52.h>#include<INTRINS.H>voidDelay(intTime);voidSendDate(...
#include<stdio.h>
#include<reg52.h>
#include <INTRINS.H>
void Delay(int Time);
void SendDate(int Date);
sbit P3_3=P3^3;
sbit P1_0=P1^0;
sbit P1_3=P1^3;
unsigned char code LED_Code[16]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管的数据码值
int Cishu=0;
int PP=0;
int ReceviDate=0;
void Delay(int Time)
{int i;
while(Time--)
{
for(i=0;i<100;i++);
}
}
void Inti() interrupt 2 //外部中断1
{
PP++;
if(PP==16)
PP=0;
P0=LED_Code[PP];
//SendDate(PP);
}
void Time()interrupt 1 //定时器0
{
TH0=0x3c;
TL0=0xb0;
Cishu++;
if(Cishu>20)
{Cishu=0;
P1_0=~P1_0;
P3_3=~P3_3;
}
}
void SendDate(int Date) //发送数据
{ SBUF=Date;
while(TI==0)
TI=0;
}
void Recevide() interrupt 4 //接收数据
{
if(RI)
{
RI=0;
ReceviDate=SBUF;
P1_3=~P1_3;
// P1=ReceviDate&0xff;
// P0=LED_Code[ReceviDate];
}
}
void main()
{
TMOD=0x21; //T0工作于方式1 ,16位定时
SCON=0x50;
EA=1;
ET0=1;
EX1=1;
ES=1;
IT1=1; //下降沿触发
TR1=1;
TR0=1;
TH0=0x3c; //50ms
TL0=0xb0;
TH1=0xFD;
TL1=0xFD;
// PS=1;
while(1)
{SendDate(5);
Delay(20);
}
}
为什么这个程序不能开PS=1,一使PS=1,定时器0就不能工作。各位大神帮忙看看啊! 展开
#include<reg52.h>
#include <INTRINS.H>
void Delay(int Time);
void SendDate(int Date);
sbit P3_3=P3^3;
sbit P1_0=P1^0;
sbit P1_3=P1^3;
unsigned char code LED_Code[16]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管的数据码值
int Cishu=0;
int PP=0;
int ReceviDate=0;
void Delay(int Time)
{int i;
while(Time--)
{
for(i=0;i<100;i++);
}
}
void Inti() interrupt 2 //外部中断1
{
PP++;
if(PP==16)
PP=0;
P0=LED_Code[PP];
//SendDate(PP);
}
void Time()interrupt 1 //定时器0
{
TH0=0x3c;
TL0=0xb0;
Cishu++;
if(Cishu>20)
{Cishu=0;
P1_0=~P1_0;
P3_3=~P3_3;
}
}
void SendDate(int Date) //发送数据
{ SBUF=Date;
while(TI==0)
TI=0;
}
void Recevide() interrupt 4 //接收数据
{
if(RI)
{
RI=0;
ReceviDate=SBUF;
P1_3=~P1_3;
// P1=ReceviDate&0xff;
// P0=LED_Code[ReceviDate];
}
}
void main()
{
TMOD=0x21; //T0工作于方式1 ,16位定时
SCON=0x50;
EA=1;
ET0=1;
EX1=1;
ES=1;
IT1=1; //下降沿触发
TR1=1;
TR0=1;
TH0=0x3c; //50ms
TL0=0xb0;
TH1=0xFD;
TL1=0xFD;
// PS=1;
while(1)
{SendDate(5);
Delay(20);
}
}
为什么这个程序不能开PS=1,一使PS=1,定时器0就不能工作。各位大神帮忙看看啊! 展开
4个回答
展开全部
在接收函数的末尾加一句 TI = 0; 就行了。可能是串行中断标志位TI绝大部分时间为1,而它的优先级最高,屏蔽了定时器0和外部中断1。
追问
关键是我在发送函数里已经清0了啊。为什么还要在中断函数里请0呢。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
PS是优先级寄存器,PS=1,设为高优先级后,定时器0会受到影响,但是不至于不能工作。
更多追问追答
追问
但是定时器0的确就不工作了啊,我也觉得奇怪啊。
追答
void SendDate(int Date) //发送数据
{
SBUF=Date;
while(TI==0) //这里少写了一个分号。
TI=0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
PS是什么寄存器来着,忘记了,你看看是不是这个东西和定时器0有什么关联
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-10
展开全部
没看见你定义ps 啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询