利用定时器T0自动装载方式,每13us使P11脚轮流输出高低电平,达到输出38.5khz信号。
完整程序如下:
#include
#define uchar unsigned char
#define uint unsigned int
#define ENABLE_ISP 0x82 //晶振<20MHz
sbit P10 = P1^0;
void init ();
void timer0_ISR (void) interrupt 1 using 0
{
EA=0;
TH0 = 0xf2;//26us~38.5KHZ (0xff-0x13=0xf2)
P10=!P10; //P1.1引脚输出38.5khz
EA=1;
}
void init ()
{
TMOD =0x12;
//TMOD =(TMOD & 0xf0) | 0x01;
TH0 = 0xf2;
ET0 = 1;
TR0 = 1;
EA = 1;
P1=0xff;
P1M1=0x11111111B;
P1M0=0x11111111B;
}
void main ()
{
init();
while (1)
{
}
}
用定时器中断做,按照12M经过分频得到,计算出定时器的初始值
38.5kHz,单片机弄不了那么准的。
单片机(stc89c52)想输出一个频率为38.5khz的信号,晶振是12,12T模式,1个机器周期1us,38KHZ好像13us左右就中断一次,单片机就别干别的工作了。13us以内,好像本次中断还没处理完呢,下个中断就又来了。
非要做的话,最好把晶振频率提高,而且单片机工作于1T模式下。