STC89C52RC可不可以写出500kHZ方波?

2019-07-15 16:31发布

想给ADC0809提供时钟信号,ALE分频貌似有点麻烦,不够简洁.所以想请教STC89C52RC可不可以用定时器写一个输出500khz的方波?
向各位前辈求解答!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Aidaohuakai
1楼-- · 2019-07-15 21:05
T=1/F=1/(500khz)=2us,定时器要1us中断一次,你认为51单片机能实现吗?就算是STM32实现起来也很麻烦!
weslydreamer
2楼-- · 2019-07-15 21:24
Aidaohuakai 发表于 2015-7-24 17:59
T=1/F=1/(500khz)=2us,定时器要1us中断一次,你认为51单片机能实现吗?就算是STM32实现起来也很麻烦!

看来只能求助于分频器了
天水边落落
3楼-- · 2019-07-15 22:49
我也要用AD0809,请问你是怎么解决的
张大猛
4楼-- · 2019-07-16 01:35
 精彩回答 2  元偷偷看……
张大猛
5楼-- · 2019-07-16 04:34

/*                                                         
同时用两个定时器控制蜂鸣器发声,
定时器0控制频率,定时器1控制同个
频率持续的时间,间隔2s依次输出
1,10,50,100,200,400,800,
1k(hz)的方波?
设晶振频率为12MHz。
*/
#include<reg52.h>  
#include <intrins.h>
#define uint unsigned int   
#define uchar unsigned char  
sbit beep=P2^3;
uchar tt;
uint fre,flag;

void main()                  
{
        fre=50000;
        beep=0;
        TMOD=0x11;                  //设置定时器0,定时器1为工作方式1
        TH0=(65536-fre)/256;
        TL0=(65536-fre)%256;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR1=1;
        TR0=1;
        while(1);
       
}

void timer0() interrupt 1  
{
        TR0=0;             //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失,每打开再关闭只执行一段if,再进来再执行下一个if
        TH0=(65536-fre)/256;
        TL0=(65536-fre)%256;
        tt++;
        if(flag<40)   
                if(tt==10)
                        {
                                tt=0;             //10个脉冲 一个脉冲50ms×2=100ms
                                fre=50000;
                                beep=~beep;
                        }
        if(flag>=40&&flag<80)          //单独扩起来就不用关TR0再开开了
                {
                        tt=0;
                        fre=50000;
                        beep=~beep;       
                }
        if(flag>=80&&flag<120)
                {
                        tt=0;
                        fre=10000;
                        beep=~beep;       
                }
        if(flag>=120&&flag<160)
                {
                        tt=0;
                        fre=5000;
                        beep=~beep;       
                }
        if(flag>=160&&flag<200)
                {
                        tt=0;
                        fre=2500;
                        beep=~beep;       
                }
        if(flag>=200&&flag<240)
                {
                        tt=0;
                        fre=1250;
                        beep=~beep;       
                }
        if(flag>=240&&flag<280)
                {
                        tt=0;
                        fre=625;
                        beep=~beep;       
                }
        if(flag>=280&&flag<320)
                {
                        tt=0;
                        fre=312;
                        beep=~beep;       
                }
        if(flag>=320&&flag<360)
                {
                        tt=0;
                        fre=156;
                        beep=~beep;       
                }
        TR0=1;
}
void timer1() interrupt 3             //定时器1中断用来产生2秒时间定时
{
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        flag++;
        if(flag==360)
          {
            flag=0;
            fre=50000;
          }
}
weslydreamer
6楼-- · 2019-07-16 10:34
天水边落落 发表于 2016-5-20 21:57
我也要用AD0809,请问你是怎么解决的

7404做一个分频器 用单片机的ALE信号做输入 近期尝试

一周热门 更多>