利用89C51产生38KHZ方波驱动红外发射管问题
/*************TCC相关配置****************/
TMOD = 0x02;
EA=1;
ET0=1;
TH0 = 243; //11.0592 50Hz
TL0 = 243;
TR0 = 1;
/***************************************************
**函数名称:void timer0(void) interrupt 1
**函数功能:TCC中断服务函数
***************************************************/
void timer0(void) interrupt 1
{
// count++;
if(flag == 1)
SEND = !SEND;
else
SEND = 0;
}
中断及TCC配句语句如上,在中断里如果将count++这句屏蔽掉,输出的波形就是38KHZ,但如果把count++回复后,输出的波形就变成了25KHZ,也就是原先13us翻转一次变成了20us才能翻转一次。也试着改成8us进一次中断,但输出波形依旧是20us。求解~~
我不禁想问:单片机主频多少啊?一条++语句编译之后需要7个us来执行....
既然++占了时间,把它放后面呗
void timer0(void) interrupt 1
{
if(flag == 1)
SEND = !SEND;
else
SEND = 0;
count++; //放这里试试看
}
还有一种可能,就是编译器处理问题,是不是增加了++语句之后
需要计算,某些寄存器需要压栈,这个时间挺可观的,我的同时测试过
只要压栈,那个时间是固定的
没有计算的时候,编译器是不是优化了?
我瞎掰的,你看看就好,别被我忽悠了
位置的话试过了。没啥区别。
*************TCC相关配置****************/
TMOD = 0x02;
EA=1;
ET0=1;
TH0 = 243; //11.0592 50Hz
TL0 = 243;
TR0 = 1;
/***************************************************
**函数名称:void timer0(void) interrupt 1
**函数功能:TCC中断服务函数
***************************************************/
void timer0(void) interrupt 1
{
// count++;
if(flag == 1)
SEND = !SEND;
else
SEND = 0;
}