高手在么?我的单片机(stc89c52)想输出一个频率为38.5khz的信号,晶振是12,程序怎么写

2024-12-26 16:18:51
推荐回答(4个)
回答1:

利用定时器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)
{
}
}

回答2:

用定时器中断做,按照12M经过分频得到,计算出定时器的初始值

回答3:

38.5kHz,单片机弄不了那么准的。

回答4:

单片机(stc89c52)想输出一个频率为38.5khz的信号,晶振是12,12T模式,1个机器周期1us,38KHZ好像13us左右就中断一次,单片机就别干别的工作了。13us以内,好像本次中断还没处理完呢,下个中断就又来了。
非要做的话,最好把晶振频率提高,而且单片机工作于1T模式下。