标题: 怎么开启stc89c52单片机定时器2,用定时器2产生一个38khz的方波 [打印本页]

作者: 白亚涛147    时间: 2022-4-28 11:03
标题: 怎么开启stc89c52单片机定时器2,用定时器2产生一个38khz的方波
用定时器2产生一个38khz的方波信号。定时器0和1都被占用了,拜托各位大神了
作者: hslcac    时间: 2022-4-28 11:57

2A772E52-D709-45d2-A36A-70E7715EE851.png (10.76 KB, 下载次数: 48)

2A772E52-D709-45d2-A36A-70E7715EE851.png

作者: yzwzfyz    时间: 2022-4-28 12:05
1、用定时器2做中断
2、中断时间:1/38khz/2=13158uS
3、每次中断将P1.1求反,则P1.1就输出38khz了。
作者: 51FAN2020    时间: 2022-4-28 12:10
#include "reg52.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

//-----------------------------------------------

/* define constants */
#define FOSC 11059200L

#define F38_4KHz    (65536-18432000/4/38400)

/* define SFR */

sfr T2CON = 0xc8;                   //timer2 control register
sbit TF2  = T2CON^7;
sbit TR2  = T2CON^2;

sfr T2MOD = 0xc9;                   //timer2 mode register
sfr RCAP2L = 0xca;
sfr RCAP2H = 0xcb;
sfr TL2 = 0xcc;
sfr TH2 = 0xcd;

sbit T2 = P1^0;                     //Clock Output pin

//-----------------------------------------------

/* main program */
void main()
{
    T2MOD = 0x02;                   //enable timer2 output clock
    RCAP2L = TL2 = F38_4KHz;        //initial timer2 low byte
    RCAP2H = TH2 = F38_4KHz >> 8;   //initial timer2 high byte
    TR2 = 1;                        //timer2 start running
    EA = 1;                         //open global interrupt switch

    while (1);                      //loop
}

作者: 人人学会单片机    时间: 2022-4-28 12:28
在STC-ISP软件上面,配置一下,然后再使能T2的中断,和EA=1,就可以启动定时器2了,然后添加定时器2的中断服务函数即可,一般都是自动重装初值的。
作者: lkc8210    时间: 2022-4-28 12:49
yzwzfyz 发表于 2022-4-28 12:05
1、用定时器2做中断
2、中断时间:1/38khz/2=13158uS
3、每次中断将P1.1求反,则P1.1就输出38khz了。

少了一个小数点
13.158us
作者: lds2131    时间: 2022-4-28 13:05
帮忙顶起来
作者: zhxiufan    时间: 2022-4-28 13:58
        RCAP2H=(65536-13)/256;
        RCAP2L=(65536-13)%256;
          TH2=RCAP2H;
        TL2=RCAP2L;
        ET2=1;  
        TR2=1;
作者: 白亚涛147    时间: 2022-4-28 14:37
谢谢大家支持
作者: 188610329    时间: 2022-4-28 16:49

#define FOSC  11059200L //设置主频
#define Mode  4  //12T为4, 6T为2
#define OUTPUT_HZ 38400  //方波频率
#define T2Reload (65536-FOSC/Mode/OUTPUT_HZ) //定时器初值(自动计算)

sfr T2CON = 0xc8;
sbit TF2  = T2CON^7;
sbit TR2  = T2CON^2;
sfr T2MOD = 0xc9;
sfr16 RCAP2 = 0xca;
sfr16 Timer2 = 0xcc;

void main()
{
    T2MOD = 0x02;                   //从P1.0(T2引脚) 输出方波
    RCAP2 = Timer2 = T2Reload;      //T2初值
    TR2 = 1;                        //T2运行
    while (1);
}

注意: 不需要开T2中断,不需要设置输出引脚,方波的输出,是定死在P1.0的,前3个define 根据你单片机设置情况,以及需要的方波填写。






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1