找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1593|回复: 9
收起左侧

怎么开启stc89c52单片机定时器2,用定时器2产生一个38khz的方波

[复制链接]
ID:815936 发表于 2022-4-28 11:03 来自手机 | 显示全部楼层 |阅读模式
100黑币
用定时器2产生一个38khz的方波信号。定时器0和1都被占用了,拜托各位大神了

回复

使用道具 举报

ID:89072 发表于 2022-4-28 11:57 | 显示全部楼层

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

使用道具 举报

ID:123289 发表于 2022-4-28 12:05 | 显示全部楼层
1、用定时器2做中断
2、中断时间:1/38khz/2=13158uS
3、每次中断将P1.1求反,则P1.1就输出38khz了。
回复

使用道具 举报

ID:732794 发表于 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
}
回复

使用道具 举报

ID:390416 发表于 2022-4-28 12:28 | 显示全部楼层
在STC-ISP软件上面,配置一下,然后再使能T2的中断,和EA=1,就可以启动定时器2了,然后添加定时器2的中断服务函数即可,一般都是自动重装初值的。
回复

使用道具 举报

ID:161164 发表于 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
回复

使用道具 举报

ID:74582 发表于 2022-4-28 13:05 | 显示全部楼层
帮忙顶起来
回复

使用道具 举报

ID:121859 发表于 2022-4-28 13:58 | 显示全部楼层
        RCAP2H=(65536-13)/256;
        RCAP2L=(65536-13)%256;
          TH2=RCAP2H;
        TL2=RCAP2L;
        ET2=1;  
        TR2=1;
回复

使用道具 举报

ID:815936 发表于 2022-4-28 14:37 来自手机 | 显示全部楼层
谢谢大家支持
回复

使用道具 举报

ID:624769 发表于 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 根据你单片机设置情况,以及需要的方波填写。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表