標題: 怎么開啟stc89c52單片機定時器2,用定時器2產(chǎn)生一個38khz的方波 [打印本頁]

作者: 白亞濤147    時間: 2022-4-28 11:03
標題: 怎么開啟stc89c52單片機定時器2,用定時器2產(chǎn)生一個38khz的方波
用定時器2產(chǎn)生一個38khz的方波信號。定時器0和1都被占用了,拜托各位大神了
作者: hslcac    時間: 2022-4-28 11:57

2A772E52-D709-45d2-A36A-70E7715EE851.png (10.76 KB, 下載次數(shù): 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
}

作者: 人人學(xué)會單片機    時間: 2022-4-28 12:28
在STC-ISP軟件上面,配置一下,然后再使能T2的中斷,和EA=1,就可以啟動定時器2了,然后添加定時器2的中斷服務(wù)函數(shù)即可,一般都是自動重裝初值的。
作者: lkc8210    時間: 2022-4-28 12:49
yzwzfyz 發(fā)表于 2022-4-28 12:05
1、用定時器2做中斷
2、中斷時間:1/38khz/2=13158uS
3、每次中斷將P1.1求反,則P1.1就輸出38khz了。

少了一個小數(shù)點
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 //設(shè)置主頻
#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中斷,不需要設(shè)置輸出引腳,方波的輸出,是定死在P1.0的,前3個define 根據(jù)你單片機設(shè)置情況,以及需要的方波填寫。






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1