你好,我这个程序想加个暂停开始的功能,所以自己加了个串口中断来接收数据,接收到0x00则暂停,0x01则继续,改完的程序如下,能不能帮我看一下哪里出问题了
#include<reg51.h>
//unsigned long T;
unsigned char PuZhh[]="00:00:00\n";
unsigned char hour=0,min=0,sec=0; //定义时、分、秒变量
bit flag=0;//中断标志
bit frameFlag=1;//暂停标志
/*
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}*/
void UsartConfiguration()
{
// IT0=1; //INT0负跳变触发
TMOD=0x21; //定时器工作于方式1
SCON=0X50; //设置为工作方式1
PCON=0X80; //波特率加倍
TH0=0x3c; //50ms
TL0=0xb0;
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
EA=1; //CPU开中断总允许
ET1=0; //禁止定时器1中断
ET0=1; //开定时中断
// EX0=1; //开外部INTO中断
TR0=1; //启动定时
TR1=1;
ES=1;
}
void SendData(char date)
{
SBUF = date; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
void dispaly()
{
PuZhh[0]=hour/10+'0'; //时
PuZhh[1]=hour%10+'0';
PuZhh[3]= min/10+'0'; //分
PuZhh[4]= min%10+'0';
PuZhh[6]= sec/10+'0'; //秒
PuZhh[7]= sec%10+'0';
}
void main()
{
unsigned char j;
UsartConfiguration();
while(1)
{
if(flag&&frameFlag)
{
flag=0;
dispaly();
for(j=0;j<9;j++)
SendData(PuZhh[j]);
}
}
}
void time0() interrupt 1 //计时
{
static unsigned char m=0;
TH0=0x3c;
TL0=0xb0; //50ms
m++;
if(m>=20)
{
m=0;
sec++;
P0=~P0; //验证定时器0是否工作
if(sec>=60)
{
sec=0;
min++;
if(min>=60)
{
hour++;
if(hour>=24)
hour=0;
}
}
flag=1;
}
}
void serial()interrupt 4
{
unsigned char rxch;
if(RI) //中断标志 RI=1, 数据接收
{
RI = 0; //软件清零
rxch = SBUF; //读缓冲
if (rxch==0x00) //停止指令
{
frameFlag =0;
}
if (rxch==0x01) //继续指令
{
frameFlag =1;
}
}
} |