基于51单片机的锯齿波发生器,要求能够发生出1HZ,100HZ,1KHZ。_百度知 ...
发布网友
发布时间:2024-08-29 15:23
我来回答
共1个回答
热心网友
时间:2024-08-30 22:33
//晶振频率12M,所以定时器脉冲频率为1M=1000000
#define F 12 // 晶振频率
#define ONE_SECOND (F*1000000/12) // 机器周期频率
#define IT0_Cost 10 // 定时器0中断平均花费时间10us,这是大概数据,自己可以仔细计算,影响不大只是为了提高精度,所以无法不可能输出1KHz锯齿波,最高只能输出大约390Hz
#define SAWF 100 // 输出锯齿波频率,建议输出不高于100Hz
#define oTH0 (65536-ONE_SECOND/SAWF/256 + IT0_Cost) / 256
#define oTL0 (65536-ONE_SECOND/SAWF/256 + IT0_Cost) % 256
void main()
{
TMOD=0X01;
TH0=oTH0 ;
TL0=oTL0;
ET0=1;
TR0=1;
EA=1;
while(1){};
}
void timer0(void) interrupt 1
{
static unsigned char vout,ff;
TH0=oTH0 ;
TL0=oTL0;
P2=vout; // P2接DAC,输出100Hz
vout++;
if(vout==255) vout=0;
/* 注释部分替换上面三行即输出1Hz
ff++;
if(ff == 100)
{
P2=vout; // P2接DAC,输出1Hz
vout++;
if(vout==255) vout=0;
*/
}
*/
}