你好,我這個程序想加個暫停開始的功能,所以自己加了個串口中斷來接收數據,接收到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;
}
}
} |