久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機產生掃頻信號400Hz~3KHz-----占空比50%的方波

單片機產生掃頻信號400Hz~3KHz-----占空比50%的方波

作者: 時間:2016-11-18 來源:網絡 收藏
發一個產生掃頻信號的程序,大家參考一下

//單片機晶振12MHz,這個程序如果要提高掃頻信號輸出的頻率關鍵的一句是

本文引用地址:http://cqxgywz.com/article/201611/315780.htm

//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;
}
// }
}
}



評論


技術專區

關閉