单片机产生扫频信号400Hz~3KHz-----占空比50%的方波
//单片机晶振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;
}
// }
}
}
单片机扫频信号占空比方 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)