您的位置 首页 传感器

单片机发生扫频信号400Hz~3KHz—–占空比50%的方波

发一个产生扫频信号的程序,大家参考一下//单片机晶振12MHz,这个程序如果要提高扫频信号输出的频率关键的一句是//dataLoad=10000/(2*(4+i)…

发一个发生扫频信号的程序,我们参阅一下

//单片机晶振12MHz,这个程序假如要进步扫频信号输出的频率要害的一句是

//dataLoad=10000/(2*(4+i));//153个时钟周期

//记该指令的执行时刻是N个时钟周期

//该程序能够输出地扫频信号的最高频率为fosc/(2*N*12)

//假如想要进步扫频信号的最高频率运用时钟频率更高的芯片,或许能够

//更改这条句子,使之执行时刻缩短

//这个程序的编程思路如下:

//守时器0担任输出方波的守时,输入指定频率的方波

//守时器1担任0.1秒守时,假如时刻到,则改动

//守时器0的操控的输出方波的频率

#include
sbit outWave=P0^0;
#define uchar unsigned char
#define uint unsigned int
uchar t1Counter;//the times of t1 interrupt
uint dataLoad; //the reset data of the time0, volatile variable.
bit t1Int;// the flag of time1 interrupt

//守时器0初始化
void InitTimer0(){
TMOD|=0x01;//守时器方法1
ET0=1;//答应T0中止
TH0=(65536-dataLoad)/256;//守时器初值10ms
TL0=(65536-dataLoad)%256;
TR0=1;//发动T0
}
//守时器0中止
void Time0Int() interrupt 1{
TH0=(65536-dataLoad)/256;//守时器初值10ms
TL0=(65536-dataLoad)%256;
outWave=!outWave;
}
//守时器1初始化
void InitTimer1(){
TMOD|=0x10;//守时器方法1
ET1=1;//答应T1中止
TH1=(65536-50000)/256;//守时50ms
TL1=(65536-50000)%256;
TR1=1;//发动T1
}
//time1
void Time1Int() interrupt 3{
TH1=(65536-50000)/256;//守时50ms
TL1=(65536-50000)%256;
t1Counter++;
}
//主函数
void main(){
uchar i; //the number of the frequency
dataLoad=1250;//400hz,2.5ms
InitTimer0();//守时器0初始化
InitTimer1();
EA=1;//开总中止
PT1=1;
while(1)
{
//if(t1Int)
//{
//t1Int=0;
//t1Counter++;
if(t1Counter==2){//3
t1Counter=0; //2
//change the dataLoad
dataLoad=10000/(2*(4+i));//153个时钟周期
i++;
i=i%26;
}
// }
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/266723.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部