对,是kei,昨晚回去在自己笔记本上把keil卸载后重新安装下,ok,程序不飞,后来写一个类似测试程序的时候又飞了,代码如下,基本功能很简单就是开两个定时器(其中t0为普通定时器工作在方式一下,t1为波特率发生器工作在方式二下)和串口中断,当只开t1和串口中断的时候,很正常,当加上t0普通定时器的时候程序软件模拟飞,烧下去也不行,而且所有程序均是0错误0警告的,请各位继续分析,谢谢!
//#include <REGF51RC.H>
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sfr AUXR = 0x8e;
uchar counter;
void INI_INTERRUPT();
void receive();
void send_onebyte(uchar n);
void Delay(uint n);
void timer0_5ms();
void main()
{
counter=0;
INI_INTERRUPT();
while(1)
{
Delay(10);
}
}
//*******************************************************************************//
void INI_INTERRUPT()
{
ES=0;// ;禁止串口中断
TMOD=0x21;// ;设置T1为波特率发生器,定时器模式二运行,自动重装初值
SCON=0x50;// ;8位数据位,无奇偶校验
TH1=0xFD;// ;11.0592MHZ 晶振,波特率9600
TL1=0xFD;//
AUXR &=0xbf;// ;定时器工作在12T模式下,与普通8051相同
RI=0;
EA=1;
ET0=1;
ET1=1;
TR1=1;
TR0=1;
ES=1;
}
//*******************************************************************************//
//function Delay 100us(); delay 100us
//*******************************************************************************//
void Delay(uint n)
{
uint i;
while(n--)
for(i=0;i<80;i++);
}
//*******************************************************************************//
//*******************************************************************************//
void receive()interrupt 4 using 3
{
uchar temp;
if(RI)
{
RI=0;
temp=SBUF;
temp++;
send_onebyte(temp);
}
else
{TI=0;}
}
//*******************************************************************************//
void send_onebyte(uchar n)
{
ES=0;
TI=0;
SBUF=n;
while(TI==0);
TI=0;
ES=1;
}
//*******************************************************************************//
void timer0_5ms(void)interrupt 1 using 1
{
counter=counter+1;
TH0=0xee;TL0=0x00;
send_onebyte(counter);
}
//*******************************************************************************// |